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.

[参考译文] MSPM0-SDK:Driverlib 存在错误。 DL_UART_isBusy () 不应用于 TX 或 RX 阻塞函数。 它在 TX 和放大器;RX 上等待。

Guru**** 2908170 points

Other Parts Discussed in Thread: MSPM0G3519

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1641588/mspm0-sdk-driverlib-has-a-bug-dl_uart_isbusy-should-not-be-used-for-tx-or-rx-blocking-functions-it-waits-on-both-tx-rx

器件型号: MSPM0-SDK
主题: MSPM0G3519 中讨论的其他器件

我使用的是 mspm0g3519 和 SDK mspm0_sdk_2_10_00_04

如果您的 UART RX 引脚为低电平(可能来自另一台机器尚未通电的外部电缆)、则 SDK DL_UART_transmitDataBlocking () 传输调用将永远卡住。  它使用 DL_UART_isBusy () 作为忙检查、但这可以通过接收位的开头来设置。

被接收数据繁忙所阻止的发送功能从根本上是错误的。

看看 driverlib、这项繁忙检查自始至终都在使用。  它可能会阻止 UART 初始化、或者在检测到开始接收时阻止调用正常工作。

我只修补了阻塞传输问题、但几乎所有 UART 功能都有这个问题。

~~~μ s
//请注意、TI driverlib 函数 DL_UART_isBusy () 具有欺骗性、会报告正在进行的 TX 和 RX
//我认为低电平 RX 引脚将“启动“一位、并报告忙。
//它不应用于传输
void Fixed_DL_UART_transmitDataBlocking (UART_Regs *UART、uint8_t DATA)

  while (DL_UART_isTXFIFOFull (UART)){
  };
  DL_UART_transmitData (UART、DATA);

  //这是我能找到的唯一与 TX 相关的忙标志
  while(!DL_UART_isTXFIFOEmpty (UART)){
  };
  //请注意、它可能仍在发送最后一个字节!
}
~~~μ s

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

    您好 Dave、

    我认为你的想法是有意义的。 我认为我们的 SDK 使用这种逻辑写入这些 API 的原因是我们只有一个寄存器 STAT 来标记 UART 的状态。 换句话说、我们没有两个标记 TX Busy 和 RX Busy 的寄存器。 是的、如果您使用 TXFIFOEmpty 进行标记、有一个问题是:会出现一种情况、表示数据已发送出去、TXFIFO 为空、但 UART 线路尚未完成传输。

    BR、

    Janz Bai

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

    这种 UART 库行为将给开发人员带来许多隐藏的错误。 您认为 TI 会更新 driverlib 吗? 我看到的每个 UART 都有一个 TX Busy 和 RX Busy 标志、它们是分开的。 因此、如果硬件将它们组合在一起、那么这是一个有问题的硬件选择、需要设法确保正常运行。 谢谢。

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

    您好 Dave、

    很抱歉晚回复。 我将与我们的软件团队讨论这个问题。

    BR、

    Janz Bai

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

    有新消息吗?