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.

[参考译文] TMS320F2.8379万D:TMS320F2.8379万D:DCAN IF3工作不正常

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/640740/tms320f28379d-tms320f28379d-dcan-if3-not-working-properly

部件号:TMS320F2.8379万D

您好,

我正在尝试使用IF3寄存器检索新收到消息中的数据字节。 代码轮询CAN_IF3OBS寄存器中的IF3Upd位,查看IF3数据寄存器是否已使用新消息进行更新。 我已经为消息对象1设置了IF3更新启用寄存器,但没有在CAN_IF3OBS寄存器中设置任何观察标志,因此不需要DMA。 以下是与该问题相关的代码片段:

CanbRegs.CAN_IF3OBS.ALL = 0;

CanbRegs.CAN_IF3UPD = 1;

同时(!CanbRegs.CAN_IF3OBS.bit.IF3Upd){;}

tmp1 = CanbRegs.CAN_IF3DATA.ALL;

tmp2 = CanbRegs.CAN_IF3DATB.ALL;

通过CCS 6.2 ,我可以看到每次向邮箱1发送消息时,IF3数据寄存器确实会正确更新,但IF3Upd位从未设置(始终为0)。 因此,轮询永远不会起作用,代码就会被卡住。 这是否是使用IF3的正确方式? 除此问题外,可以正常工作。 它可以发送和接收讯息,并且可以使用IF2寄存器和轮询CAN_NDAT_21检索收到的讯息。

 谢谢!

 SU

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

    您是否尝试设置CanbRegs.CAN_IF3OBS.ALL =0,而不是CanbRegs.CAN_IF3OBS.bit.Data_A =1和CanbRegs.CAN_IF3OBS.bit.Data_B =1? 我认为这应该允许NewDat标志在读取CAN_IF3DATA或CAN_IF3DATB寄存器时设置IF3Upd位。

    此致,
    约瑟夫
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    约瑟夫
    工作正常! 谢谢你。
    在我看来,TRM中的文本意味着如果设置了任何标志位,则需要DMA来完成对寄存器的读取。
    SU
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Su,

    很好地知道这解决了您的问题。

    此致,
    约瑟夫