TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28386D: 关于CAN模块的使用和ID滤波

Part Number:TMS320F28386DOther Parts Discussed in Thread:C2000WARE

想请教一下,关于can模块的设置可以使用官方提供的函数

CAN_setupMessageObject(uint32_t base, uint32_t objID, uint32_t msgID,
                       CAN_MsgFrameType frame, CAN_MsgObjType msgType,
                       uint32_t msgIDMask, uint32_t flags, uint16_t msgLen);
以 CAN_setupMessageObject(CANA_BASE, 0x0015, 0x0020, CAN_MSG_FRAME_STD, CAN_MSG_OBJ_TYPE_RX, 0xFFFFFFFF, CAN_MSG_OBJ_NO_FLAGS, 8)为例

用0x0015的邮箱接收ID为0x0020的CAN数据帧,滤波ID为0xFFFFFFFF
这里设置的CAN_MSG_OBJ_NO_FLAGS表示既不触发中断,也不会使用滤波,那是否表示任何数据都可以被0x0015这个邮箱接收呢?即使msgIDMask全为1或者全为0
该位同样可以设置为CAN_MSG_OBJ_USE_ID_FILTER,像请教一下,如果设置为了CAN_MSG_OBJ_USE_ID_FILTER又表示啥意思呢?是否意味着msgIDMask对应位为1的位置必须与数据帧ID0x0020对应上,该数据才可以被接收呢?
我理解在flags未设置滤波的情况下,msgIDMask为0或者1不会对数据的接收有任何影响;当flags设置为采用滤波的时候,msgIDMask为1的位表示需要匹配,即此时数据ID相应位相同的数据才可以被CAN模块收到,而msgIDMask为0的位表示不采用滤波,因此数据ID对应位0或者1均不影响数据的接收。不知道这种理解方式是否正确?
感谢指教。
Alice:

您好,

      您的理解正确,CAN_setupMessageObject这个函数在can.c (ti.com)中定义。

      在c2000ware 中有CAN示例代码,请参考 can_ex8_mask (ti.com)

      

,

jing980814:

感谢您的回复

手册和这个案例我之前也查看过了,理解了如果使能了滤波功能,那就必须要相应位匹配的数据才能被接收。

但对于不使能滤波,此时的Mask ID是0还是1有何影响与不同?

,

Alice:

您好,

     

     为1的话,是用于滤波使用;为0,就忽略其设置。

,

jing980814:

感谢回复!

为0表示忽略其设置:这意思是接收任何ID的数据帧,还是只接受ID完全匹配的数据帧呢?

,

Alice:

您好,      

    接收通过“acceptance filtering”匹配的ID。

    

     请参考TRM “30.11.6 Acceptance Filtering of Received Messages”内容。

    TMS320F2838x Real-Time Microcontrollers With Connectivity Manager TRM (Rev. F)      

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28386D: 关于CAN模块的使用和ID滤波
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1