主题中讨论的其他器件: CC1311R3
工具与软件:
似乎 UART_READ()函数在从 UART 返回数据时有一个无法解释的延迟。 下面的屏幕截图显示了 UART RX 和 TX 引脚。 在 CC1310 Launchpad 上运行的 UART Echo 示例(无 RTOS、CCS、CC1310)中、8个字节的线路接收序列在8.8ms 内完成(对于9600波特、偶校验和1个停止位、更新 uartParams)。 回波实现在24ms 内在线路上传输8个字节。
显然、这是不可持续的、因为 UART 缓冲区将溢出、因为传输所需的时间是接收时间的3倍。
代码如下所示。 除了数据速率、奇偶校验位和停止位之外、它与 CC1310的无 RTOS、CCS 编译器示例相同。
void *mainThread(void *arg0) { char input; const char echoPrompt[] = "Echoing characters:\r\n"; UART_Handle uart; UART_Params uartParams; /* Call driver init functions */ GPIO_init(); UART_init(); /* Configure the LED pin */ GPIO_setConfig(Board_GPIO_LED0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); /* Turn on user LED */ GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_ON); /* Create a UART with data processing off. */ UART_Params_init(&uartParams); uartParams.writeDataMode = UART_DATA_BINARY; uartParams.readDataMode = UART_DATA_BINARY; uartParams.readReturnMode = UART_RETURN_FULL; uartParams.readEcho = UART_ECHO_OFF; uartParams.baudRate = 9600; uartParams.parityType = UART_PAR_EVEN; uartParams.stopBits = UART_STOP_ONE; uart = UART_open(Board_UART0, &uartParams); if (uart == NULL) { /* UART_open() failed */ while (1); } UART_write(uart, echoPrompt, sizeof(echoPrompt)); /* Loop forever echoing */ while (1) { UART_read(uart, &input, 1); UART_write(uart, &input, 1); } }
要从8字节接收序列获取到传输第一个字节、有大约3.56ms 的静默时间! 什么会使1个字节的 UART_READ 花费如此长的时间到达 UART_WRITE? 为 TX 和 RX 启用两个 FIFO。 因此、在 RX 正在进行时、TX FIFO 应由 UART_Write 写入、一旦传输开始、就没有理由连续的字节会有2.3ms 的间隙!
您能解释一下并提高性能吗? 谢谢。