bxCAN接收处理

接收处理

为了接收 CAN 消息,提供了构成 FIFO(First Input First Output) 的三个邮箱。为了节约 CPU 负载,简化软件并保证数据一致性,FIFO 完全由硬件进行管理。应用程序通过 FIFO 输出邮箱访问 FIFO 中所存储的消息。

有效消息

当消息依据 CAN 协议正确接收(直到 EOF 字段的倒数第二位都没有发送错误)并且成功通过标识符筛选后,该消息将视为有效,请参见第 24.7.4 节:标识符筛选。


FIFO 管理

FIFO 开始时处于空状态,在接收到第一条有效消息存储在其中后,变为 Pending_1 状态。硬件通过将接收FIFOx(x=0,1)寄存器<CAN_RFxR---CAN receive FIFO x register>中的FIFO消息挂起位<FMP[1:0]---FIFO message pending> 置为 01b 来指示该事件。消息将在FIFO输出邮箱中供读取。软件将读取邮箱内容,并通过将接收FIFOx(x=0,1)寄存器<CAN_RFxR---CAN receive FIFO x register>中的释放FIFO输出邮箱位<RFOM---Release FIFO 0 output mailbox>置1,来将邮箱释放。FIFO随即恢复空状态。如果同时接收到新的有效消息,FIFO 将保持 Pending_1 状态,新消息将在输出邮箱中供读取。

如果应用程序未释放邮箱,下一条有效消息将存储在 FIFO 中,使其进入 Pending_2 状态(FMP[1:0] = 10b)。下一条有效消息会重复该存储过程,同时将 FIFO 变为 Pending_3 状态(FMP[1:0] = 11b)。此时,软件必须通过将 RFOM 位置 1 来释放输出邮箱,从而留出一个空邮箱来存储下一条有效消息。否则,下一次接收到有效消息时,将导致消息丢失。
另请参见第 24.7.5 节:消息存储。

上溢

一旦 FIFO 处于 Pending_3 状态(即三个邮箱均已满),则下一次接收到有效消息时,将导致上溢并丢失一条消息。硬件通过将 接收FIFOx(x=0,1)寄存器<CAN_RFxR---CAN receive FIFO x register>中的FIFO上溢标志位<FOVR---FIFO overrun>置 1 来指示上溢状况。丢失的消息取决于 FIFO 的配置:
●    如果禁止 FIFO 锁定功能(主控制寄存器<CAN_MCR---CAN master control register>中的接收 FIFO 锁定模式位<RFLM---Receive FIFO locked mode>清零),则新传入的消息将覆盖 FIFO 中存储的最后一条消息。在这种情况下,应用程序将始终能访问到最新的消息。
●    如果使能 FIFO 锁定功能(主控制寄存器<CAN_MCR---CAN master control register>中的接收 FIFO 锁定模式位<RFLM---Receive FIFO locked mode>置 1),则将丢弃最新的消息,软件将提供 FIFO 中最早的三条消息。

与接收相关的中断

消息存储到 FIFO 中后,接收FIFOx(x=0,1)寄存器<CAN_RFxR---CAN receive FIFO x register>中的FIFO消息挂起位<FMP[1:0]---FIFO message pending> 即会更新,如果中断使能寄存器<CAN_IER---CAN interrupt enable register>中的FIFO 消息挂起中断使能位<FMPIE---FIFO message pending interrupt enable>置 1,将产生中断请求。
FIFO 存满消息(即存储了第三条消息)后,接收FIFOx(x=0,1)寄存器<CAN_RFxR---CAN receive FIFO x register>中的FIFO满标志位 <FULL---FIFO full>置 1,如果 CAN_IER 寄存器的 FFIE 位置 1,将产生中断。
出现上溢时,FOVR 位将置 1,如果中断使能寄存器<CAN_IER---CAN interrupt enable register>中的FIFO 上溢中断使能位<FOVIE---FIFO overrun interrupt enable)> 置 1,将产生中断。

相关推荐

  1. bxCAN接收处理

    2024-01-27 23:54:01       35 阅读
  2. uart接收数据处理

    2024-01-27 23:54:01       38 阅读
  3. Zlmediakit 接收到 rtc包后的处理流程

    2024-01-27 23:54:01       37 阅读
  4. vue 怎么处理get请求,接收url地址栏参数

    2024-01-27 23:54:01       17 阅读
  5. android 接收到的json字段为null处理

    2024-01-27 23:54:01       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 23:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 23:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 23:54:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 23:54:01       20 阅读

热门阅读

  1. 【硅谷甄选】环境变量的配置

    2024-01-27 23:54:01       37 阅读
  2. 14. Spring Boot的自动配置

    2024-01-27 23:54:01       38 阅读
  3. linux动态库,静态库

    2024-01-27 23:54:01       32 阅读
  4. 用Spring Validation优雅实现参数校验

    2024-01-27 23:54:01       41 阅读
  5. springboot核心有几层架构

    2024-01-27 23:54:01       38 阅读
  6. 第十四届蓝桥杯C组题目 三国游戏

    2024-01-27 23:54:01       40 阅读
  7. python入门Flask框架学习(二)

    2024-01-27 23:54:01       37 阅读
  8. RabbitMq学习

    2024-01-27 23:54:01       30 阅读