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.
最近需要使用到280049的CAN mask功能,所以翻看了论坛,然后做了相关测试。
测试1:一个CAN object可以接收多个CAN ID的信息,如CAN object 14可以接收CAN ID 0x120~0x12F的信息
测试结果:成功
// Initialize the receive message object used for receiving CAN messages.
// Message Object Parameters:
// Message Object ID Number: 14
// Message Identifier: 0x123
// Message Frame: Standard
// Message Type: Receive
// Message ID Mask: 0x7F0
// Message Object Flags: CAN_MSG_OBJ_USE_ID_FILTER
// Message Data Length: 8 Bytes
//
CAN_setupMessageObject(CANA_BASE, 14, 0x123, CAN_MSG_FRAME_STD,
CAN_MSG_OBJ_TYPE_RX, 0x7F0, CAN_MSG_OBJ_USE_ID_FILTER,
MSG_DATA_LENGTH);
// Initialize the receive message object used for receiving CAN messages.
// Message Object Parameters:
// Message Object ID Number: 14
// Message Identifier: 0x123
// Message Frame: Standard
// Message Type: Receive
// Message ID Mask: 0x0
// Message Object Flags: CAN_MSG_OBJ_NO_FLAGS
// Message Data Length: 8 Bytes
//
CAN_setupMessageObject(CANA_BASE, 14, 0x123, CAN_MSG_FRAME_STD,
CAN_MSG_OBJ_TYPE_RX, 0, CAN_MSG_OBJ_NO_FLAGS,
MSG_DATA_LENGTH);
1、你的测试“当maskID都为“ 0”并且未设置标志CAN_MSG_OBJ_USE_ID_FILTER时,不进行任何过滤”这个测试结果和我的一致的。
2、我的“按照测试2的CAN配置,我理解是MASK功能不使用(可以收到任意帧),为什么只能收到一帧数据呢?” 是指“当maskID都为“ 0”,并且设置标志CAN_MSG_OBJ_NO_FLAGS时” 只能收到ID=0x123的帧,其他的收不到。
问题:为什么要将接口函数的flag参数设置为CAN_MSG_OBJ_USE_ID_FILTER才行呢?按照我的理解,设置为CAN_MSG_OBJ_NO_FLAGS也可以啊。
再往细的仿真看,CAN_MSG_OBJ_USE_ID_FILTER标志会将IF1MCTL.UMask bit置1;CAN_MSG_OBJ_NO_FLAGS标志会将IF1MCTL.UMask bit置0. 当IF1MCTL.UMask=0时,mask应该忽略才对啊,为什么还是过滤了其他的帧呢?
通过测试,下面的设置可以接收所有ID的消息,您可以尝试一下
CAN_setupMessageObject(CANA_BASE, 2, 0, CAN_MSG_FRAME_STD, CAN_MSG_OBJ_TYPE_RX, 0, CAN_MSG_OBJ_USE_ID_FILTER, MSG_DATA_LENGTH);
或许是我的问题描述的不够清楚,你没有抓住我的问题点。
我的问题:现在已经有方法实现接收多帧的目的,但是为什么要这样配置呢?这和数据手册上的描述不相符。
为什么一定要设置CAN_MSG_OBJ_USE_DIR_FILTER标志呢? 设置CAN_MSG_OBJ_NO_FLAGS标志为什么不行呢?
通过仿真可以看到,设置CAN_MSG_OBJ_USE_DIR_FILTER标志时,IFAMCTL.UMask位是置1的,
设置CAN_MSG_OBJ_NO_FLAGS标志时IFAMCTL.UMask位是置0的.
对于寄存器FAMCTL.UMask的描述,当值为0时,Mask是忽略的,应该可以收到所以ID的消息才对,但是结果是只能收到1个ID的消息。