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

DSP28335 sci FIFO 通讯问题

请问专家,我用FIFO来中断接收另一MCU发送来的键值数据,4个字中断一次,如何在中断里清空FIFO里的数据,因为有时受到干扰,单独串进了一个数据,这样我收到的键值就不对了,比如发1 2 3 4正常中断,取出来是1 2 3 4,假如在收到数据后受干扰串进一个意外的数,此时下一帧数据就变成了 *(意外数据)1 2 3最后发送的4要下一次才能收到了,由此后面所有数据都不正常了,必须重新复位系统,该问题有办法解决吗?谢谢!试着在中断里将ScibRegs.SCIFFRX.bit.RXFIFORESET清零再置1,无效!

Eric Ma:

LOFTY,

我觉得你可以在你的工程中建立一个buf,然后对于每一帧数据,应该自己定义一个帧起始标志,如命令码,然后数据长度,数据,校验和。在中断中,当出现这个校验码后,就把数据放进buf,最后校验和。

例如 0xaa, 0x04(长度),01, 02, 03, 04, checksum. 这样, 即使应为干扰,插入一个值, 0xaa, 0x04(长度),01, 02, bb, 03, 04, checksum. ,checksum编程了04,这样这一帧数据因为checksum不正确就舍弃了,自动等待下一帧数据来临,即下一个aa到来。

Eric

请问专家,我用FIFO来中断接收另一MCU发送来的键值数据,4个字中断一次,如何在中断里清空FIFO里的数据,因为有时受到干扰,单独串进了一个数据,这样我收到的键值就不对了,比如发1 2 3 4正常中断,取出来是1 2 3 4,假如在收到数据后受干扰串进一个意外的数,此时下一帧数据就变成了 *(意外数据)1 2 3最后发送的4要下一次才能收到了,由此后面所有数据都不正常了,必须重新复位系统,该问题有办法解决吗?谢谢!试着在中断里将ScibRegs.SCIFFRX.bit.RXFIFORESET清零再置1,无效!

LOFTY DVRE:

回复 Eric Ma:

在中断接收中我是有判断校验数据的,如果收到的值头尾不正确就舍弃掉,关键是每次上位机都是发送4个字数据,如果串进一个干扰数据就造成了FIFO接收数据不能头尾对齐了,这样必须重新复位系统!也就是说当上位机刚发完第3个字数据时DSP就中断接收了,这样以后的通讯都无法正常了,因为校验不通过呀!

请问专家,我用FIFO来中断接收另一MCU发送来的键值数据,4个字中断一次,如何在中断里清空FIFO里的数据,因为有时受到干扰,单独串进了一个数据,这样我收到的键值就不对了,比如发1 2 3 4正常中断,取出来是1 2 3 4,假如在收到数据后受干扰串进一个意外的数,此时下一帧数据就变成了 *(意外数据)1 2 3最后发送的4要下一次才能收到了,由此后面所有数据都不正常了,必须重新复位系统,该问题有办法解决吗?谢谢!试着在中断里将ScibRegs.SCIFFRX.bit.RXFIFORESET清零再置1,无效!

Eric Ma:

回复 LOFTY DVRE:

LOFTY,

但是即使上位机发完第3个数据就中断接收,这个时候你对这帧毁坏的数据进行校验,然后丢掉。接着第4个数据,比如0x0b,接着下一帧4个四个数据来。但你的中断里面是只有检测到一个帧头,比如0xaa,才能算是另外一帧开始,所以0x0b这个前一帧没接收的数据会丢掉。当然后在中断服务函数里面接收下一帧的前三个数据,再接下来的一次中断就可以接收第四个数据,然后校验。

所以我觉得不用复位。

另外,你可以看一下ringbuf,可以把正确的数据压到这个buf里面。

请问专家,我用FIFO来中断接收另一MCU发送来的键值数据,4个字中断一次,如何在中断里清空FIFO里的数据,因为有时受到干扰,单独串进了一个数据,这样我收到的键值就不对了,比如发1 2 3 4正常中断,取出来是1 2 3 4,假如在收到数据后受干扰串进一个意外的数,此时下一帧数据就变成了 *(意外数据)1 2 3最后发送的4要下一次才能收到了,由此后面所有数据都不正常了,必须重新复位系统,该问题有办法解决吗?谢谢!试着在中断里将ScibRegs.SCIFFRX.bit.RXFIFORESET清零再置1,无效!

LOFTY DVRE:

回复 Eric Ma:

我现在这样处理,每次FIFO中断接收处理完后检查ScibRegs.SCIFFRX.bit.RXFFST是否为0,如不为0则发送4-ScibRegs.SCIFFRX.bit.RXFFST个数据给上位机,上位机收到一个数据就发送一个数据去填充,这样就能保证每次能正确接收到头尾对齐的有效键值,比较可靠!可能方法有点笨吧!

请问专家,我用FIFO来中断接收另一MCU发送来的键值数据,4个字中断一次,如何在中断里清空FIFO里的数据,因为有时受到干扰,单独串进了一个数据,这样我收到的键值就不对了,比如发1 2 3 4正常中断,取出来是1 2 3 4,假如在收到数据后受干扰串进一个意外的数,此时下一帧数据就变成了 *(意外数据)1 2 3最后发送的4要下一次才能收到了,由此后面所有数据都不正常了,必须重新复位系统,该问题有办法解决吗?谢谢!试着在中断里将ScibRegs.SCIFFRX.bit.RXFIFORESET清零再置1,无效!

Eric Ma:

回复 LOFTY DVRE:

Lofty,

         方法有很多种,只要能实现你所要的功能就可以了,不过你也可以尝试一下我提议的那种方法,包括ringbuf。

Eric

赞(0)
未经允许不得转载:TI中文支持网 » DSP28335 sci FIFO 通讯问题
分享到: 更多 (0)