TI中文支持网
TI专业的中文技术问题搜集分享网站

28335串口接收FIFO问题

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的资料弄得没什么条理……能换换风格吗?)

 

赞(0)
未经允许不得转载:TI中文支持网 » 28335串口接收FIFO问题
分享到: 更多 (0)