转自 https://bbs.csdn.net/topics/392159760?page=1
zhouxiangbai的实验结果:
DMA源端:音频模块的数据FIFO
DMA目的端:内存Buffer
DMA传输方式:循环列表链表(linked list)
实验结果:启动DMA传输,DMA在不停的从DMA源取数据(因为是传输方式是循环列表,且在传输过程中没有使能任何传输中断),CPU是可以做其他事情的。
问了一下同事,他解释是:芯片是分时给CPU和DMA的,当分时给哪一方时,哪一方就独占总线,另一方被挂起。至于芯片是不是这么设计的、具体怎么设计的,我们都搞不清楚。但是他这样解释我倒是觉得有道理,可以解释我最初的疑惑
不喝冰的解释:
在STM32中是采用这种方法:
DMA控制器和Cortex™-M3核心共享系统数据总线,执行直接存储器数据传输。当CPU和DMA
同时访问相同的目标(RAM或外设)时, DMA请求会暂停CPU访问系统总线达若干个周期,总线
仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。
DMA技术的出现,使得外围设备可以通过DMA控制器直接访问内存,与此同时,CPU可以继续执行程序.那么DMA控制器与CPU怎样分时使用内存呢?通常采用以下三种方法:(1)停止CPU访内存;(2)周期挪用;(3)DMA与CPU交替访问内存.
总结来说:目前的实验现象说明,在DMA连续传输过程中,CPU可以正常工作,CPU一定以某种方式获得了总线的控制权。CPU和DMA时分复用了总线。