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.

SM470R1B1M-HT: SCI3+DMA数据接收异常——字节错位

Part Number: SM470R1B1M-HT


       SM470通过SCI3与外部设备进行串行通信,采用DMA方式控制。在程序中配置了两个DMA package(package0、package1),package0(控制SCI3 TX)用于向外部设备发送数据回传命令,package1(控制SCI3 RX)用于自动接收外部设备的应答数据(数据总长4字节)。启动DMA后,package0先工作,完成数据回传命令发送;package1后工作,用于等待接收外部设备的应答数据。上述交互过程每秒执行128次,在大多数情况下能工作正常,但有时候会出现如下异常:

0、系统复位;

1、启动第一次与外部设备数据交互:外部设备正常回传4个字节数据;DMA本应该在外部设备应答4个字节后,触发DMA接收完成中断,实际却在接收完成第3个字节后就触发了接收完成中断;同时SCI3完成了第四个字节的接收,缓存在RXBUF中;

2、启动第二次与外部设备数据交互:在外部设备还未开始回传数据时,DMA立刻读入SCI3 RXBUF内缓存的上一帧数据的最后一个字节;随后,外部设备开始回传4个字节;当回传3个字节后,DMA因为读入了1+3=4个字节而触发接收完成中断;应答数据的第4个字节被SCI3接收并缓存在RXBUF中;

3、上述交互过程反复执行,但收发双方永远都不能同步,始终偏移一个字节;

4、尝试在DMA交互之前执行RXBUF读操作,试图提前清空RXBUF可能的残留数据,避免对本次DMA接收造成影响,但没有效果;

       请问,这种异常是如何产生的?