This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
根据 TMS320F2838x TRM 第45.5.14.2节、在覆盖模式下、如果发出 Rx FIFO 满条件信号、则读取 Rx FIFO 元素至少应从 Get 索引+ 1开始。
但是、根据 mCAN.c 中的 MCAN_readMsgRam 函数定义、我可以看到 Get 索引将始终在此函数中计算、然后在不考虑上述条件的情况下从该索引中读取消息。
在从 FIFO 读取消息时是否有任何选项可以处理上述情况?
Dhanashree、
mCAN.c 中的 MCAN_readMsgRam 函数是一个通用函数、用于处理常规缓冲区和 FIFO 读取情况。 您可以将其用作参考并为覆盖模式开发类似的函数、因为这是一种特殊情况。 同样、如第45.5.14.2节所示、您需要添加的偏移量实际上取决于 CPU 读取 RX FIFO 的速度。 当溢出条件被命中时、这个函数只能在非阻塞模式中被调用
此致、
Praveen
Dhanashree、您好!
这仅在 FIFO 设置为覆盖模式时适用。 当 FIFO 消息 RAM 中的消息被覆盖时、我们会让客户选择跳过从 FIFO 满恢复的旧消息数。
API MCAN_readMsgRam()从 FIFO 寄存器 MCAN_RXF0S 中读取 Get 索引值,然后从 FIFO 的该索引中读取 Msg。
为了在获取索引+1或更大值时读取 Rx FIFO 元素、可以执行以下操作。
1) 1)通过 API MCAN_getRxFIFOStatus()读取 FIFO 的状态,以读取 Get 索引的值并检查 FIFO 满状态(或可以为 FIFO 满状态配置中断)。
2) 2)如果 FIFO 已满、则根据需要通过 API MCAN_writeRxFIFOAck()将 Get 索引更新为+1或更大。
3) 3)通过 MCAN_readMsgRam()从 FIFO 中读取所需的 msg 对象。
谢谢、
Yashwant