|
大家有用过TI协议栈里的串口吗?
协议栈中的串口0,是封装成NPI来用的,使用这个封装好的函数,来接收串口数据。
他使用的是串口DMA方式,然后协议栈轮训处理,发现DMA所指向的内存处有数据,就提取出来。
但是实际应用中,发送过去的数据(其实是串口的一些指令),这些指令被识别出来的效率:
每秒发送一次指令,指令长度20Byte,发送100条,有10条命令没有被单片机识别出来。。。
我做的操作是,接收到数据之后
- static void npi_cb(uint8 port, uint8 event)
- {
- (void)port;
- uint8 num=0;
- uint8 buf[CORE_CMD_QUEUE_SIZE]; //Max Len of CMD
-
- num = NPI_RxBufLen();
- if(num < CORE_CMD_QUEUE_SIZE)
- {
- NPI_ReadTransport(buf,num);
-
- for(uint8 i=0;i<num;i++)
- QueueInput(pCoreCmdQueue,buf[i]); //存到一个队列,去识别指令
- }
- }
复制代码
串口效率这么低,根本没办法使用啊。
从网上看到帖子:
CC2540协议栈高速串口通信解决(UART的DMA方式)
但是他没给出具体怎么处理DMA数据,协议栈里的函数感觉比较复杂。串口+DMA这块。
大家有没有处理过这类的工程,怎么解决的?
我已经试过串口不用他的NPI,使用串口0中断把数据存入队列。但是队列里的数据更是惨不忍睹丢了很多,几乎不能识别任何一条指令。。。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|