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.

[参考译文] TMS320F280025:DCAN 无法接收具有任意仲裁位的数据帧

Guru**** 2560390 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1122973/tms320f280025-dcan-cannot-receive-data-frames-with-arbitrary-arbitration-bits

器件型号:TMS320F280025
主题中讨论的其他器件:C2000WARE

尊敬的团队:

当客户测试 DCAN 模块时、他发现方向、仲裁位、长度等滤波功能没有使用、但是实际接收到的只有与仲裁位匹配的数据帧、并且不能接收到任何仲裁位的数据帧。  

以下是配置代码、问题出在哪里?

 初始化

//code_start

while (CANaRegs.CAN_IF1CMD.bit.BUSY = 1);

CanaRegs.CAN_IF1MSK.All= 0;


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;

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

此致、

绿色

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    绿色环保、

    客户是否打算使用 ID 筛选?  从代码片段中、我看不到 CAN_IF2MCTL (接收代码)中的 UMASK 位被置位。  我也看不到 CAN_IF2MSK 以及 CAN_IF2ARB 寄存器配置为进行 ID 滤波。  C2000Ware 中有一个示例说明了滤波的工作原理。  请客户检查 CAN_EX8_MASK 示例。

    此致、

    Joseph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Joseph:

    为了不使用滤波、客户故意取消了 CAN_IF2MCTL 中 UMASK 和其他位的配置。

    问题是测试发现过滤实际上仍在执行。

    此致、

    绿色

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    绿色环保、

    客户能否发送 CAN_IF1/IF2寄存器转储?  在不知道 IFx 寄存器内容的情况下、不确定正在发生什么情况。

    谢谢、

    Joseph