请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F2808 我遇到了我无法解释的行为。 似乎 MSGID.bit.AAM 只在定义的发送邮箱为16 - 31时工作。
下面的示例运行为我可以向 ID 为5的 F2808发送一条 CAN 消息、并且我获得一个自动应答。 请注意、MBOX2为 Rx、MBOX28为 Tx
但是、如果我 使 MBOX28 Rx 和 MBOX2 Tx 以及"ECANaRegs.CANMD.ALL = 0xFFFFFF0000;"以交换 Rx 和 Tx 方向并使用 CANTA 位.TA2、则不再获得自动应答。 我已经厌倦了其他 MBOX 组合、但只有0 - 15范围内的 Tx 邮箱工作正常。 有什么想法吗?
// Receive
ECanaMboxes.MBOX2.MSGID.bit.STDMSGID = 5;
ECanaMboxes.MBOX2.MSGID.bit.IDE = 0;
ECanaMboxes.MBOX2.MSGID.bit.AAM = 0;
ECanaMboxes.MBOX2.MSGCTRL.bit.DLC = 8;
// Transmit
ECanaMboxes.MBOX28.MSGID.bit.STDMSGID = 5;
ECanaMboxes.MBOX28.MSGID.bit.IDE = 0;
ECanaMboxes.MBOX28.MSGID.bit.AAM = 1;
ECanaMboxes.MBOX28.MDL.all = 0x28282828;
ECanaMboxes.MBOX28.MDH.all = 0x28282828;
/* Enable appropriate Mailboxes in CAN-A*/
ECanaRegs.CANME.all = 0xFFFFFFFF;
/* Configure CAN-A Mailboxes as RX (1) and TX (0)*/
ECanaRegs.CANMD.all = 0x0000FFFF;
while(1)
{
do {ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;} // Wait for TA28 bit to be set..
while(ECanaShadow.CANTA.bit.TA28 == 0);
if(ECanaShadow.CANTA.bit.TA28)
{
ECanaShadow.CANTA.all = 0;
ECanaShadow.CANTA.bit.TA28 = 1; // Clear TA28
ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
// Update the mailbox data
ECanaMboxes.MBOX28.MDL.all += 3;
}
}