尊敬的 SupportTeam:
我要穿过这个线程
我对 CAN 和消息目标概念非常陌生;我对消息目标有几个疑问。
1) 1)如果仅使用1个报文对象进行接收、并且在应用程序处理该报文对象之前、将接收新的报文;它是否会覆盖报文对象中的现有报文?
2)如果使用2个没有过滤设置的报文对象(接受所有 CAN 报文)、则报文对象1中的报文尚未被应用程序处理、则会收到一条新的报文;它会覆盖对象1还是复制到对象2。
谢谢、此致
Abhijit
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.
尊敬的 SupportTeam:
我要穿过这个线程
我对 CAN 和消息目标概念非常陌生;我对消息目标有几个疑问。
1) 1)如果仅使用1个报文对象进行接收、并且在应用程序处理该报文对象之前、将接收新的报文;它是否会覆盖报文对象中的现有报文?
2)如果使用2个没有过滤设置的报文对象(接受所有 CAN 报文)、则报文对象1中的报文尚未被应用程序处理、则会收到一条新的报文;它会覆盖对象1还是复制到对象2。
谢谢、此致
Abhijit
您好!
Unknown 说:1)如果仅使用1个消息对象进行接收,并且在应用程序处理之前,将收到一条新消息;它是否会覆盖消息对象中的现有消息?
上一条消息将丢失。 收到的消息将被覆盖。 请参阅以下数据表。
CANIFnMCTL 寄存器的 NEWDAT 位
设置为指示已接收到新数据。 CPU 在读取时应清除该位
报文对象向控制器指示已接收报文、且缓冲区为
可免费接收更多消息。 如果 CAN 控制器接收到一条报文、并且 NEWDAT 位为
CANIFnMCTL 寄存器中的 MSGLST 位已经置位、表示之前的数据已写入
丢失了。
它将具有与上一个方案相同的效果。 原因是第二个传入报文与第一个报文对象的接受滤波器匹配。 但它不知道第一个消息对象尚未被读取。 您可以配置 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 缓冲区的所有其它消息写入
最后一个报文对象、因此会覆盖之前的报文。
正确。
[引用 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 的报文对象、它们将按照正常的接收逻辑工作。
您好!
Bob 用示例 ISR 代码回答的这个帖子应该有助于回答您的查询。