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:系统在 UART 读取时挂起

Guru**** 2589245 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/635068/rtos-tmdsevm572x-system-hangs-on-uart-read

器件型号:TMDSEVM572X

工具/软件:TI-RTOS

您好!

我正在使用 GP EVMAM572x

PDK: pdk_am57xx_1_0_5

RTOS: processor_sdk_rtos_am57xx_3_02_00_05

我将 UART3配置为在回调模式或中断模式下读取数据、因此我在 NIMU 基本示例项目中进行了修改。

1.按如下方式初始化 UARTa

空初始化 UART_3()

int32_t addrScanPrompt;//、byterd;
//char HeadingMark_1、prv_HeadingMark_1;
//UART_Handle UART =空;
UART_Params uartParams;
/* UART SoC 初始化配置*/
UART_HwAttrs UART_cfg;
//semaphoreP_Params semParams;
UART_INIT();
/********* UART_IN_Callback();******* /
/*创建回叫信标*/
/*UART_osalSemParamsInit(&semParams);
semParams.mode = SemaphoreP_Mode_binary;
callbackSem = UART_osalCreateBlockingLock (0、&semParams);*/
/*获取默认的 UART 初始化配置*/
UART_socGetInitCfg (UART_instance、&UART_cfg);
UART_cfg.edmaHandle =空;
UART_cfg.dmaMode = false;
UART_cfg.loopback = false;

UART_socSetInitCfg (UART_instance、&UART_cfg);

/*为读取设置回调模式*/
UART_PARAMS_INIT (uartParams);
uartParams.baudrate = 76800;
uartParams.parityType= UART_PAR_even;
uartParams.readCallback = UART_callback;
uartParams.readMode = UART_MODE_CALLACK;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
/*uartParams.writeCallback =空;
uartParams.writeMode = UART_MODE_CALLBACK;*/

UART = UART_OPEN (UART_Instance、&uartParams);
如果(UART == NULL)

//转到 Err;

/************* /
Task_sleep (100);
addrScanPrompt=(int32_t) scanPrompt;
if (UART_READ (UART、(void *) addrScanPrompt、input_length)==UART_ERROR)

//goto Err;

Task_sleep (100);

 2.写入回调函数

void UART_callback (UART_Handle handle、void *buf、size_t count)

A_cnt=a_Cnt+count;
NextSerialData=1;

3.调用任务 while 循环中的读取函数

void read_a_cnt ()


if (NextSerialData)


NextSerialData=0;

/*UART_putNum_Anjana (a_cnt);
UART_WRITE (UART、&scanPrompt、5);//Task_sleep (100);*/
//semaphore_pend (callbackSem、BIOS_wait_forever);

//memset (scanPrompt、0、sizeof (scanPrompt));
addrScanPrompt_1=(int32_t) scanPrompt;
UART_READ (UART、(void *) addrScanPrompt_1、input_length);
//uart_osalPendLock (callbackSem、SemaphoreP_WAIT_FOREVER);

if (a_cnt <=500)

{A_cnt =0;}

但在一段时间后、执行会挂起。 我无法识别问题。 请帮助我识别。 UART3默认用作调试端口、这是否是 UART3的问题?

谢谢、

Anjana Pathak

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

    您能描述一下执行的挂起位置吗?

    您是否尝试独立于 Nimu 示例运行修改后的 UART 示例以查看执行是否仍然挂起? 这可能是 ISR 冲突的问题。

    此致、
    Sahin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何从 UART3的 Nimu 示例中禁用调试按摩?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Anjana、

    要禁用调试消息、请注释掉以下行:

    #ifndef IO_console
    #define NIMU_LOG UART_printf
    其他
    #define NIMU_LOG printf
    #endif

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

    你好 Sachin、

    这将仅从主文件中禁用调试按摩。 但 include 文件调试消息的情况如何。

    如何禁用整个工程中的 uart3调试消息?

    目前我使用的是 Nimu_BasicExample_evmAM572x。

    Anjana Pathak

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

    要删除这些 NIMU 消息、您需要删除目录中 enet_phy.c 中的 ENET_PHY_LOG 函数调用

    pdk\packages/ti\board\src\evmAM572x\device

    然后通过运行来重建电路板库

    gmake board_lib limit_socs="AM572x" limit_boards="evmAM572x" limit_cores="a15_0"

    请注意、通常可以在 enet_phy.c 中定义 IO_console 以切换到控制台消息、但由于当前无法实现的错误。

    如果遇到任何问题、请告诉我。

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

    您好!

    UART_READ()函数在一段时间后返回 UART_ERROR,例如,它读取字节10秒,然后开始返回错误。 因此 停止在回调模式下执行 ISR。

    为什么该 UART_READ 函数返回 UART_ERROR (-1)?  

    谢谢、

    Anjana Pathak

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

    UART_READ 函数返回错误的原因有很多。 为了帮助缩小其范围、请尝试将波特率设置为标准值、如115200、奇偶校验设置为 none 或 ODD、并查看10秒后是否仍然返回错误。
    与此同时,我将继续进一步研究这一点。

    最棒的
    Sahin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但我的要求是以波特率76800读取数据、甚至是奇偶校验。 因此、我想实现它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我用 UART_readPolling 函数替换 UART_read、并将其用于76800波特率甚至奇偶校验的阻塞模式。 它工作正常。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想使用 UART3写入调试消息、使用 UART1读取数据。 如何在同一应用中使用这些端口?

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

    您在轮询模式下工作的代码表明它很可能是一个中断问题。 按照本文 e2e.ti.com/.../2199150中概述的步骤、您绝对可以使用 UART3进行调试、并为您的应用使用 UART1

    如果您遇到任何特定问题、请告知我们。

    最棒的
    Sahin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sahin、
    我进行了所有更改、并尝试在您所附的帖子中提及。 仍然无法打开两个端口 UART3和 UART1。 两个器件各自都在工作。 但是、当我尝试打开两个端口时、它会出现运行时错误(未处理的 ADP_Stopped 异常0x20023)。

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

    未处理的 ADP_Stopped 异常0x20023表示 ARM 调试器不支持的未知运行时错误。 您能否确定代码中发生的位置? 此外、请确保在打开 UART 实例时使用不同的句柄。

    最棒的
    Sahin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    现在两个 UART 都运行正常。。。
    一个具有自定义波特率、另一个具有默认波特率。
    问题出在初始化步骤以及 UART param 和 config 指针。
    此外、通用 EVM 用户指南中描述的 P18的硬件引脚对 UART1 TX 和 Rx UART1_RxD 位于引脚30、UART1_TxD 位于引脚60不正确。

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

    我很高兴听到您的问题得到解决! 我会将您的反馈转发给团队。

    最棒的
    Sahin