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.

[参考译文] MSPM0G3507:Drivers库UART相关问题。μ V

Guru**** 2527600 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1556536/mspm0g3507-drivers-uart

器件型号:MSPM0G3507


工具/软件:

使用uart _回调 freertos的demo、发现默认

uartParams.readReturnMode = UART_ReadReturnMode_Partial;  
将 μ s
#define CONFIG_UART_BUFFER_LENGTH 1
修改为 μ s
#define CONFIG_UART_BUFFER_LENGTH 10后
Δ R_ReadReturnMode_PARTIAL的回调?μ 串口接收将多次进不去callbackFxn回调函数、应该是这个底层逻辑调用的是timeout中断、但timeout中断产生的条件是fifo不为空且超时才会产生、这导致部分情况下无法触发timeout中断。请问在drivers驱动库下如何去做UART
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能通过英语帮助描述您的问题吗? 这将更有助于与全球团队进行讨论。

    谢谢!

    此致

    Johnson

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

    好的、谢谢!

    我正在使用 UART 回调+ FreeRTOS 演示 F2838x 器件驱动程序。 默认情况下、该示例使用:

    uartParams.readReturnMode = UART_ReadReturnMode_PARTIAL; #define CONFIG_UART_BUFFER_LENGTH 1

    在这种情况下、callbackFxn为每个接收到的字节正确触发回调 ()。

    不过、当我将缓冲区长度更改为 10 时:

    #define CONFIG_UART_BUFFER_LENGTH 10

    我注意到回调是 不会按预期多次触发 。 低电平逻辑似乎取决于 a 超时中断 、仅当 FIFO 不为空超时到期时才会生成。 这会导致从未触发超时中断、因此不会调用回调。

    问题:
    我应该如何UART_ReadReturnMode_PARTIAL在驱动程序库中正确配置或实现、以便在使用大于 1 的缓冲区长度时可靠地调用回调?

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

    您好、

    该示例用于 RXRXF1>= 1 个中断触发条目。

    当接收到一个字节时触发中断。 如果 FIFO 触发级别设置为 1、则不需要超时功能。

    我不熟悉 RTOS 本身、但似乎没有在收到更多数据时触发 UART 任务。

    我检查了 Rxbuffer 通常可以使用中断任务更新较大的数据长度、但第一个 UART 棉任务仅在接收到的第一个数据时触发、这使得它在 while 循环中挂起。

    B.R.

    Sal

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

    修改 while 循环后、看起来可以处理多字节的数据包。

    char input[10];
    ....
        while (1) {
            bytesRead = 0;
            while (bytesRead <= 9) {
                status = UART_read(uart, &input, 10, &bytesRead);
    
                if (status != UART_STATUS_SUCCESS) {
                    /* UART_read() failed */
                    while (1) {
                    }
                }
            }
    
            bytesWritten = 0;
            while (bytesWritten == 0) {
                status = UART_write(uart, &input, 10, &bytesWritten);
    
                if (status != UART_STATUS_SUCCESS) {
                    /* UART_write() failed */
                    while (1) {
                    }
                }
            }
        }

    B.R.

    Sal