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**** 2557810 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/597599/rtos-tmdsevm572x-uart-use-in-interrupt-mode

器件型号:TMDSEVM572X

工具/软件:TI-RTOS

您好!

SDK:processor_sdk_rtos_am57xx_3_02_00_05

PDK: pdk_am57xx_1_0_5

我想读取 UART 3上的字节。 我想将该 UART 端口设置为 HW 中断模式。

我在代码中进行了以下更改。

#define UART_Instance 2.

UART_Params uartParams;
/* UART SoC 初始化配置*/
UART_HwAttrs UART_cfg;

boardCfg = Board_init_PINMUX_CONFIG |
Board_init_module_clock | Board_init_uart_stdio;
board_init (boardCfg);

/********* UART_IN_Callback();******* /
/*获取默认的 UART 初始化配置*/
UART_socGetInitCfg (UART_instance、&UART_cfg);
UART_cfg.edmaHandle =空;
UART_cfg.dmaMode = false;
UART_cfg.loopback = false;
/*设置启用 DMA 的 UART 初始化配置*/
UART_socSetInitCfg (UART_instance、&UART_cfg);
/*为读取和写入设置回调模式*/
UART_PARAMS_INIT (uartParams);
uartParams.readCallback = UART_callback;
uartParams.readMode = UART_MODE_CALLACK;
UART = UART_OPEN (UART_Instance、&uartParams);

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

int32_t Count_encoder、addrScanPrompt;
addrScanPrompt=(int32_t) scanPrompt;
COUNT_ENCODER=UART_READ (UART、(void *) addrScanPrompt、UART_TEST_READ_LEN);
CNT=Cnt+Count_Encoder;

并以串行方式发送 cnt 值。 但 UART_CALLACK 函数没有得到调用。

我认为我做了一些错误或无法正确配置 UART。

我想在中断模式下读取数据。 请帮助我解决该问题

谢谢、

Anjana Pathak

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

    回拨配置似乎正确。 修改接头后、您重建了电路板库了。 为了启用特定的 UART 实例、您需要确保相应地修改引脚多路复用器、时钟和驱动程序代码。 此外、请确保 UART 实例具有正确的电平转换器、以便它们能够与主机 PC 上的串行接口通信。

    对于 AM572x、以下是我们用于在 AM572x GP EVM 的扩展连接器上启用 UART9的一些步骤。
    e2e.ti.com/.../2085526

    此外、请查看使用 Processor SDK RTOS 修改 UART 实例的步骤:

    http://www.ti.com/lit/an/sprac32/sprac32.pdf


    此致、
    Rahul

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

    您好、Rahul、

    非常感谢您提供这些信息。

    我想知道 为什么 Board_UART_Instance 设置为2是启用 UART 3的要求吗?

    如何启用9、10、1、8等其他 UART。 是否要在中断模式下一次使用2个 UART? 我只需要修改 evmAM572x_clocks.c、如随附的 e2e 论坛中所述。

    我没有修改头文件来启用 UART、因为我想使用 UART3的 Rx 、UART3设置为调试控制台 FTDI 的默认端口。 在这里、我只想在固有中断模式下通过 UART 3的 Rx 读取数据、因此我将其配置为回调模式。 但我认为回调函数不起作用。

    谢谢、

    Anjana Pathak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TRM 对 UART1至 UART10的 UART 实例进行编号...但在软件中、它们是从 UART0-UART9编号的。 因此需要将实例设置为2以启用 UART3。

    不同的 UART 实例可能需要不同数量的更改、因为提供的电路板库仅使用 TI 评估平台上可用的接口。 因此、我向您转发了应用手册、因为它列出了启用 UART 实例所需的所有更改。

    在我们的用例中、我们选择了 UART9进行实验、因为可以在电路板上访问引脚并使其启用、所需的更改极少。 我们在 GP EVM 上启用了 UART9、因为我们希望从内核使用不同的 UART、因为 UART3正被从代码使用、但对于任何其他 UART 实例、您需要确保 pinmux、 时钟和中断(可选)根据需要进行配置、电路板库会选取所做的更改。 中断配置是可选的、因为所有平台的默认 UART_SoC.c 文件都使用默认映射进行此配置。

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

    您好、Rahul、

    那么、如果我将  UART9的 UART 实例更改为8、并按照 附件中所述更新 evmAM572x_clocks.c 中的更改、那么 UART 9将被启用、UART3也将被启用?

    很抱歉、我问这些问题、因为我还不能理解我将如何在中断模式下使用这些 UART。  

     

    非常感谢、

    Anjana Pathak

     

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

    Anjana、

    目前、电路板库仅在代码中启用一个 UART 实例。 如果要启用2个 UART、则需要通过执行以下操作来添加另一个实例

    #define Board_UART_Instance 2
    
    #define Board_UART_Instance_1 8. 

    在_clock.c 文件中并在 evmAM572x_LLD_init.c 下、添加代码以初始化 Board_uartStdioInit 中的第二个 UART 实例

    UART_stdioInit (Board_UART_instance);
    
    UART_stdioInit (Board_UART_Instance_1); 

    这将使用默认 UART 初始化参数来初始化 UART、我认为该参数处于阻塞模式、因此将默认设置更改为中断模式。  在文件 UART_drv.c 中找到默认设置

    /*默认 UART 参数结构*/
    const UART_Params UART_defaultParams ={
    UART_MODE_BLOCKING、 /* readMode */
    UART_MODE_BLOCKING、 /* writeMode */
    SemaphoreP_WAIT_FOREVER、 /* readTimeout */
    SemaphoreP_WAIT_FOREVER、 /* writeTimeout */
    null、 /* readCallback */
    null、 /* writeCallback */
    UART_RETURE_NEWLINE、/* readReturnMode *
    UART_DATA_TEXT、 /* readDataMode */
    UART_DATA_TEXT、 /* writeDataMode */
    UART_ECHO_OFF、 /* readEcho */
    115200、 /*波特率*/
    UART_LEN_8、 /* dataLength */
    UART_STOP_One、 /*秒数*/
    UART_PAR_NONE、 /* parityType */
    null、 /* readCallback2 */
    null、 /* writeCallback2 */
    }; 

    将设置从 UART_MODE_BLOCKING 更改为 UART_MODE_CALLACK。


    您需要重新构建 UART 驱动程序、电路板库、然后(按顺序)重建应用程序才能使其生效。


    希望这对您有所帮助。

    此致、

    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢你们的回应
    进行更改并对其进行测试。

    再次感谢、
    Anjana Pathak