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.

[参考译文] TMS570LS1224:CANbus、

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/783229/tms570ls1224-canbus

器件型号:TMS570LS1224

您好!

我想问有关 CAN 总线的问题。  

我的主软件循环为100ms (RTI 中断)。 我正在检查的每个循环中是否有可用的消息。  

while (1)
{
if (nextIterationFlag = true)
{
/*清除标志*/
nextIterationFlag = false;

newData = canGetData (canREG1、CAN_message_box_1、canRxData_PTR);
if (newData == true)
{
/*有新数据,所以解码数据*/
}
}

除非消息的传输频率超过10Hz、否则一切工作正常。 如果总线上有更多消息(例如、发送器每20ms 传输一次)、我无法从该消息框中读取消息。 我假设当前消息框的缓冲区被覆盖或一些无法访问的缓冲区。 如何解决?

我假设我可以使用 CAN 中断并在中断后立即读取数据。 但这是唯一的方法吗?

是否有任何方法可以从消息框获取最后数据、而不考虑以前的数据? 我的意思是,如果数据被覆盖,消息框应该接受新数据而不会出现任何错误,函数 canGetData()应该起作用。

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    处理传入消息的最佳方法是使用 CAN 中断(按您的预期)或轮询指示消息存在的标志。
    使用 FIFO 可以防止覆盖消息、但您需要及时读取它们。 如果每隔100毫秒检查一次,则可以在该循环中检查多条消息,而不仅仅是一条消息,并对所有消息进行处理,直到没有未读消息保留为止。
    有关 TMS570LS1xx 系列 CAN 操作的参考、请参阅 www.ti.com/.../spnu515c.pdf 第27章。

    Michail