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.

[参考译文] TMS570LC4357:TMS570LC4357

Guru**** 2451970 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1001261/tms570lc4357-tms570lc4357

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我使用的是 TMS570lc43xx 控制器、并使用 Halco gen 为 CAN 通信生成代码。
但是当我尝试通过 CAN 1接收一些数据时、我发现来自其他节点的 ID 的数据缓冲区没有更新。 我已经尝试了外部回送、还可以!
我们知道,当我们尝试通过 CANID 2接收某些数据时,Halco 为 CAN1中的 RX 指定了 CAN Msg Box 2,那么它的工作正常,但一旦我们使用 updateId()驱动程序的函数更新 ID,它就无法正常工作。
我还尝试检查了 IF3UpdEn、NDAT[1-4]等寄存器、但没有任何结果。
那么,如何通过 CAN1 Msgbox 2上的任何 ID 获取数据呢?

另请查找随附的屏幕截图

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

    您好!

    如果使用11位 CAN ID、则 ID 编程为 ID[28:18]而不是 ID[10:0]、因此应针对11位模式调整 msgBoxArbitVal。

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

    您好、Wang、

    我使用的是具有 J1939协议的11位和19位 ID、但无法对所有 ID 使用单个 MsgBox。  请问   msgBoxArbitVal 应该是什么 ? 如果我将 msgbox1用于 ID xx、将 msgbox2用于 yy、则 xx 的数据将复制到 yy、同时定期传输两个 id。

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

    您好!

    对于11位 ID,如果使用 HALCoGen 生成的代码,canInit()将把 ID 编程为 ID[28:18]。 如果您使用自己的代码更新消息 ID、请将 ID 左移18位:

    IF1ARB |=(msgid & 0x7FFU)<< 18;

    对于29位 ID、您可以直接将 ID 编程到 IFxARB:

    IF1ARB |=(msgid & 0x1FFFFFFF);

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

    感谢好友的回复...实际上我在驱动程序部分中应用了不同的方法。  

    我在函数中添加了两行、在这里我们从接收端获取 ID  

    /*从仲裁寄存器读取消息框 ID。 *


    msgBoxID =(节点->IF2ARB & 0x1FFFFFFFU);
    CAN_Rx_LLD_t.RxMsgID = msgBoxID;

    这解决了我在 msg 缓冲区中更新 ID 的问题、现在我将单个缓冲区用于多个信号、如的 msg 缓冲区1  

    TX 和 Rest 用于 Rx。