应用程序只能通过读取 FIFO 输出邮箱,来读取 FIFO 中最先收到的报文。根 据 CAN 协议,当报文被正确接收(直到 EOF 域的最后 1 位都没有错误),且通过了标识符过滤,那么该报文被 认为是有效报文。 接收相关的中断条件 * 一旦往 FIFO 存入 1 个报文,硬件就会更新 FMP[1:0]位,并且如果 CAN_IER 寄存器的 FMPIE 位为 1,那么就 会产生一个中断请求。 * 当 FIFO 变满时(即第 3 个报文被存入),CAN_RFxR 寄存器的 FULL 位就被置 1,并且如果 CAN_IER 寄存器 的 FFIE 位为 1,那么就会产生一个满中断请求。 * 在溢出的情况下,FOVR 位被置 1,并且如果 CAN_IER 寄存器的 FOVIE 位为 1,那么就会产生一个溢出中断 请求。 标识符过滤 在 CAN 协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式将报 文发送给所有的接受者。节点在接收报文时根据标识符的值决定是否需要该报文;如果需要,就拷贝到 SRAM 里;如果不需要,报文就被丢弃且无需软件的干预。 为满足这一需求,bxCAN 为应用程序提供了 14 个位宽可变的、可配置的过滤器组(13~0),以便只接收那些软 件需要的报文。