主题中讨论的其他器件:CC1310
工具/软件:TI-RTOS
您好!
工具/软件: TI-RTOS 2.13.00.06
我正在 CC1310硬件上实施 Modbus RTU 从站。 Modbus 协议要求一次接收1个字节的请求、测量子字节时序以检测帧结束(和帧错误)。
我在一次接收1个字节时遇到了低 UART 性能(在阻塞模式和回调模式下都是如此)。 我有以下简单代码来测量接收时序:
void initialize_uart()
{
UART_Params uartParams;
/*创建一个数据处理关闭的 UART。 *
UART_PARAMS_INIT (uartParams);
uartParams.readMode = UART_MODE_BLOCKING;
uartParams.writeMode = UART_MODE_CALLBACK;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = MODBUS_UART_BAUDRATE;
uartParams.readTimeout = UART_WAIT_FOREVER;
uartParams.writeCallback = UartWriteCallback;
UART = UART_OPEN (Board_UART0、uartParams);
如果(UART == NULL)
{
System_abort ("打开 UART 时出错");
}
}
void initial_Modbus()
{
calculate_timeouts();
construct_timers();
resetRxBuffer();
Initialize_UART();
对于(;)
{
T1 = Clock_getTicks();
int size = UART_read (UART、rxBuffer、UART_RX_buffer_size);// 1字节
memcpy (modbusRxBuffer + rxBufferLength、rxBuffer、size);
rxBufferLength +=大小;
T2 = Clock_getTicks();
system_printf ("接收采用[%lu]us\n"、(T2 - T1)* Clock_tick);
}
}
使用上面的代码、我得到大约每字节3.3ms (稳定)。 在9600波特率下、大约需要1ms 来传输1个字节、并且每字节3.3ms 的传输时间很长。
我的测试应用程序包含另一个使 LED 闪烁的任务、因此不会占用 CPU。
我已经取消了 UART 中断优先级、但很不幸。 目前我有:
/* UART 硬件参数结构、也用于分配 UART 引脚*/ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1310_LAUNCHXL_UARTCOUNT]={ { baseAddr = UART0_BASE、 powerMngrId = PowerCC26XX_Periph_UART0、 .intNum = INT_UART0_COMB、 .intPriority =(2 << 5)、 .wiPriority = 10、 txPin = Board_UART_TX、 .rxPin = Board_UART_RX、 ctsPin = PIN_Unassigned、 rtsPin = PIN_Unassigned、 .ringBufPtr = uartCC26XXRingBuffer[0]、 .ringBufSize = sizeof (uartCC26XXRingBuffer[0]) } };
有人能解释一下我在 UART 设置方面做了什么错吗? 是否可以缩短处理时间?



