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.

[参考译文] CCS/TMS320F28.0049万M:关于CAN的问题

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/615621/ccs-tms320f280049m-issue-about-can

部件号:TMS320F28.0049万M
主题中讨论的其他部件:C2000WARE

工具/软件:Code Composer Studio

 我在 C:\ti\c2000\C2000Ware_1_00_01_00\driverlib\f28004x\examples\can中2000中运行2.8004万运行示例程序时遇到问题。

 "CAN_EX1_Loop"工作正常,但"CAN_EX2_Loop"_interrupts不能。它总是停止在中      

IF (errorFlag)
       {
           ASM ("  ESTOP0");
       }  

原因是传输号码(2)大于接收号码(1)。

我找不到具体的解决办法。 请提供帮助。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我写这封信是为了告诉您,一位C2000小组成员已被指派担任此职位,应该很快就会回答。

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

    是的,这看起来是CAN驱动程序中的错误的副产品。 (请参见此处: e2e.ti.com/.../60.6598万)
    它会影响CAN_sendMessage和CAN_setupMessageObject。 下一个C2000Ware版本中将提供修复。

    如果您希望自己临时修复,您可以编辑ccan.c文件。

    对于CAN_setupMessageObject,在函数末尾将替换为:
    //
    //写出寄存器以对消息对象进行编程。
    //
    //HWREG_BP (BASE + CAN_O_IF1CMD)= cmdMaskReg;
    HWREG_BP (BASE + CAN_O_IF1MSK)= maskReg;
    HWREG_BP (BASE + CAN_O_IF1ARB)= arbReg;
    HWREG_BP (BASE + CAN_O_IF1MCTL)= msgCtrl;

    //
    //将数据传输到消息对象RAM
    //
    HWREG_BP (BASE + CAN_O_IF1CMD)= cmdMaskReg |(Objid & CAN_IF1CMD_MSG_NUM_M);

    对于CAN_sendMessage,在函数末尾将替换为:
    //
    //设置写入方向
    //
    //HWREG_BP (BASE + CAN_O_IF1CMD)= CAN_IF1CMD_DIR | msgCtrl;

    //
    //设置Tx请求位
    //
    //HWREG_BP (BASE + CAN_O_IF1CMD)|= CAN_IF1CMD_TXRQST;

    //
    //将消息对象传输到指定的消息对象
    //对象标识
    //
    HWREG_BP (BASE + CAN_O_IF1CMD)= CAN_IF1CMD_DIR | msgCtrl | CAN_IF1CMD_TXRQST |(Objid & CAN_IF1CMD_MSG_NUM_M);

    对此造成的不便,我深表歉意。

    此致
    Chris