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.
您好、香榭丽舍
我尝试使用以下示例测试 F2837x CAN 的标识符掩码函数:
C:\ti\controlSUITE\device_support\F2837xS\v191\F2837xS_Examples_CPU1\CAN_loopback
在 CANInit(Cana_base)中,我已设置 IF2MCTL.umask 位。 通过使用以下指令、
HWREGH (ui32Base + CAN_O_IF2MCTL)= CAN_IF2MCTL_UMASK;
我 修改了消息 ID 和掩码、如下所示:
sTXCANMessage.ui32MsgID = 0x04000164; //
sTXCANMessage.ui32MsgIDMask = 0x1f00FFFF; //
sRXCANMessage.ui32MsgID = 0x04000168; //
sRXCANMessage.ui32MsgIDMask = 0x1f00fff0; //
但是 ,消息对象2无法接收 来自对象1的消息。
您能否帮助检查 标识符掩码函数的其它任何内容或如何配置标识符掩码函数?
Huihuang、
如果您不使用任何滤波、这是否起作用? 即、如果您使两个邮箱的 MSGID 相同、是否收到了消息? 如果确实如此、则可以将掩码的所有位设置为"无关"、然后查看其是否起作用。 如果这也起作用、您可以尝试屏蔽所选的位、就像您在发布的代码 snip 中所做的那样。
您好、Haresh、
感谢您的帮助!
如果两个邮箱的 MSGID 与下面的相同 ,不管 MASK 位设置为 0x00或 0x1ffffff,都可以接收到消息,
sTXCANMessage.ui32MsgID = 0x04000164;//
sRXCANMessage.ui32MsgID = 0x04000164;//
但是,如果我按如下方式更改 MSGIDS, 那么不管掩码位 是0x00还是 0x1ffffff,都无法接收到消息。
sTXCANMessage.ui32MsgID = 0x04000164;//
sRXCANMessage.ui32MsgID = 0x04000168;//
//设置为无关
sTXCANMessage.ui32MsgIDMask = 0x00;//
sRXCANMessage.ui32MsgIDMask = 0x00;
//设置掩码位
sTXCANMessage.ui32MsgIDMask = 0x1fffffff;//
sRXCANMessage.ui32MsgIDMask = 0x1fffffff;
我是否知道我的设置有什么问题 、还有其他需要注意的问题、或者您是否有有关掩码位设置的可行示例?
您好、Haresh、
我只需使用 F2837x CAN 示例项目、如下所示:
C:\ti\controlSUITE\device_support\F2837xS\v191\F2837xS_Examples_CPU1\CAN_loopback
在 CANInit(Cana_base)中,我已设置 IF2MCTL.umask 位。 通过使用以下指令、
HWREGH (ui32Base + CAN_O_IF2MCTL)= CAN_IF2MCTL_UMASK;
我 修改了消息 ID 和掩码、如下所示:
sTXCANMessage.ui32MsgID = 0x04000164; //
sTXCANMessage.ui32MsgIDMask = 0x1f00FFFF; //
sRXCANMessage.ui32MsgID = 0x04000168; //
sRXCANMessage.ui32MsgIDMask = 0x1f00fff0; //
除了上述修改之外,不 需要更改其他内容 ,这将非常容易 根据 示例项目重新出现问题。
在 Debug 窗口中,我可以在 IF2MSK 寄存器中看到 MDir 为0,MXtd 为1。
您好、Haresh、
根据您的建议,我将代码修改如下,过滤功能可以正常工作。
非常感谢您的热情帮助!
*(unsigned long *) ucTXMsgData = 0;
sTXCANMessage.ui32MsgID = 0x04000164; // CAN 消息 ID
sTXCANMessage.ui32Flags = MSG_OBJ_EXDED_ID | MSG_OBJ_TX_INT_ENABLE;
sTXCANMessage.ui32MsgLen = sizeof (ucTXMsgData); //消息大小为4
sTXCANMessage.pucMsgData = ucTXMsgData; // ptr 至消息内容
//
//初始化将用于接收 CAN 的消息对象
//消息。
*(unsigned long *) ucRXMsgData = 0;
sRXCANMessage.ui32MsgID = 0x04000168; // CAN 消息 ID -使用1
sRXCANMessage.ui32MsgIDMask = 0x1f00fff0;
sRXCANMessage.ui32Flags = MSG_OBJ_EXDED_ID | MSG_OBJ_USE_ID_FILTER;
sRXCANMessage.ui32MsgLen = sizeof (ucRXMsgData); //消息大小为4
sRXCANMessage.pucMsgData = ucRXMsgData; // ptr 至消息内容