关于CAN总线节点接收过滤码的问题

2019-03-24 13:09发布

在配置CAN报文对象时会有关于节点接收过滤的设置
g_MsgObject.ulMsgID
g_MsgObject.ulMsgIDMask
g_MsgObject.ulFlags

对于11位的id, 例如从0x3F8 到0x3FF, 设置IDMask为0x3F8就可以实现过滤接收0x3F8 到0x3FF的id
 
可是问题是如何设置ulMsgID和ulMsgIDMask使CAN控制器只接收一组29位的ulMsgID(例如只接收从0x0f800000 到 0x0f87ffff的id)?

我试过用0x1fffffff做IDMask, 还是不能成功接收。

请大家赐教啊!  谢谢



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
tekkon
2019-03-24 16:48
恩 工作模式基本上就是
if((incomingMsgID & MsgIDMask) ==  MsgID)
{
  接受这个MsgID
  中断服务函数
  。。。

}


有没有什么方式来准确的计算MsgIDMask?   按理说0x1FFFFFF应该工作, 可是接收不到。

后来发现对于29位的ID, 只用考虑CANIFMask2这个寄存器。我用了0x1FFF0000 可以收到。不知道对不对?

我需要配置6组(也就是6个报文对象)29位的MsgID ,除了用MsgIDMask,还有没有别的方式来实现单个报文对象多个MsgID?

觉得TI在CAN filter配置方面的资料很少。。。


一周热门 更多>

相关问题

    相关文章