TI中文支持网
TI专业的中文技术问题咨询交流网站

280049 CAN MASK的配置与疑问

最近需要使用到280049的CAN mask功能,所以翻看了论坛,然后做了相关测试。

测试1:一个CAN object可以接收多个CAN ID的信息,如CAN object 14可以接收CAN ID 0x120~0x12F的信息 

测试结果:成功

使用TI函数接口
// 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);
关键参数:CAN_MSG_OBJ_USE_ID_FILTER
测试2:一个CAN object可以接收任意标准帧CAN ID的信息
测试结果:失败,只能接收到ID为0x123的帧
使用TI函数接口
// 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);
按照论坛里的指导,修改CAN_MSG_OBJ_NO_FLAGS为CAN_MSG_OBJ_USE_ID_FILTER后可以接收任意标准帧
问题:按照测试2的CAN配置,我理解是MASK功能不使用(可以收到任意帧),为什么只能收到一帧数据呢?
大侠们能讲讲为什么吗?谢谢。
Susan Yang:

我会在测试后给您回复

Aiden:

回复 Susan Yang:

很高兴得到您的支持,在论坛里查看相关问题时也看到了你细致的答复。只是其他贴子里没有我关心的问题。期待你的测试结果,谢谢。

Susan Yang:

Aiden按照测试2的CAN配置,我理解是MASK功能不使用(可以收到任意帧),为什么只能收到一帧数据呢?

只能收到一帧?具体是怎样的?

我使用下面的配置,可以正常接收

当maskID都为“ 0”并且未设置标志CAN_MSG_OBJ_USE_ID_FILTER时,不进行任何过滤

Aiden:

回复 Susan Yang:

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应该忽略才对啊,为什么还是过滤了其他的帧呢?

Susan Yang:

回复 Aiden:

通过测试,下面的设置可以接收所有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);

Susan Yang:

回复 Aiden:

另外在E2E上有一些相关的讨论,您可以看一下
e2e.ti.com/.../2885900

Aiden:

回复 Susan Yang:

或许是我的问题描述的不够清楚,你没有抓住我的问题点。

我的问题:现在已经有方法实现接收多帧的目的,但是为什么要这样配置呢?这和数据手册上的描述不相符。

为什么一定要设置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的消息。

赞(0)
未经允许不得转载:TI中文支持网 » 280049 CAN MASK的配置与疑问
分享到: 更多 (0)

© 2021 TI中文支持网   网站地图