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/TMDSEVM572X:UART1访问问题

Guru**** 2595805 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/635529/rtos-tmdsevm572x-uart1-access-issue

器件型号:TMDSEVM572X

工具/软件:TI-RTOS

您好、Rahul、

如下面的论坛中所述  

我尝试添加两个 UART 实例 UART1和 UART3。  修改 了 pdk_am57xx_1_0_1\packages/ti\board\src\evmAM572x\include\board_cfg.h

/* UART LLD 实例编号*/
#define Board_UART_Instance 2.

/* UART LLD 实例编号*/
由 Anjana 提供的#define Board_UART_Instance_1 0//tag

------------------------------------------------------- /

在默认电路板库中使用的 UART1的引脚多路复用配置中、并且在 BoardPadDelayInit.c 中的路径 pdk_am57xx_1_0_1\packages/ti\board\src\evmAM572x 中已配置 UART1_TXD 和 UART1_RXD 引脚

/* UART1 - B27上的 uart1_RxD - UART1 (exp)*/
{0x17E0、0xE0000、{0x0、0}、 {0x0、0、0}、{0x0、0、 0}}、

/* UART1 - C26上的 uart1_TxD - UART1 (exp)*/
{0x17E4、0x90000、{0x0、0、0}、 {0x0、0、0}、{0x0、0、 0}}、

------------------------------------------------------- /

和_clock 中

CSL_FINST (l4PerCmReg -> CM_L4PER_UART1_CLKCTRL_REG、
L4PER_CM_CORE_COMPONENT_CM_L4PER_UART1_CLKCTRL_REG_MODULEMODE、ENABLE);

while (CSL_L4PER_CM_CORE_COMPONENT_CM_L4PER_UART1_CLKCTRL_REG_IDLEST_FUNC!=
CSL_FEXT (l4PerCmReg -> CM_L4PER_UART1_CLKCTRL_REG、
L4PER_CM_CORE_COMPONENT_CM_L4PER_UART1_CLKCTRL_REG_IDLEST);

------------------------------------------------------- /

我使用 UART_BasicExample_evmAM572x_armTestproject 来检查是否启用了 UART1。

使用"gmake board" cmd 重建电路板库

重建项目。

我使用 Board_UART_Instance (2)测试了该项目。 它工作正常。

但是、当我将实例更改为 Board_UART_Instance_1 (0)时。 这不奏效。 为什么?

请告诉我出错的地方。

Anjana Pathak

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

    您n`t 更新了电路板库中的文件 evmAM572x_LLD_init.c。 您需要在函数 Board_uartStdioInit 中添加以下内容:

    UART_stdioInit (Board_UART_Instance);
    UART_stdioInit (Board_UART_Instance_1);

    尝试引入此更改并重建电路板库、并告知我们问题是否仍然存在。

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

    我使用这些 init 更新了 evmAM572x_LLD_init.c

    UART_stdioInit (Board_UART_Instance);

    UART_stdioInit (Board_UART_Instance_1);

    我没提到这一点。。。

    问题相同

    Anjana Pathak

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

    我唯一能想到的另一件事是检查中的中断设置、即 SOC 配置中使用的中断编号映射到 TRM 中的交叉开关。 另一个要检查的问题是确认您的更改已在电路板库中生效。 您能否单步执行 Board_init 调用并在函数中设置断点、以设置时钟并初始化2个实例的 UART StdioInit。

    您是否进行了调试,在初始化后执行 UART_Put 或 UART_printf 时会发生什么情况,它是否会获得中断? UART 驱动程序 API 中是否有任何错误代码? 在 Board_UART_instance_1上只保留 UART_StdioInit 是否起作用? 删除其他实例。

    此致、

    Rahul

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

    我通过互换连接再次进行了测试。 已将 P18的引脚30连接到422至 TTL 转换器的 TXD。 并将引脚60连接到 FTDI 电缆的 RxD。

    并能够使用 UART1读取和写入数据。

    但我无法理解如何在同一应用中同时使用 UART1和 UART3。 因为我正在初始化这两个实例、但只有一个实例处于活动状态。

    一段时间后、它停止进入回调功能。 为什么?

    谢谢、

    Anjana Pathak   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于 UART_READ 函数返回 UART_ERROR (-1)、因此不调用回调例程。 为什么?
    是否可以在 UART3上发送调试消息并读取 UART1上的传入字节?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在使用 Read_Polling (..) 函数读取数据。 我仍然无法访问同一应用中的两个 UART。 进行上述更改后、我将在 下面给出的代码中执行初始化。

    UART_INIT();

    /******** /

     /*获取默认的 UART 初始化配置*/

     UART_socGetInitCfg (UART_Instance_3、&UART_cfg);

     UART_cfg.edmaHandle =空;

     UART_cfg.dmaMode  = false;

    UART_cfg.loopback = false;

       UART_socSetInitCfg (UART_Instance_3、&UART_cfg);

       UART_PARAMS_INIT (uartParams);

       uart1 = UART_open (UART_Instance_3、uartParams);

     UART_socGetInitCfg (UART_Instance_1、&UART_cfg);

       UART_cfg.edmaHandle =空;

       UART_cfg.dmaMode  = false;

       UART_cfg.loopback = false;

       UART_socSetInitCfg (UART_Instance_1、&UART_cfg);

     /*为读取设置回调模式*/

       UART_PARAMS_INIT (uartParams);

       uartParams.baudrate = 76800;

     uartParams.readDataMode = UART_DATA_BINARY;

     uartParams.readReturnMode = UART_return_full;

     UART = UART_OPEN (UART_Instance_1、uartParams);

      如果(UART == NULL)

      {

       // 转到 Err;

      }

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

    该问题是否仍然存在、或者我们能否解决该问题。 如果您需要有关此问题的进一步帮助、请告知我们。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    能够在轮询模式下访问 UART1和 UART3、而不是在中断模式下、例如当数据速率较高时、76800bps UART_Read 开始返回错误值(-1)。