WINCE下10Mbps的SPI数据流采用中断的接收工作方式(等到了中断然后一个个地读接收SFR)能不能处理的过来?难道必须用DMA工作方式吗?

sg256   2009-10-23 10:04 楼主
WINCE下10Mbps的SPI数据流采用中断的接收工作方式(等到了中断然后一个个地读接收SFR)能不能处理的过来?难道必须用DMA工作方式吗?

回复评论 (14)

谁解决过这种高速接收的问题?我的SPI有64个FIFO按道理应该可以协调外围总线跟系统总线了.但为什么我的SPI接收丢数据/漏数据很严重
点赞  2009-10-23 10:07
按道理我的SPI的FIFO有64个字节,有了FIFO就应该可以接到高速系统里面去.FIFO的存在就是为了协调系统总线跟外围总线的速度不一致而存在的.FIFO满了才请求CPU来处理(进行读取),CPU处理的速度是用的系统总线的频率,应该很快的,SPI数据的接收(一位位数据的移入跑的是外围总线,速度应该是更慢一点的).难道有了FIFO还是处理不过来?还是不能协调系统总线跟外围总线?(丢数据/漏数据现象严重)应该不至于吧?谁给讲讲这方面的理论啊!!!难道有了FIFO还得去用DMA方式?


不过我目前的接收触发中断的水平是设置为接收到7个字节就触发中断,没有设置为64个字节,FIFO的功能没有全部用到.
点赞  2009-10-23 10:09
DMA接收方式必须先知道要接收多少个数据,当指定的数据个数接收完成才触发DMA中断产生什么的.但我的系统DMA接收的数据个数是变化的,不好指定DMA接收的数据个数啊!这样整的我的系统不知道该怎么去用DMA工作方式.
点赞  2009-10-23 10:12
用中断方式是可以处理的过来。你可以把fifo的长度设置长一些比如用64。然后触发中断设置为48.
不要相等。试试看。
7个字节也可以的,应该不会有漏数据的现象。我觉得你是不是每次接收数据就把FIFO给清掉的原因造成。比如说FIFO接到7个就通知中断处理了,然后FIFO还会继续接收后面的字节。但是你中断接完7个字节,就直接把fifo清掉了。后面几个字节可能就丢失了。

其实用DMA的方式跟中断也一样。等FIFO满了,直接从总线传到Memory,不用通过CPU来转。速度快一些。触发的原理还是跟中断一样的。
点赞  2009-10-24 10:30
直接把fifo清掉???


没有这样的操作啊!FIFO在软件层面是清不到的,FIFO是底层固件接口.FIFO满了就会产生什么RXRDY信号,请求CPU来处理.FIFO的实现应该是什么LSI/VLSI来实现的.

FIFO这样的器件是由硬件决定的,是固定大小的,像我的SPI的FIFO就是64个字节的大小.


//=========
漏数据也不是完全的,有时候还是可以接到一个完整的包的,并且对应的校验和也是对的.觉得接收应该是没有问题,不知道问题是不是出在MCU发送那端,问题确定不了很烦.
点赞  2009-10-24 10:55
顶起来一下
点赞  2009-10-26 14:23
如果怀疑发送的问题,
你就重复传一个包,然后用示波器测测看。是否有数据丢失!

点赞  2009-10-26 15:38
有逻辑分析仪就好了,就可以勾几K的数据看看发送丢不丢数据.
点赞  2009-10-26 16:12
呵呵。这个还是要靠自己慢慢找。
点赞  2009-10-26 18:51
SPI没有所谓的忙不过来
点赞  2009-10-27 10:23
今天拿两台ARM+WINCE的设备试了一下,真的会丢数据啊!10帧1K的数据就有1-2帧收不完全.SPI频率还只是跑到了5.54MHZ,中断方式真的处理不过来?应该不存在SPI数据没发出的现象?!
点赞  2009-10-28 19:15
SPI通信线太长?SPI通信信号线不稳定有干扰?觉得都不大可能是!
点赞  2009-10-29 19:04
500khz都会丢数据!怪怪!难道中断接收真的处理不过来?
点赞  2009-10-29 19:48
问一下楼主,现在有没有解决spi丢数据的问题的
点赞  2010-3-6 16:08
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复