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.

[参考译文] TMS320F28335:清除 RMP 位会清除 CAN 中所有其他低优先级 RMP 接收邮箱位

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/744072/tms320f28335-clearing-a-rmp-bit-clears-all-other-lower-priority-rmp-reception-mailbox-bits-in-can

器件型号:TMS320F28335

您好!

我使用实验套件在自检模式下使用 CAN。 我已经在 eCAN 模式和11位标识符中配置了6个发送邮箱(MB10-MB15)和6个接收邮箱(MB26-MB31)。 当数据被读取(在中断内)时、我还将通过 SCI 在终端上显示此数据。

/*CAN0 Rx/Tx 中断功能*/
中断空 ecan0intA_ISR (空)
{
//
//用于传输的数据变量接收无符号、有符号(用于 BDC)
//
unsigned int mailbox_nr、u_data;
int s_data;
字符 d;

Mailbox_nr = ECanaRegs.CANGIF0.bit.MIV0;//设置 GMIF0-I0EN 的邮箱


ECanaShading.Canta.all = 0;

//ECanaShading.CANTRS.ALL = 0;

//ECanaShady.CANTRS.ALL = ECanaRegs.CANTRS.ALL;

switch (mailbox_nr)
{
情况(30)://如果邮箱#30接收消息
{
//并为下一个接收准备 MBX1
ECANaRegs.CANRMP.bit.RMP30 = 1; //清除状态标志 RMP1

U_data = ECANaMboxs.MBOX30.MDH.byte.BYTE5;

switch (u_data)
{
情况(0x20):
D ="P";
中断;
情况(0x21):
D ="R";
中断;
情况(0x22):
D ="N";
中断;
情况(0x23):
D ="D";
中断;
默认值:
D ='D';

}



//
//加载数据
//
sprintf (str、"驱动模式为%c \n"、d);
MSG = str;
scia_msg (msg);
中断;
}

} 

我正在使用中断来访问数据。 除了由于多个邮箱接收而导致 RMP 寄存器被填满之外、它在大多数情况下都适用。 在这种情况下、控制优先级最高(在本例中为 MB30)。 当我将 RMP 位置位以清零 BIT30时、其他位也会清零、并且我会丢失来自这些 MB 的数据。

我有什么问题吗? 我可以做什么来解决这个问题?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要使用32位访问来执行 R/W 操作。 这是通过使用影子寄存器来完成的、如我的 app.note SPRA876中所示。 您未采用以下32位 R/W:
     
    mailbox_nr = ECanaRegs.CANGIF0.bit.MIV0;    //mailbox that set GMIF0-I0EN
     
     ECanaRegs.CANRMP.bit.RMP30 = 1;      // clear the status flag RMP1
     
    如果 您直接访问类似这样的位字段、结果可能无法预测。 具体来说、对于 CANRMP、向其写入1即可将设置 RMP 位清零。 如果写入损坏、可能会意外清除其他设置的 RMP 位、这可能是您看到的结果。 请参阅 app.note 中的 CAN_RXINT_A 项目、其中显示了清除 RMP 位的正确方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢 Hareesh! 修复了它:)