匹配过程

匹配过程扫描MB 内存以寻找具有和从CAN 总线上接收到帧相同ID 的接收MBs。如果FIFO
被使能,可以在邮箱和FIFO 过滤器中选择扫描的优先级。在任何情况下,匹配将从具有最小
号的报文缓冲区向最大号的报文缓冲区进行。如果在第一个结构中没有找到匹配的,那么随后
将扫描下一个结构。如果FIFO 队列满,那么匹配算法会在FIFO 区域之外选择匹配的MB。
如果正在接受帧,那么它将会被存储在一个隐藏的附加MB,该MB 称之为接收串行报文缓
冲区(Rx SMB)。
匹配的开始点取决于以下条件:
1.如果接收到的帧为远程帧,那么开始点位帧的CRC 字段;
2.如果接受到的帧为数据帧并且其DLC 字段的值为0,那么开始点为帧的CRC 字段;
3.如果接受到的帧为数据帧并且其DLC 字段的值不为0,那么开始点为帧的DATA 字段;

匹配过程扫描所有的接收队列FIFO(如果开启)以及激活的接收邮箱(CODE 字段为
EMPTY,FULL,OVERRUN 或者RANSWER)来寻找从CAN 总线上接收到的SMB 的匹配元素的一次成功
比较。SMB 和邮箱具有相同的结构。接受结构(接受队列FIFO 或者邮箱)与具有一次成功比
较的匹配元素称之为“匹配结构”。在扫描所有这些匹配结构的最后将会选择出匹配成功者并
且这取决于前面所描述的条件。参考下表。

当满足以下条件中的任何一个时,接受结构为free-to-receive:
1.邮箱的CODE 字段为EMPTY;
2.邮箱的CODE 字段是FULL 或者OVERRUN,并且该邮箱已经被处理过(C/S 字已经被CPU 读取
过并且已经被解锁);
3.邮箱的CODE 字段为FULL 或者OVERRUN,并且该邮箱已经失活;
4.接受队列不满。

一、
对于邮箱匹配优胜者受MCR[IRMQ]为的影响。如果该位为0,那么匹配优胜者为第一个被
匹配的邮箱而不管它是不是free-to-receive。如果该位置位,那么匹配优胜者通过以下优先
级来选择:
1.第一个匹配邮箱的free-to-receive;
 2.最后一个匹配邮箱的非free-to-receive;

如果 non-safe Mailbox inactivation(参见“ Mailbox inactivation“)发生在匹配过程中,并且这个失活的邮箱
是此时匹配邮箱那么这个临时匹配邮箱将会变为无效。匹配扫描不会停止也不会重新启动,
它将继续进行。当前的匹配过程正常进行,因此可能会丢失一个报文。

例如假设禁止FIFO,MCR[IRMQ ]置1 MB2和MB5具有相同的ID,FlexCAN 模块将以该ID 开始接收报文。
当第一个报文到达,匹配算法会找到第一个与ID值相匹配的MB2,MB2 的code 为EMPTY, MB2接收报文.
 当第二个报文到达时,匹配算法会又找到MB2,但是它不为“free-to-receive”,因此它将继续寻找并且找到MB5
 然后将报文存储在MB5
 第三个相同ID报文到达时 匹配算法会发现已经没有可匹配的MB(free-to-receive),它将覆盖MB5
 然后设置该MB5 的CODE 字段为OVERRUN。

基于上述方法可以利用多个MB实现一个接收队列,假设5个RX_MB 具有相同ID 。在匹配过程中,接收这些相同ID
 报文必须排队进入到这五个RX_MB。CPU 可以检测接收到MB 的时间戳来决定已经接收报文的顺序。

二、
请参阅Rx单个屏蔽寄存器(CAN_RXIMRx)的说明。
在匹配算法期间,如果断言掩码位,则比较相应的ID位。
如果掩码位被否定,则相应的ID位是“不比较”。
请注意,单个屏蔽寄存器在RAM中实现,因此它们不会在复位后初始化,此外,它们只能在模块处于冻结模式时进行编程;           否则,它们被硬件阻止。

三、                                                                                                                                                                                       FlexCAN还支持备用屏蔽方案,仅具有四个屏蔽寄存器(CAN_RXMGMASK,CAN_RX14MASK和CAN_RX15MASK),         以便与传统应用程序向后兼容。仅当CAN_MCR寄存器中的IRMQ位被取反时,将启用此备用屏蔽方案。

四、                                                                                                                                                                                               通过CTRL2[MRP]位选择扫描的优先级为邮箱优先或者接收队列FIFO 优先。

(1)如果扫描优先级是接收队列FIFO优先:
1.如果接收队列FIFO 是匹配结构并且是free-to-receive,那么接收队列FIFO 就是匹配
优胜者而不再扫描邮箱;
2.否则(接收队列FIFO 不是匹配结构或者不是free-to-receive),则匹配优胜者是在上
面所描述的邮箱中找到的。

