请参阅 eCAN 参考指南- SPRUEU1
我需要在短时间内处理大量 CAN 消息。 按照本指南、我计划设置多个邮箱来接收消息、以最少数量保护除一个邮箱外的所有邮箱、并在消息到达时中断。
第3.2.4节接收消息提示
此示例使用邮箱3。 当接收到一条报文时、接收报文挂起寄存器(CANRMP)中相应的标志被设为1、并产生中断。 然后、CPU 可以从邮箱 RAM 中读取消息。 在 CPU 从邮箱读取消息之前、它应该首先清除 RMP 位(RMP.3=1)。 CPU 还应该检查接收消息丢失标志 RML.3=1。 根据应用的不同、CPU 必须决定如何处理这种情况。
读取数据后、CPU 需要检查 RMP 位是否没有被模块再次置位。 如果 RMP 位已设置为1、则数据可能已损坏。 CPU 需要再次读取数据、因为在 CPU 读取旧消息时接收到新消息。
在我看来、如果我在读取数据之前清除受保护邮箱中的 RMP、那么我会邀请外设覆盖数据、即使还有另一个空邮箱可以使用。 因此、我认为我应该(1)读取数据、然后(2)清除 RMP。
如果邮箱受到保护、这应该是可以的、因为在读取之后、邮箱中不能存储新消息。
但是、如果它不受保护、并且 RML 在读取之前已经被置位、那么我想无法确定数据是否已被覆盖/损坏?
我缺少什么吗? 感谢您的任何帮助。