由于要接收很长的字符串,所以将接收的数据分段放在字符数组中,结果发现每一段之间都丢了一个字符,请问是什么原因呢?
HeiHei:
我觉得问题出在28335本身的可能性不大,更有可能的是你接受并将字符串存储在字符数组的这一处理程序中
如果方便,可以贴出你的代码,并描述下你的思路,大家一起看看
由于要接收很长的字符串,所以将接收的数据分段放在字符数组中,结果发现每一段之间都丢了一个字符,请问是什么原因呢?
js z:
回复 HeiHei:
interrupt void scib_isr(void)//接收gps数据中断程序{ int i;
gpsnum++;
for(i=gpsnum*16;i<((gpsnum+1)*16);i++) { tempgps[i]=ScibRegs.SCIRXBUF.all; } if(gpsnum>13) { gpsnum=0; }
ScibRegs.SCIFFRX.all=0x607E; PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9; }
//初始化
void scib_init(){ ScibRegs.SCICCR.all =0x0007; ScibRegs.SCICTL1.all=0x0003; ScibRegs.SCICTL2.all=0x0003; ScibRegs.SCICTL2.bit.TXINTENA=1; ScibRegs.SCICTL2.bit.RXBKINTENA=1;
#if(CPU_FRQ_150MHZ)
ScibRegs.SCIHBAUD=0x0001; ScibRegs.SCILBAUD=0x00E7;//9600 #endif
#if(CPU_FRQ_100MHZ) ScibRegs.SCIHBAUD=0x0001; ScibRegs.SCILBAUD=0x0044; #endif
ScibRegs.SCICTL1.all=0x0023; }
void scib_fifo_init(){ //enable SCI FIFO enhancements,disable TXFFIENA ScibRegs.SCIFFTX.all=0xE040; //disable RXFFIENA ScibRegs.SCIFFRX.all=0x607B; //0 FIFO transfer delay ScibRegs.SCIFFCT.all=0x0;
}
用了fifo,在接收类似$GPRMC,023543.00,A,2308.28715,N,11322.09875,E,0.195,,240213,,,A*78数据时,每次中断的第一位就没有了,这样数据就不完整了。
请大神看看sci设置是否有问题,还是用fifo的中断法只能接收16个字符的数?