TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] TMS570LS0714:CAN 外设 BUS_OFF 模式

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/672213/tms570ls0714-can-peripheral-bus_off-mode

器件型号:TMS570LS0714

您好!

我在我的设计中使用的是 TMS570lS0714。 我想检测 CAN 外设的 BUS_OFF 状态。 我可以通过读取 CAN_ES 寄存器来实现该目的。 我已将自动恢复时间配置为50毫秒、以便 CAN 重新初始化。  

如果在 CAN 外设处于 BUS_OFF 状态时使用"canTransmit"功能触发 CAN 消息、CAN 控制器是否会发出该消息? 还是保持空闲50毫秒?   

谢谢、此致、

Sreekanth

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

    "canTransmit"函数检查 DCAN IF1CMD 寄存器中的 BUSY 标志、如下所示。

    while ((node->IF1STAT & 0x80U)=0x80U)

    }/*等待*/

    CAN 处于 BUS_OFF 模式时、BUSY 标志的状态是什么?

    提前感谢。

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

    我的测试显示、当 CAN 处于 BUS_OFF 状态时、CMD 寄存器中的 BUSY 位为0x0。 在 CAN BUS_OFF 状态期间、CAN 模块不传输数据。

    我在 launchpad 上生成了 BUS_OFF、它会自动恢复、而不会出现任何问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我的测试用例。 DCAN1 TX 数据和 DCAN2 RX 数据。 我在传输期间更改了 CAN1的波特率、并手动将 CAN_H 和 CAN_L 短接(非常短的时间)以生成 BUS_OFF。 每当 BUS_OFF 发生时、代码将运行到 COUNT=COUNT+1 (虚拟)处的断点。 然后删除断点、再次运行代码、将介绍脱离总线。

    while (1)

      count++;

      canMsgBox = 1;

      TX_PTR =&TX_DATA[0][0];

      canTransmit (canREG1、canMsgBox、TX_PTR);//传输8个不同的数据块1 x 1 */

      如果(count==20){

        canREG1->CTL |=(uint32) 0x41U;

        canREG1->BTR =(uint32)((uint32) 0U << 16U)|

             (uint32)((uint32)(2U-1U)<<12U)|

             (uint32)(((uint32)((3U + 2U)- 1U)<<8U)|

             (uint32)((uint32)(2U-1U)<<6U)|

             (uint32) 24U;

        canREG1->CTL &=~(uint32)(0x00000041U);

      }

      if ((canREG1->ES & 0x80)=0x80){

        count = count +1;

      }

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

    感谢您的快速响应。 我还有一个与 CAN 外设相关的初始化模式。 根据数据表、可以通过向 DCAN CTL 寄存器的'Init'位写入1来进入 CAN 外设初始化模式。

    用户应用程序动态写入该寄存器(即在应用程序运行时)以更改 CAN 外设的模式(即正常运行模式和初始化模式)是否有效? 每次外设从初始化模式变为正常模式时、用户应用是否需要配置所有其他寄存器?

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

    您可以随时将 CAN 模块设置为“初始化模式”,方法是将 CAN 控制寄存器中的 Init 位置位。 当 INIT 位置位时、CAN 总线的报文传输停止、CAN_TX 输出的状态为
    隐性(高电平)。 CAN 错误计数器未更新。 设置 Init 位不会更改任何其他配置
    寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 QJ Wang:

    感谢您的支持。

    谢谢、此致、
    Sreekanth Challa