主题中讨论的其他器件: 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 的间隙!

您能解释一下并提高性能吗? 谢谢。
