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.

[参考译文] TMS320F2800137:TMS320F2800137 CAN 总线背对背传输

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1341616/tms320f2800137-tms320f2800137-can-bus-back-to-back-transfer

器件型号:TMS320F2800137

您好!

是否有办法检测 CAN 总线发送 FIFO 是否未满在这种情况下、如果未满、我可以立即发送新的数据包?  

谢谢。

阿诺

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

    Arnaud、

      您能否进一步解释您的具体目标是什么? FIFO 适用于接收操作。  

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

    您好!

    检查是否可以发送新的 TX 帧的最佳方法是什么?

     TxOk 位是唯一的指示吗? 他们是另一位还是另一种方式? 如果我没有先发送任何帧、则 TxOk 不会被置位。  

    如果有指示 CAN 外设已准备好发送帧的内容、我会更喜欢。

    谢谢。


    阿诺

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    检查是否可以发送新的 TX 帧的最佳方法是什么?

    通过将 CAN_IF1CMD 寄存器的 TXRQST 位置1、即可随时标记任意数量的要发送的报文对象。 将根据不同的条件传输消息:

    1. 总线是否空闲
    2. 如果总线空闲、则将根据 DCAN 模块中的内部优先级发送报文对象。
    3. 如果与网络中的另一个节点发生争用、则将根据竞争总线的帧的 ARBID (MSGID)来解决该争用。
     TxOk 位是否是唯一的指示? [/报价]

    TxOK 位会告知您最后一次传输的帧是否在总线上正确传输(并已由网络上的至少一个其他节点确认)。 如果要轮询传输的完成情况、此位很有用。 应用程序通常使用中断(而不是轮询)。

    他们是另一位还是其他方式吗?

    如果您的目标是检查是否存在任何待处理的传输(即是否已成功完成先前启动的传输)、您始终可以轮询 CAN_TXRQ_21寄存器。

    如果我没有先发送任何帧,则不会设置 TxOk。  [/报价]

    正确、

    如果有指示 CAN 外设已准备好发送帧的信息,我更愿意使用。

    如前所述、只要要使用的报文对象当前为空、就可以将报文排队等待传输。

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

    您好、您说过"只要要使用的消息对象当前为空、您就可以将消息排队以进行传输。"

    如何检查队列消息是否为空? 是否通过检查 CAN_TXRQ_21来实现?

    如果是、我就是这么做的、但当我使用示波器检查总线时、即使我发送了它们、某些 TX 帧似乎丢失或被绕过。

    请参阅下面的忙代码检测。

    谢谢。

    阿诺

    // 0:好,已准备好传输
    // 1:忙,需要等待
    int32_t IS_CAN_TX_BUSY (uint32_t Objid)
    {
    if ((HWREG_BP (CAN_MODULE + CAN_O_TXRQ_21)&(1U< {
    CANBUS_NOT_BUSY++;
    返回0;

    否则
    {
    CANBUS_BUSY_BUSY++;
    返回1;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何检查队列 msg 是否为空? 是否通过选中 CAN_TXRQ_21来实现?

    您只能检查您打算用于传输的消息对象是否已准备好接受下一条消息。 是的、您可以通过检查  CAN_TXRQ_21寄存器来执行此操作。

    当我使用示波器检查总线时,即使我发送了它们,某些 TX 帧也丢失或被绕过。

    这是一个很难回答的问题。 假设您正在检查一个报文对象的 TxRqst 位、并在对应于该报文对象的位为0时(意味着没有挂起的来自该报文对象的发送)启动发送。  如果您仅仅依赖示波器、则有时如果示波器未设置为正确触发、很容易丢失帧。 如果您尚未使用总线分析仪、请使用总线分析仪监控总线。

    可以使用中断来消除此问题。 当对象已完成传输时、中断将被置为有效。  

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

    Arnaud、

      这是因为 FIFO 的概念只适用于接收报文对象。