Part Number:TMS320F28035
设置FIFO接收深度为4级, 发送深度0级;
用串口调试助手发送数据 01 03 00 00 00 02 C4 0B 共8个bytes, 示波器波形如下图
上图中,第一个为串口调试助手发送数据, 第二个波形为DSP回复数据.
注意看第一个波形持续时间为4.52ms, 波特率为19200, 可以计算1/19200*11*8=4.583ms,这与示波器波形相符,说明发送数据正确;如果是12个字节的话1/19200*11*12 = 6.875ms,这两个时间差示波器能轻易区分.
再看CCS监测数据
reDtat为接收数据,完全正确
但是 reciveCounter 为进接收中断次数,串口助手发送8个字节按理应该进中断为 8 / 4 = 2次, 监测数据为进了3次;re_data_counter = 12, 12 = 4 * 3, 接收了12个数据, 每进一次中断都读取了FIFO有几个数据再读取;如下面这段代码
dataNum = mo->SCIFFRX.bit.RXFFIL; for (i = 0; i < dataNum; i++) { md->reDtat[md->re_data_counter] = mo->SCIRXBUF.all; md->re_data_counter++; }
很明显串口调试助手只发送了8个数据,按理FIFO尝试为4级的情况下只需进2次中断读8个字节;而实际28035却进了3次中断,读取了12个字节。并且示波器监测发送数据完全正确,28035读取数据也完全正确。但是进的中断次数却错了。
因此,在串口助手发送前我把reDtat[9]~reDtat[11]的数值手动改成其他数据,再用串口助手发送同样的数据,果然reDtat[9]~reDtat[11] 全部变为0。也就是说SCI在接收完毕后,在没有数据的情况下多进了一次中断,多接收了4个数据,且数据全为0.
目前, 我没有找到原因, 请各位大侠帮忙,如果需要我可以奉上代码.
Green Deng:
你好,内容比较多,我整理了一下,大概意思是说:
F28035的SCI启用FIFO的情况下接收8个字节的消息进入了3次中断,而且最后一次中断接收的是全为00的4个数据。是这样吗?
上面概述没问题的话可能还是要给出一下SCI & FIFO的配置代码查看一下。