TI工程师您好
我调试过程中发现,串口在收发的时候存在被无线收发打断,我串口优先级设置了3,无线收发设置了2,这样串口在工作的时候是不是不应该被打断。
EasyLink_receiveAsync(rxDoneCb, 0);
/* Wait 300ms for Rx */
// if(Semaphore_pend(rxDoneSem, (300000 / Clock_tickPeriod)) == FALSE) //delete by barbara
if(Semaphore_pend(rxDoneSem, (10000 / Clock_tickPeriod)) == FALSE) //add by barbara
{
/* RX timed out abort */
if(EasyLink_abort() == EasyLink_Status_Success)
{
/* Wait for the abort */
Semaphore_pend(rxDoneSem, BIOS_WAIT_FOREVER);
}
}
上面是接收的程序,,,我只留了这个接收也是会打断串口,,,不知道是什么原因导致。。。接收回调里也没任何的东西 只是指示灯 。。。
请指导一下。。。谢谢。。。
Felix ZF:
能描述的具体点吗?
你是如何确定串口接收是被无线接收打断的?具体是什么现象?
liming qu:
回复 Felix ZF:
static void uartReadCallback(UART_Handle handle, void *rxBuf, size_t size){ size_t i = 0;
for( i = 0; i < size; i++) { if(BufferSize != 128) { UartRxBuf[BufferSize] = ((uint8_t*)rxBuf)[i]; BufferSize++; } else { BufferSize = 0; UartRxBuf[BufferSize] = ((uint8_t*)rxBuf)[i]; BufferSize++; } }
if(UART_ERROR == UART_read(handle, &UartRxReadByte, 1)) { //Uart_PutString("UART ERROR\r\n"); UART_readCancel(handle); return; }
经过测试 我发现中断是 一个一个的收数据,,,在快速发送的过程中我发的1234567890这个字符串结果收到13579 中间的24680 丢了。。。我想问下工程师这个中断必须一次收1个吗 能不能 缓存好了再统一收。。。
在线等 多谢
Felix ZF:
回复 liming qu:
int UART_read(UART_Handle handle, void *buffer, size_t size);
这是函数原型,你可以设置每次接收数据的长度。
liming qu:
回复 Felix ZF:
工程师您好
设置固定长度是可以的,但是我是做的串口透传,每次的数据我是不知道长度的,,,所以 假如我设置了120 那么 不到120 他是不会发出的
Felix ZF:
回复 liming qu:
可以使用UART_Control使能
UARTCC26XX_CMD_RETURN_PARTIAL_ENABLE
详细使用方法可以参考
file:///C:/TI/simplelink_cc13x0_sdk_1_40_00_10/docs/tidrivers/doxygen/html/_u_a_r_t_8h.html#a5ce79dc51ddc3ef73e8f08983bfee2c7
liming qu:
回复 Felix ZF:
多谢工程师大周末给于回复!