28335串口接收FIFO设为8, 现在发10个数据过来,只能收到8个,还有两个收不到,请问怎么处理
Johnson Chen1:
楼主你好,
如果一定要用FIFO的话,F28335可以支持16级FIFO,那么简单的做法是,可以将FIFO设置为10。
如果不用FIFO的话,可以每次只接收一个字节,因此可以实现总共接收10个字节。
28335串口接收FIFO设为8, 现在发10个数据过来,只能收到8个,还有两个收不到,请问怎么处理
nini ha:
回复 Johnson Chen1:
如果采用查询的方式,接收FIFO采用的16级的深度,但是对端发送过来的数据时20个字节,这个时候,FIFO会不会溢出?如果会溢出FIFO中的数据会被覆盖吗,一个字节的接收缓冲区已有的数据会被覆盖吗
28335串口接收FIFO设为8, 现在发10个数据过来,只能收到8个,还有两个收不到,请问怎么处理
zhiyongbasic:
我现在也遇到这个问题了……
28035是4级FIFO,当接收数据长度大于4,而且可能不定长的时候,就很不好弄了;可能会出现丢失数据的情况;
楼主怎么解决这个问题的?可能分享一下?
28335串口接收FIFO设为8, 现在发10个数据过来,只能收到8个,还有两个收不到,请问怎么处理
fw yang:
我也存在同样的疑惑,想用FIFO,但又没有对不定长数据处理的解决办法,一直是在用收一个数据中断一次的办法.
28335串口接收FIFO设为8, 现在发10个数据过来,只能收到8个,还有两个收不到,请问怎么处理
zhiyongbasic:
28035已经搞定了!
FIFO还是使用了,深度1;开辟一个数组,长度自定义;定义好结束字符;
具体代码如下:
unsigned int temp = 0;AddrCount++;if(AddrCount > SciBufSize){AddrCount = 0;//超出数组长度,计数清零SciBufAddr = &SciRxBuf[0];//重新复制指针地址}temp = SciaRegs.SCIRXBUF.all;(*SciBufAddr++) = temp & 0xFF; // Read dataSciRxEnd <<= 8;SciRxEnd += (temp & 0xFF);//接收指令结尾判定用if(SciRxEnd == SciRxEndStr) ComEnd = TRUE; //结束字符else ComEnd = FALSE;//非结束字符SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1;// Clear Overflow flagSciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;// Clear Interrupt flagPieCtrlRegs.PIEACK.all |= M_INT9;// Issue PIE ack
整个中断执行时间大概1.1us/60MHz,测试了38400波特率传输数据无丢包。
该程序适用不定长串口数据传输,不过得定义好结束字符。
以上仅供参考,不保证100%无BUG,欢迎交流(吐槽一下,TI的资料弄得没什么条理……能换换风格吗?)