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.

[参考译文] AM3358-EP:确定 UART 数据 TX 的末尾

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/943209/am3358-ep-determine-end-of-uart-data-tx

器件型号:AM3358-EP

我们正在运行 AM3358的定制板上开发应用。  我们使用的是 SYS/BIOS 6.75.2、AM335x PDK 1.0.16和 CCS8。

我们将使用 SYS/BIOS UART 驱动程序通过 UART 发送150个字节。  UART 在回调模式下打开。  但是、当最后一个数据块写入 FIFO 时、而不是 TX 完成时、我们会得到写回调。  我需要知道 TX 何时完成。  是否有办法配置 UART、以便在发送完所有数据后通知应用程序?  如果没有、是否有方法轮询 FIFO 以确定何时为空?  

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

    您好!

    查看 AM335x TRM 中的表19-11:  

    https://www.ti.com/lit/ug/spruh73q/spruh73q.pdf

    此外、请查看 PDK 中的 UART_TestExample。 有关如何构建的说明可在此处找到:

    https://software-dl.ti.com/processor-sdk-rtos/esd/docs/06_03_00_106/AM335X/rtos/index_device_drv.html#uart

    具体而言、请查看 PDK 中 UART_v1.h 中的 UART_HWAttrs 结构。

    请看一下 UART-socGetInitCfg 和 UART_socSetInitCfg 函数

    谢谢、

    最大

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

    尊敬的 Max:

    您提供的信息是 UART 的基本设置和使用。  我们已经对其进行了运行和配置。  表19-11显示了支持的中断。  您可以看到、RHR 和 THR 是唯一涉及数据缓冲/发送的两个。  当启用 FIFO 时、它们都在超过阈值时触发。  这两个中断都由驱动程序处理。  驱动程序 GET 是中断、并将数据读取或写入 FIFO (取决于 TX 或 RX)。  驱动程序在应用程序中调用写入完成回调、并在最后一个数据块写入 FIFO 时执行此操作、而不是在 TX 完成时执行此操作。

    为简单起见、现在让我们忽略阈值电平。  FIFO 为64字节。  数据为150字节。  当写入开始时、驱动程序将前64个字节写入 FIFO、UART 开始向外发送数据。  然后、当 UART 需要 FIFO 中的更多数据时、驱动程序将获得中断。  第二个64字节被写入 FIFO。 UART 将数据写入输出并向驱动程序发送另一个中断。  驱动程序将最后22个字节写入 FIFO、并立即在应用程序中调用写回调。  因此、该应用程序会获得写入完成回调、但仍有22个字节的 FIFO 被发送出去。

    我不相信驱动程序或芯片在启用 FIFO 时 TX 完成时提供中断。  那么、我的问题是、从我们的应用程序中、如何判断所有数据何时发送?

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

    您好、Shawn、

    我将研究这个问题、并将尝试在明天为您提供答案。

    谢谢、

    最大

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

    尊敬的 Max:

    已经将近2周了。  有任何有关此内容的信息吗?

    同时、我可以告诉您我尝试了什么。  根据 TRM (第19.51.19节)、LSR_UART 寄存器的 TXSRE 字段定义如下:

    0h =发送器保持(TX FIFO)和移位寄存器不为空。
    1h =发送器保持(TX FIFO)和移位寄存器为空。

    我实施了一个计时器、该计时器将在 TX 结束之前触发。  I LOOP、检查该寄存器字段、直到它为1。   

    当在示波器上观察到这一点时、寄存器字段在数据在线路上发送完成之前从7-14us 的任何位置变为1。  因此、FIIFO/移位寄存器和导线之间有一些东西。  我需要知道数据 TX 何时完成(在线)。

    谢谢

    肖恩

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

    您好、Shawn、

    很抱歉耽误你的时间、

    您是否了解了中的 UARTIsTransmitterEmpty 函数 \packages\ti\cSL\UART.h?

    谢谢、

    最大