Hello:
最近在做CC1310低功耗的产品,调试串口时出现了问题,串口将接收的数据打印出来,使用串口工具自动发送,每帧数据大小为14字节,接收缓冲区足够大,不会溢出,硬件为
ti提供的CC1350 LaunchPad(CC1310和CC1350的软件设计一样)
串口发送的速率为100ms时,发送450~700左右帧数据时,串口不工作了;串口发送的速率为300ms时,发送350左右帧数据时,串口不工作了;发送数速率为1000ms时,发送2000多帧数据时,串口不工作了;
在线仿真时,运行逻辑是对的,复位之后模块又重新开始工作了,串口停止工作之后如果不复位则会一直处于这种状态;以下是测试代码(不能上传附件,文件在公司会被加密的)
static UART_Handle uart = NULL;
uint8_t buf[256];
// 硬件资源初始化
int uart_init(uint8_t baudIndex)
[
static const uint32_t baudRateTable[] = [
4800,9600,19200,38400,57600,115200
];
UART_init();
UART_Params uartParams;
UART_Params_init(&uartParams);
uartParams.baudRate = baudRateTable[baudIndex];
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.readTimeout = 20*1000ul/Clock_tickPeriod;
uart = UART_open(UART_BASE, &uartParams);
if(!uart)[
return -1;
]
return 0;
]
void uart_task_function(UArg arg0, UArg arg1)
[
int_fast32_t ret = -1;
uint8_t index = 0;
uint8_t rx_busy = 0;
while(1)
[
ret = UART_read(uart,buf + index,1);
if(1 == ret)
[
if(index ++ >= 255)[
index = 0;
]
rx_busy = 1;
]
else
[
if(rx_busy)
[
rx_busy = 0;
UART_write(uart,buf,index);
index = 0;
]
]
]
]
除了上述串口工作一段时间侯异常之外,还有几个问题
1、串口死机的与uartParams.readTimeout 设置的值有关,设置比较小时,很容易就死机了,请问这个参数一般设置多少合适?
2、目前在使用CC1310做低功耗的产品,需要串口中断唤醒,该怎么处理?是否有相应的范例可供参考