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

TMS320F280025C: DCAN 实际只接收了匹配仲裁位的数据帧,不能接收任意仲裁位的数据帧

Part Number:TMS320F280025COther Parts Discussed in Thread:C2000WARE

采用DCAN 测试时发现不采用方向、仲裁位、长度等滤波功能,

实际只接收了匹配仲裁位的数据帧,不能接收任意仲裁位的数据帧,请问大家是否有遇到,问题在哪里?

Green Deng:

你好,方便上传一下DCAN部分的配置代码吗?

,

Zhang Jianhua:

您好,谢谢回复。

采用寄存器配置方式。

1.对初始化部分代码,寄存器配置为:

//CODE_START

while(CanaRegs.CAN_IF1CMD.bit.Busy == 1);

CanaRegs.CAN_IF1MSK.all= 0;

//(可见其中CAN_IF1MSK寄存器不配置滤波) CanaRegs.CAN_IF1ARB.all=  CAN_IF1ARB_MSGVAL; CanaRegs.CAN_IF1MCTL.all= CAN_IF1MCTL_EOB; CanaRegs.CAN_IF1CMD.all= m_u32MsgobjectID|CAN_IF1CMD_DIR|CAN_IF1CMD_CONTROL|CAN_IF1CMD_ARB;   //m_u32RxMsgobjectID为邮箱编号

//CODE_END

2.接收部分代码,寄存器配置为:

//CODE_START

CanaRegs.CAN_IF2CMD.all = m_u32RxMsgobjectID|CAN_IF2CMD_DATA_A|CAN_IF2CMD_DATA_B|CAN_IF2CMD_CONTROL|CAN_IF2CMD_ARB;

//(可见其中CAN_IF2CMD寄存器不配置MASK进行滤波)

while(CanaRegs.CAN_IF2CMD.bit.Busy == 1);

读取DATA数据 = (UINT16)(CanaRegs.CAN_IF2DATA.all&0xFF)~~~~~~

CanaRegs.CAN_IF2CMD.all = m_u32RxMsgobjectID|CAN_IF2CMD_TXRQST;   //m_u32RxMsgobjectID为邮箱编号 while(CanaRegs.CAN_IF2CMD.bit.Busy == 1);

//CODE_END

可见其中寄存器不配置滤波,实际采用USBCAN盒测试发现,仲裁位不匹配帧无法接收到。

,

Green Deng:

好的,我会跟DCAN方面的专家沟通一下后回复你。

,

Green Deng:

你好,你是打算使用 ID 过滤吗?

从代码片段中,我没有看到 CAN_IF2MCTL(接收代码)中的 UMask 位被设置。我也没有看到为 ID 过滤配置 CAN_IF2MSK 和 CAN_IF2ARB 寄存器。C2000Ware 中有一个示例说明了过滤的工作原理。可以查看一下 can_ex8_mask 示例。

,

Zhang Jianhua:

您好。

是为了特意不使用滤波,所以取消 CAN_IF2MCTL中UMask 位配置等。

问题是测试发现实际依然进行了滤波。

,

Green Deng:

我昨天将你的回复转给对方工程师了,但是目前还没收到回复,还请耐心等待一下。

F280025没有寄存器形式的CAN例程,不过你也可以参考一下F2837xD的,下面路径的例程就是没有使用过滤,可以接收任意ID:

C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f2837xd\examples\cpu1\can_external_transmit\cpu01

若是使用过滤的话,在过滤之前,将屏蔽位与ID位进行“与”运算,编程类似:

if ((incoming_message_id & mask) == (message_object_id & mask))
{accept_message();
} else
{ignore_message();
}

,

Zhang Jianhua:

收到,谢谢。

,

Green Deng:

你好,不知道上面那个例程是否有帮助?

如果还是有问题的话麻烦发一下Can_ IF1/IF2寄存器的dump,在不知道IFx寄存器内容的情况下,无法确定发生了什么。

,

Zhang Jianhua:

您好,基于ti\c2000\C2000Ware_4_01_00_00\device_support\f2837xd\examples\cpu1\can_external_transmit\cpu01路径(路径可见下图)的代码:

没有看到您粘贴的该可选择滤波与否的代码(如下):

if ((incoming_message_id & mask) == (message_object_id & mask)){ accept_message();} else{ ignore_message();}

请问是否为路径不对?该可选择滤波与否的代码放在哪个函数下?

,

Green Deng:

额,这段代码其实是举例了一下如果要用过滤的话,在过滤之前,可以通过将屏蔽位与ID位进行“与”运算方式来实现。所以这段代码不是例程中的,如果你要用到F280025的话可以根据这段代码来修改

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280025C: DCAN 实际只接收了匹配仲裁位的数据帧,不能接收任意仲裁位的数据帧
分享到: 更多 (0)

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