请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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 的数据。
我有什么问题吗? 我可以做什么来解决这个问题?
谢谢你。