打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
mangui zhang:
中断里面不建议处理 处理过程长 导致其他接收丢失
建议中断中只负责接收 存入
然后交个主函数去处理
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
js z:
回复 mangui zhang:
我的中断函数里只是把 接收的一个字符放在数组里,应该不复杂啊?不知道这样做可不可以,有没有可能是接收的数据太多?
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
rookiecalf:
回复 js z:
其实不管是单个字节接收,还是使用FIFO都很方便,首选FIFO。乱码,接收不全,应该先查看波形的完好性,然后查看波特率能否匹配。另外,最好找到出现问题的地方是否有什么规律。
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
js z:
回复 rookiecalf:
我需要接收的数据一帧超过了16个字符,用fifo有溢出错误。是不是只要超过16个字符的数据就不能用fifo了?
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
rookiecalf:
回复 js z:
溢出之前(FIFO满时),把数据保存好就可以了啊
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
js z:
回复 rookiecalf:
比如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76这一串数据,每次中断fifo15个字符中的第一个字符就丢失了,导致没办法获得完整的数据。。。书上说超过15个数据,fifo的第一个字符就丢失,不知道怎么解决这个问题。
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
rookiecalf:
回复 js z:
js z
比如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76这一串数据,每次中断fifo15个字符中的第一个字符就丢失了,导致没办法获得完整的数据。。。书上说超过15个数据,fifo的第一个字符就丢失,不知道怎么解决这个问题。
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
js z:
回复 rookiecalf:
fifo是十六级深度,但是如果一个帧的数据超过16就会溢出,所以我发送的那一串就会溢出,导致每个中断的fifo的第一个字符丢失,最后的现象就是这一串数据每隔16个字符就会有一个字符丢失。试了好多次都是这个结果,如果一帧少于16个数就没问题。
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
rookiecalf:
回复 js z:
出现这个问题的原因是你没有及时将数据取出保存。
打算用SCI接收GPS数据包例如$GPRMC,123532.00,A,3958.72889,N,11620.75493,E,0.000,,051216,,,A*76。但是fifo的深度只有16位,会溢出导致第一位数据丢失,所以打算用非fifo模式。
interrupt void scib_isr(void)
{
Uint16 regs;
if(ScibRegs.SCIRXST.bit.RXRDY==1) {
regs=ScibRegs.SCIRXBUF.all;
if(gpsnum<140)
{
tempgps[gpsnum]=regs;
gpsnum++;
}
}
if(gpsnum==140)
{
gpsnum=0;
}
PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;
}
中断函数如上,问题是每次接收完一遍都需要很久,而且经常出现乱码,请问应该怎么设置?
js z:
回复 rookiecalf:
我就是把接收到的数据放在一个字符型数组里了,然后观察的是这个数组,不知道应该怎么取出保存,网上关于这个的也没找到