TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] TMS320F28388D:MCAN:在写覆盖模式和 FIFO 满时的接收 FIFO 操作

Guru**** 2046970 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/957815/tms320f28388d-mcan-receive-fifo-operation-in-overwrite-mode-and-when-fifo-is-full

器件型号:TMS320F28388D

根据 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