在配置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, 还是不能成功接收。
请大家赐教啊! 谢谢
此帖出自
小平头技术问答
还有一点就是如果CAN接收到一个报文,如果没有计算好ID和掩码,你想用2#报文对象存储器接收一个报文,但是1#报文对象存储器也能验证通过,这样2#报文对象存储器就不会收到报文了。
if((incomingMsgID & MsgIDMask) == MsgID)
{
接受这个MsgID
中断服务函数
。。。
}
有没有什么方式来准确的计算MsgIDMask? 按理说0x1FFFFFF应该工作, 可是接收不到。
后来发现对于29位的ID, 只用考虑CANIFMask2这个寄存器。我用了0x1FFF0000 可以收到。不知道对不对?
我需要配置6组(也就是6个报文对象)29位的MsgID ,除了用MsgIDMask,还有没有别的方式来实现单个报文对象多个MsgID?
觉得TI在CAN filter配置方面的资料很少。。。
这个具体怎么讲?
“还有一点就是如果CAN接收到一个报文,如果没有计算好ID和掩码,你想用2#报文对象存储器接收一个报文,但是1#报文对象存储器也能验证通过,这样2#报文对象存储器就不会收到报文了。” 能不能再解释一下?
一周热门 更多>