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.

[参考译文] TMS320F28069:清除 CAN 邮箱中断

Guru**** 2581345 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/651939/tms320f28069-clear-can-mailbox-interrupt

器件型号:TMS320F28069

大家好、

我的问题可能看起来很简单、但我希望有人确认清除 CAN 邮箱中断的方法、因为我在数据表和示例代码中发现了令人困惑的信息。

我在 SCC 配置中使用 eCANA、在 Rx 中配置 MBX [0-9]、在 Tx 中配置其他配置。

在 Rx CAN 回调中、我按如下方式清除邮箱中断:

EALLOW;

    ECanaShady.CANRMP.ALL = ECanaRegs.CANRMP.ALL;

      ECanaShady.CANRMP.ALL |=位;

      ECANaRegs.CANRMP.ALL = ECANaShady.CANRMP.ALL;

EDIS;

这是正确的方法吗?

令我困惑的数据表内容如下:

 2.7接收消息挂起寄存器(CANRMP)

 CANRMP 和 CANRML 寄存器中的位通过写 CANRMP 寄存器清零、相应位的位置为1。

 因此,通过写入1 (‘反相’复位)将其复位。

 3.2.4接收消息

 在 CPU 从邮箱读取消息之前、它应该首先清除 RMP 位(RMP.3=1)。

 第1.5.2条和第3.2.4条(读前和读后)似乎有双重含义。

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

    正确的是、写入"1"将清除相应的 RMP 位。 因此、当您写入 RMP 寄存器时、除了您实际希望清除的位之外的所有位都必须被屏蔽(0)。 您必须和适当的位掩码。 另请注意、您可以在写入影子寄存器时使用".bit"定义。 例如、如果您将影子 RMP 寄存器初始化为全零、则可以选择性地将所选位设为"1"、并将影子值写入 CANRMP。

     

    首先清除 RMP 会导致无法检测到消息覆盖的可能性。

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