This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28335串口接收FIFO问题

Expert 1250 points


28335串口接收FIFO设为8, 现在发10个数据过来,只能收到8个,还有两个收不到,请问怎么处理

 

  • 楼主你好,

    如果一定要用FIFO的话,F28335可以支持16级FIFO,那么简单的做法是,可以将FIFO设置为10。

    如果不用FIFO的话,可以每次只接收一个字节,因此可以实现总共接收10个字节。

  • 如果采用查询的方式,接收FIFO采用的16级的深度,但是对端发送过来的数据时20个字节,这个时候,FIFO会不会溢出?如果会溢出FIFO中的数据会被覆盖吗,一个字节的接收缓冲区已有的数据会被覆盖吗

  • 我现在也遇到这个问题了……

    28035是4级FIFO,当接收数据长度大于4,而且可能不定长的时候,就很不好弄了;可能会出现丢失数据的情况;

    楼主怎么解决这个问题的?可能分享一下?

  • 我也存在同样的疑惑,想用FIFO,但又没有对不定长数据处理的解决办法,一直是在用收一个数据中断一次的办法.

  • 28035已经搞定了!

    FIFO还是使用了,深度1;开辟一个数组,长度自定义;定义好结束字符;

    具体代码如下:

    	unsigned int temp = 0;
    	AddrCount++;
    	if(AddrCount > SciBufSize)
    	{
    		AddrCount = 0;							//超出数组长度,计数清零
    		SciBufAddr = &SciRxBuf[0];				//重新复制指针地址
    	}
    	temp = SciaRegs.SCIRXBUF.all;
    	(*SciBufAddr++) = temp & 0xFF;	// Read data
    	SciRxEnd <<= 8;
    	SciRxEnd += (temp & 0xFF);					//接收指令结尾判定用
    	if(SciRxEnd == SciRxEndStr) ComEnd = TRUE;	//结束字符
    	else ComEnd = FALSE;						//非结束字符
    	SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1;		// Clear Overflow flag
    	SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;		// Clear Interrupt flag
    	PieCtrlRegs.PIEACK.all |= M_INT9;       	// Issue PIE ack

    整个中断执行时间大概1.1us/60MHz,测试了38400波特率传输数据无丢包。

    该程序适用不定长串口数据传输,不过得定义好结束字符。

    以上仅供参考,不保证100%无BUG,欢迎交流(吐槽一下,TI的资料弄得没什么条理……能换换风格吗?)