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.

[参考译文] TM4C1294NCPDT:CAN 控制器消息对象已了解

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1017394/tm4c1294ncpdt-can-controller-message-objects-understanding

器件型号:TM4C1294NCPDT

尊敬的 SupportTeam:

我要穿过这个线程

https://e2e.ti.com/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/344328/can-message-filter-multiple-matches

我对 CAN 和消息目标概念非常陌生;我对消息目标有几个疑问。

1) 1)如果仅使用1个报文对象进行接收、并且在应用程序处理该报文对象之前、将接收新的报文;它是否会覆盖报文对象中的现有报文?

2)如果使用2个没有过滤设置的报文对象(接受所有 CAN 报文)、则报文对象1中的报文尚未被应用程序处理、则会收到一条新的报文;它会覆盖对象1还是复制到对象2。

谢谢、此致

Abhijit

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

    您好!

    Unknown 说:
    1)如果仅使用1个消息对象进行接收,并且在应用程序处理之前,将收到一条新消息;它是否会覆盖消息对象中的现有消息?

    上一条消息将丢失。 收到的消息将被覆盖。 请参阅以下数据表。  

    CANIFnMCTL 寄存器的 NEWDAT 位
    设置为指示已接收到新数据。 CPU 在读取时应清除该位
    报文对象向控制器指示已接收报文、且缓冲区为
    可免费接收更多消息。 如果 CAN 控制器接收到一条报文、并且 NEWDAT 位为
    CANIFnMCTL 寄存器中的 MSGLST 位已经置位、表示之前的数据已写入
    丢失了。

    [引用 userid="391954" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1017394/tm4c1294ncpdt-can-controller-message-objects-understanding 2]2)如果使用2个没有筛选设置的消息对象(接受所有 CAN 消息),则应用程序尚未处理消息对象1中的消息,将收到新的消息;它将覆盖对象1还是复制到对象2。

    它将具有与上一个方案相同的效果。 原因是第二个传入报文与第一个报文对象的接受滤波器匹配。 但它不知道第一个消息对象尚未被读取。 您可以配置 FIFO 模式。 在这种情况下、第二个传入消息将进入第二个消息对象。  

    19.3.6接受接收到的报文对象
    当仲裁域和控制域(CANIFnARB2寄存器的 ID 位和 XTD 位以及 RMTEN 位和
    CANIFnMCTL 寄存器的 DLC[3:0]位)将完全移入
    CAN 控制器、控制器的消息处理功能开始扫描消息
    匹配的有效报文对象的 RAM。 扫描消息 RAM 以获得匹配的消息
    对象、控制器使用通过中的屏蔽位编程的接受滤波
    CANIFnMSKn 寄存器、并通过 CANIFnMCTL 寄存器的 UMASK 位启用。 每个都有效
    从对象1开始的报文对象与传入报文进行比较、以找到匹配的报文
    消息 RAM 中的消息对象。 如果出现匹配,则停止扫描并显示消息
    处理程序根据接收到的是数据帧还是远程帧来继续。

    如果配置了消息对象1和消息对象2,请参见下面的说明。 请参阅数据表、了解更多详细信息。  

    19.3.11.2使用 FIFO 缓冲器接收消息
    接收到的标识符与 FIFO 缓冲区匹配的报文将从该报文开始进行存储
    具有最低报文编号的对象。 当消息存储到的消息对象中时
    FIFO 缓冲区中、该报文对象的 CANIFnMCTL 寄存器位的 NEWDAT 位置位。 设置
    NEWDAT 当 EOB 清零时、报文对象被锁定、不能被报文写入
    直到 CPU 清零 NEWDAT 位。 消息存储在 FIFO 缓冲区中、直到
    到达该 FIFO 缓冲区的最后一个报文对象。 直到前面的所有消息对象都具有
    通过清零 NEWDAT 位将该 FIFO 缓冲区的所有其它消息写入
    最后一个报文对象、因此会覆盖之前的报文。

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

    感谢您的回答。 如果我将 EOB 设置为0,它是否会启用 FIFO 缓冲器? 任何其他配置都需要考虑

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

    您好!

     没错。 将第一个报文对象的 EOB 设置为0、将第二个报文对象的 EOB 设置为1。 这将是一个包含两个单元的 FIFO。  

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

    清除。 谢谢你。

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

    很抱歉、还有几个疑问

    如果需要为 FIFO 缓冲区启用两个以上的报文对象,则最后一个报文对象的 EOB 应为1,而其他报文对象的 EOB 应为0。 正确吗?

    如果我们启用 FIFO 缓冲区,对接收逻辑是否有任何额外的处理? 剂量现有单个物体接收逻辑仍然有效?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="391954" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1017394/tm4c1294ncpdt-can-controller-message-objects-understanding/3761753 #3761753"]-如果需要为 FIFO 缓冲区启用两个以上的报文对象,则最后一个报文对象的 EOB 应设置为1,其他报文对象的 EOB 应为0。 它是否正确?

    正确。

    [引用 userid="391954" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1017394/tm4c1294ncpdt-can-controller-message-objects-understanding/3761753 #3761753"]-如果启用 FIFO 缓冲区,是否对接收逻辑执行任何其他处理? 剂量现有单个物体接收逻辑仍然有效?[/QUERP]

    对于那些不属于 FIFO 的报文对象、它们将按照正常的接收逻辑工作。  

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

    感谢您的回答。 我将详细阐述我的第二个问题-我的当前 Rx_ISR 适用于没有 FIFO 的单个消息对象;相同的逻辑适用于具有 FIFO 缓冲器的多个消息对象

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

    您好!

     Bob 用示例 ISR 代码回答的这个帖子应该有助于回答您的查询。  

    https://e2e.ti.com/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/886550/tm4c123gh6pm-can-using-fifo?tisearch=e2e-sitesearch&keymatch=can%2520fifo#

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

    谢谢你