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/AM4379:UART 奇偶校验配置

Guru**** 2576195 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/627747/rtos-am4379-uart-parity-configuration

器件型号:AM4379

工具/软件:TI-RTOS

尊敬的所有人:

我正在使用适用于 AM437x 3.2.0的 Processor SDK RTOS、并按如下方式初始化 UART1:

UART_PARAM.波特 率= 38400;
UART_Param.parityType = UART_PAR_even;
UART_Param.writeDataMode = UART_DATA_BINARY;
UART_Param.readDataMode = UART_DATA_BINARY;
UART_Param.readReturnMode = UART_RETURE_FULL;
UART_Param.readEcho = UART_ECHO_OFF;
UART = UART_OPEN (1、&UART_Param);

但是、通过示波器查看 UART 帧、我看到组帧错误、实际上 LCR 值为0x0003。 如果我在调用 UART_Open()后通过直接写入该寄存器将其更改为0x001B,则帧是正确的。

我缺少什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您是否使用任何 TI AM437x EVM 或这是您自己的电路板? UART_param 是一个结构、具有:

    const UART_Params USER_params ={
    UART_MODE_BLOCKING、 /* readMode */
    UART_MODE_BLOCKING、 /* writeMode */
    0U、 /* readTimeout */
    0U、 /* writeTimeout */
    null、 /* readCallback */
    null、 /* writeCallback */
    UART_RETURE_NEWLINE、/* readReturnMode *
    UART_DATA_TEXT、 /* readDataMode */
    UART_DATA_TEXT、 /* writeDataMode */
    UART_ECHO_ON、 /* readEcho */
    115200、 /*波特率*/
    UART_LEN_8、 /* dataLength */
    UART_STOP_One、 /*秒数*/
    UART_PAR_NONE /* parityType */
    };

    如何填写其他参数? 来自 LCR 寄存器的差异:0x3与0x1B
    位3:奇偶校验_EN
    位4:奇偶校验类型1

    这是通过 UARTLineCharacConfig()配置的。 您是否能够尝试使用适用于 AM437x 的最新 P-SDK RTOS 4.0来查看它是否适合您。

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

    [引用 user="lding ]您好、

    您是否使用任何 TI AM437x EVM 或这是您自己的电路板?

    [/报价]

    我使用的是 AM437x IDK

    [引用 user="lding"]

    UART_param 是一个结构、具有:

    const UART_Params USER_params ={
    UART_MODE_BLOCKING、/* readMode *
    UART_MODE_BLOCKING、/* writeMode */
    0U、/* readTimeout */
    0U、/* writeTimeout */
    空,/* readCallback */
    空、/* writeCallback */
    UART_RETURE_NEWLINE、/* readReturnMode *
    UART_DATA_TEXT、/* readDataMode *
    UART_DATA_TEXT、/* writeDataMode *
    UART_ECHO_ON、/* readEcho */
    115200、/*波特率*/
    UART_LEN_8、/* dataLength */
    UART_STOP_ONE、/* STOPBITS */
    UART_PAR_NONE /* parityType */
    };

    如何填写其他参数?

    [/报价]

    很抱歉、我忘记说我只打电话:

    UART_Params_init (&UART_Param); 

    在我输入我的第一条消息之前。

    [引用 user="lding"]

    来自 LCR 寄存器的差异:0x3与0x1B
    位3:奇偶校验_EN
    位4:奇偶校验类型1

    这是通过 UARTLineCharacConfig()配置的。 您是否能够尝试使用适用于 AM437x 的最新 P-SDK RTOS 4.0来查看它是否适合您。

    此致、Eric

    [/报价]

    我将很快查看最新的 RTOS、但我的项目基于 EtherCAT 从站、我想知道 RTOS 4.0是否已经支持它。 您可以确认吗?

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

    请访问 processors.wiki.ti.com/.../PRU_ICSS_EtherCAT。 EtherCAT 位于单独的封装中。 此版本需要处理器 SDK RTOS、

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

    [引用 user="lding ]您好、

    这是通过 UARTLineCharacConfig()配置的。 您是否能够尝试使用适用于 AM437x 的最新 P-SDK RTOS 4.0来查看它是否适合您。
    [/报价]

    UARTLineCharacConfig()将 LCR 设置为

    /*对 LCR.*/中的奇偶校验_EN、奇偶校验_Type1和奇偶校验_Type2字段进行编程
    lcrRegValue |= parityFlag &(UART_LCR_paritation_Type2_MASK |
    UART_LCR_parity、Type1_MASK |
    UART_LCR_parity、EN_MASK);

    此函数从 UART 驱动程序调用、如下所示:

    UARTLineCharacConfig (hwAttrs->baseAddr、
    (object->params.dataLength | object->params.stopbits)、
    object->params.parityType);

    parityType (是 UARTLineCharacConfig()的 parityFlag 参数 )被枚举为:

    typedef 枚举 UART_PAR_e{
    UART_PAR_NONE = 0、/*!<无奇偶校验*/
    UART_PAR_LEVN = 1、/*!<奇偶校验位为偶数*/
    UART_PAR_ODD = 2、/*!<奇偶校验位是奇数*/
    UART_PAR_ZERO = 3、/*!<奇偶校验位始终为零*/
    UART_PAR_ONE = 4 /*!<奇偶校验位始终为1 */
    } UART_PAR;

    因此、当我配置 UART_PAR甚至 只是启用位1时、这是完全错误的

    我是否遗漏了某个内容、或者 UART 驱动程序中是否存在有关奇偶校验配置的巨大错误?

    (请注意 、pdk_AM437X_1_0_5 (我目前正在使用该代码)和最新的 pdk_AM437X_1_0_7中的代码几乎相同)

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

    您好!

    我在 PDK 1.0.5和1.0.7中跟踪了代码。 是的、这是一个错误。 我相信它在处理器 SDK RTOS 4.1 (AM437 1.0.8)中已经修复、该版本将在一周左右的时间内推出。 感谢您指出这一点并耐心等待!

    有一些代码可将 parityType 从枚举转换为位位置。

         /*配置 UART 线路特性*/

          parityType = UART_getParityType (object->params.parityType);

          UARTLineCharacConfig (hwAttrs->baseAddr、

                    (object->params.dataLength | object->params.stopbits)、

                    parityType);

    此致、Eric

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

    尊敬的 Eric:

    感谢您的确认。

    [引用 user="lding"]

    有一些代码可将 parityType 从枚举转换为位位置。

         /*配置 UART 线路特性*/

          parityType = UART_getParityType (object->params.parityType);

          UARTLineCharacConfig (hwAttrs->baseAddr、

                    (object->params.dataLength | object->params.stopbits)、

                    parityType);

    [/报价]

    若要修复当前 PDK 而不重新创建滚轮,是否可以共享 UART_getParityType()函数? 或者、我能否访问某种较新 PDK 的 Beta 版本、以便自己获取修补程序?

    谨致问候、TIA、

    Andrea

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

    Processor SDK RTOS 4.1已发布、并提供修复 程序:software-dl.ti.com/.../index_FDS.html

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

    [引用 user="lding ]您好、

    Processor SDK RTOS 4.1已发布、并提供修复 程序:software-dl.ti.com/.../index_FDS.html

    [/报价]

    完美!

    我将补丁反向移植到 pdk_AM437X_1_0_5、现在已正确配置奇偶校验

    感谢您的支持

    Andrea