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.

[参考译文] AM2632:如何配置 UART 字符超时阈值?

Guru**** 2912410 points

Other Parts Discussed in Thread: AM2632, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1648570/am2632-how-to-configure-uart-character-time-out-threshold

器件型号: AM2632
主题: SysConfig 中讨论的其他器件

TI 团队大家好、

在 UART_IIR_UART 寄存器中、有一个 RX 超时的 UART 中断源、这也是 SDK 中的字符超时。image.pngimage.png

但我无法在 SYSCFG 中配置 RX 超时阈值、因此您可以帮助我解决这个问题、感谢您的帮助。

image.png

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

    您好、

    该专家目前已离职。 请预计响应会延迟、直到他们下周返回。  

    此致、
    Aj Favela.  

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

    您好、张迅、

    感谢您提出有关 AM2632 上 UART RX 超时配置的问题。

    根据技术参考手册、可以使用 UART_TIMEOUTL 和 UART_TIMEOUTH 寄存器来配置 UART 字符超时(RX 超时)阈值。

    默认超时行为:

    默认情况下、超时周期的计算公式为: 编程字长的 4 倍+ 12 位。 这是当超时寄存器设置为 0 时的自动超时值。

    配置自定义超时阈值:

    若要手动配置 RX 超时阈值、您需要在两个寄存器之间编程一个 16 位超时值(以波特时钟为单位):

    • UART_TIMEOUTL (偏移 0x98)-超时值的低 8 位
    • UART_TIMEOUTH (偏移 0x9C)-超时值的高 8 位

    将非零值写入这些寄存器时、它会覆盖内部默认超时计算并使用波特时钟中指定的自定义超时周期。

    超时行为模式:

    此外、您可以使用 UART_EFR2 TIMEOUT_REACT 位来控制超时计数器行为:

    • UART_EFR2 = 0 (默认值):超时计数器仅在 RX FIFO 中有数据时计数。 计数器在发生 RX 活动或读取 UART_RHR 寄存器时复位。 通过读取 UART_RHR 来清除中断。

    • UART_EFR2 = 1:即使没有接收到字符、超时计数器也会运行、在 RX 线路保持空闲时产生周期性中断。 达到超时时时时、计数器会自动复位。 通过读取 UART_IIR_UART 来清除中断。

    关于 SysConfig:

    目前、UART 超时阈值配置未作为可配置参数在 SysConfig 中公开。 在 UART 驱动程序初始化后、您将需要直接在应用程序代码中配置这些寄存器。

    示例方法:

    /* After UART_open() */
    uint32_t baseAddr = UART_getBaseAddr(uartHandle);
    uint16_t timeoutValue = <your_desired_timeout_in_baud_clocks>;
    
    /* Write lower byte */
    HW_WR_REG8(baseAddr + 0x98, (timeoutValue & 0xFF));
    /* Write upper byte */
    HW_WR_REG8(baseAddr + 0x9C, ((timeoutValue >> 8) & 0xFF));

    如果您需要有关配置超时寄存器的其他说明、或者对超时行为模式有疑问、敬请告知。

    此致、
    Zackary Fleenor