(2)如果扫描优先级是邮箱优先:
1.如果匹配邮箱的free-to-receive 被找到,那么它就是匹配优胜者而不再扫描接收队列FIFO;
2.如果没有找到匹配的邮箱,那么匹配优胜者将会在接收队列FIFO 中寻找。
如果上面的两个情况都不满足并且没有找到一个匹配邮箱的free-to-receive,那么匹配优胜者将由MCR[IRMQ]位来决定:
如果MCR[IRMQ]位为0,那么匹配优胜者为第一个匹配的邮箱;
如果MCR[IRMQ]位为1,那么如果有一个free-to-receive 匹配结构,匹配优胜者为接收
队列FIFO,不然匹配胜利者为最后一个非free-to-receive 匹配邮箱。

K65 Flex_CAN 匹配过程相关推荐

  1. android 资源匹配,Android资源匹配过程(二)

    上一篇文章了解了Android资源标签属性及优先级 后,下面我们来看资源的具体匹配规则. 下面以一个实际例子作为说明. 假设某App中的drawable资源有如下几种选项: drawable/ dra ...

  2. 若S作主串,P作模式串,试分别写出利用BF算法和KMP算法的匹配过程。

    目   录 题目: 百度文库-答案: (1) (2) MOOC标准答案: (1) (2) mooc答案-截图: 数据结构(C语言版)-严蔚敏2007 题目: 设字符串S='aabaabaabaac', ...

  3. MTK驱动(53)---平台DTS文件匹配过程

    MTK平台DTS文件匹配过程 1. lk中platform paramter lk阶段会从boot image 解析出dtb数据,然后通过atag方式将dtb数据传递给了内核.    在mtk平台lk ...

  4. 高通平台msm8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)

    本系列导航: 高通平台8953  Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...

  5. Python正则表达式书写容易碰到的陷阱:\W*和\W*?匹配过程遇到的问题

    老猿在分析<Python正则表达式\W+和\W*匹配过程的深入分析>中的问题时,想到一个问题,如果"re.split('(\W*)','Hello,world')"的处 ...

  6. Linux设备驱动和设备匹配过程

    Linux设备驱动和设备匹配过程 1. 设备驱动匹配简述 2. 重点结构体介绍 2.1 `struct device` 2.2 `struct platform_device` 2.3 `struct ...

  7. Python正则表达式\W+和\W*匹配过程的深入分析

    在学习re.split函数的处理过程中,发现执行如下语句及返回与老猿预想的不一致: >>> re.split('\W*','Hello,world') ['', 'H', 'e', ...

  8. Java中的正则表达式匹配过程

    正则表达式:定义字符串的模式,用来对字符串进行搜索.编辑或处理文本. 目前的正则表达式引擎大体上可分为不同的两类:DFA和NFA,而NFA又基本上可以分为传统型NFA和POSIX NFA. DFA D ...

  9. 数据查重去重,数据匹配过程

    帮助更多需要自动化解决工作的人们. 步骤:不完整,重复,错误,格式不规范数据 -> 数据清洗 -> 正确规范数据 -> 数据去重技术 -> 数据匹配. 使用过的一些相关软件,查 ...

最新文章

  1. iOS开发业界毒瘤 Hook
  2. 物联网在“最后一公里”投递中的应用
  3. MotionEvent的getX(),getY()与getRawX(),getRawY()区别
  4. sublime golang 开发的时候(go get)第三方包没办法自动提示问题
  5. .NET 开发系统 -知识 点
  6. div+css学习笔记一(转)
  7. java归并排序代码_Java归并排序算法
  8. php获取时间计算时间差
  9. 宋宝华:火焰图:全局视野的Linux性能剖析
  10. Rust : standford 操作系统课与rust各种指针图
  11. 北斗卫星导航系统基础篇之(三)——北斗缩略词详解
  12. Android中使用Iconfont图标制作自己的矢量图库
  13. 一款智能家居APP的雏形
  14. 现代控制理论(机器人方向)习题与实践补充资料和复习说明(2019版)
  15. 配置 Tapestry
  16. Android 调用第三方 APP
  17. TLS初探(4)多域名证书
  18. day02 快速上手
  19. 华为云鲲鹏云服务抢占云上多元算力新赛道
  20. 福建计算机如何报名,福建2020年9月计算机考试如何报名

热门文章

  1. flex 的 三个参数:flex-grow、flex-shrink、flex-basis
  2. 智力题:最短时间过桥问题
  3. bootstrap 元素
  4. 蓝牙+语音系列产品分类
  5. 【已解决】ERROR: ENOENT: no such file or directory,open
  6. WebRTC RTCP RTP Feedback
  7. 如何判断产品的生命周期
  8. 一眼就能看懂的Java自学手册,附详细答案解析
  9. 99元包月,每周鲜花送上门,看好!
  10. EMI/EMC设计经典70问答,拿好不谢