|
我使用了mcbsp对AD进行采集,需要把采集的数据放入存储卡,因此采用了乒乓缓存的方式,每采一个数,用DMA搬移到内存,一块内存满后,dma产生中断,改变目的地址,存另一块内存,并且cpu开始往存储卡里存数,因为MCBSP的不停地在采数,那怎么才能保证DMA中断时,数据不丢失(因为现在有丢失的点),因为我要改变目的地址了。手册上说用自动初始化,在DMA搬移的同时检查ENDPROG位,是零的话就可以为下一个块传输配置环境了。
现在我的做法是:
初始化DMA时,先配好第一个块的参数,使用自动初始化,使能dma,结束编程(置位ENDPROG),(这样DMA应该会工作,并把配置寄存器的值复制到工作寄存器,再清零ENDPROG,),然后等待ENDPROG清零,再配置下一个块传输的参数,可是程序执行时,ENDPROG一直都是1,而且DMA不工作,不知道这是为什么,请各位大神们帮忙分析分析。
如果我在初始化中不等待ENDPROG清零,不配置第二个块传输参数,DMA就工作了,但这样会在两个块传输之间丢失几点数据。肿么办?
简而言之就是,怎么用dma把mcbsp源源不断的数据不丢失的搬到乒乓缓存中,以供cpu把数据存到存储卡
|
|