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.

[参考译文] RTOS/DRA72XEVM:UART 中断 Rx 超时

Guru**** 2611705 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/653771/rtos-dra72xevm-uart-interrupt-rx-time-out

器件型号:DRA72XEVM

工具/软件:TI-RTOS

你(们)好

当我在 DRA72x 中使用 M4的 bspdrv_UART.c 驱动程序时、我发现如果我在以下条件下向 M4发送数据,UART Rx 超时始终会发生

1、数据‘s’长度超过64字节(现在发送)  

2 μ s、周期100ms

3、115200波特率,

4、uartParams.rxThreshold = 8;

5 μ s、模式  

我的问题就是这样

1 μ s、 Rx 超时汉普恩?

    由于中断是 HW 中断,其优先级应高于 TI BIOS 线程任务,、因此如果发生 UART Rx 中断、BIOS 任务不能干扰它,

   为了能够立即处理 UART 中断、不应发生 Rx 超时。 除非 UART Rx 中断低于 线程任务 μ。为真 μ?

2、如何  正确设置 UART Rx 中断的优先级?

  我发现,  UART Rx 中断的优先级为0xff,、这是默认值。当我 使用函数"  void Hwi_setPriority (UINT intNum、UINT Priority)",将优先级设置为0或1或2时

   XDC 硬故障,为什么?Ω

3、如何解决 Rx 超时 问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    请参阅底部的超时中断说明。 很快、它会在经过一段时间后防止 Rx FIFO 中未回收的数据。
    2.我不知道。 请注意、UART 为所有 RX 事件输出一个组合的中断。
    3.如果 RX FIFO 中没有已失效的数据、则不应发生 RX 超时中断。 例如,如果您的 Rx FIFO 阈值设置为8字节,则确保发送器始终传输8、16、24、32、... 字节。 如果您的数据长度不是固定的、那么您可以将 FIFO 设置为1字节 FIFO (禁用 FIFO)。 但即使发生超时中断、软件也应能够通过从 Rx UART_RHR 寄存器简单读取来为其提供服务。 该中断与正常的 Rx FIFO RHR 中断没有任何不同。

    我希望这会有所帮助。



    24.3.4.8.1.3.7.1超时计数器
    当接收器线路(uarti_RxD)在等于4倍的时间内处于高电平时、检测到 RX 空闲条件
    编程字长+ 12位。 uarti_RxD 在每个位的中间采样。
    对于睡眠模式、当 uarti_RxD 上有活动时、计数器复位。
    对于超时中断、计数器仅在 RX FIFO 中有数据时计数、计数值为
    当 uarti_RxD 上有活动或读取 UARTI.UART_RHR 寄存器时复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Stilyanov,

    我已经尝试设置 FIFO 禁用,IT Rx 超时变得更糟。
    ,我,FIFO 并使用 RX_TRIG_GRANU1 = 1 μ s 且 uartParams.rxThreshold = 1 μ s UART Rx 超时如常发生。

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

    我已经与一位 UART 驱动程序专家进行了相关的帮助。

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

    根据 UART IP、RX 超时中断是软件清除 FIFO 中任何数据的机制。 即使 FIFO 被禁用、即阈值设置为1、也是如此。 如果在超时后 FIFO 中有一些数据、如规范中所述、则会发生该中断。 因此、发生这种情况的原因是您的 ISR 在加载的系统中也会延迟。 请注意、这不是错误条件。

    您正尝试解决什么问题? 线程中不清楚、

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

    1、第一,我在 dra72x 中使用 M4作为从器件。 在 dra72x 之外、有一个 ECU 作为一个主器件。

    2、秒后、主器件将通过 UART 以115200波特发送长度超过200的数据

    3、M4在线程中使用 tibios Gio_read 获取收到的内容并对其进行分析。

    之后、在同一个线程中使用 Gio_write 发送分析的结果。

    而 UART 始终丢失 Rx 数据。 我检查了 uartir 程序,发现丢失的数据总是伴随着 Rx 超时。

    因此、我认为可能未及时处理 uartr 读取,领导数据丢失和 Rx 超时。


    现在、我想提高 UART 中断的优先级以解决这个问题,但我失败了。

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

    从 UART @ 115200波特率接收200个字符的操作已经通过驱动程序验证。 所以我不认为这与中断优先级相关。请回答下面的问题。

    1.系统中是否还有其他运行的东西? 请注意、UART 驱动程序使用 BIOS SWI 来处理读/写操作。 SWI 具有比任务更高的优先级、而 HWI 更低。

    2.您为每个 GIO_Read 调用提供的读取大小是多少? 您是否尝试提供200个字节并查看是否正常工作?

    UART 示例应用程序读取1000个字节并通过 UART TX 发回相同的数据。 您是否尝试使用此测试?

    在进入中断优先级之前、我们需要排除 UART 驱动程序配置问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Sivaraj
    1、我知道 UART 驱动程序使用 BIOS SWI 进行读取和写入。 在 UART 示例应用程序"BSPdrv_UART.c"中、uartIsr 函数布置 swi 以处理写入和读取。以便排除 swi 影响,我直接调用 uartIsr 中的 uartRxSwiHandler/uartTxSwiHandler 函数。 RX 超时也发生了。 现在、我将确认是否有其他函数正在运行、该函数会阻止该进程。
    2、我,的读取大小为500 μ s、以避免数据因接收而丢失。但无法解决问题
    3、我正在使用的程序是 bsp_01_05_00_09中的 UART 示例应用程序。是否存在数据丢失问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如我提到过的、驱动器已针对该波特率进行了验证。 因此、我怀疑这是否是驱动程序速度或中断优先级的问题。 您需要查看问题是否出在其他地方、例如电路板问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一个建议是在 while 循环中执行 GIO_Read、直到您从另一端接收所有数据 如果 UART 线中存在超过 TRM 中提到的超时周期的间隙、则将发生 RX 超时、驱动程序将返回到该点之前接收到的任何内容。 然后、预计应用程序会使用剩余的字节再次调用 GIO_Read、并操纵缓冲区地址。 请尝试此操作
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好, Sivaraj

    很抱歉耽误你的回答。 我尝试使用 while 循环来读取收到的 Gio_read 数据、由于数据变得更好、它似乎丢失了数据、但有时仍会发生。

    同时、如果我在任务中使用 while 循环、它会将 CPU 负载添加到程序中。

    您是否知道如何提高 Hwi 中断优先级?  它是否能解决问题?  

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

    正如我说过的、更改优先级不会有帮助。 请咨询您当地的 FAE 以获得进一步的支持或调试。