在看STM32框架图时,会发现有几个是和cortex M3 CPU并行的模块
DMA:Direct Memory Access,与内核cortex-M3同级别,属于主设备(Master)。DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
作用:当外设与存储器之间有大量数据传输时,每次都通过CPU来处理,而CPU处理的方式有两种:一是轮询(polling),二是中断(interrupt),这两种都会使CPU不断的处理数据的传输,从而导致其他功能的执行会受影响。从硬件上增加了DMA控制器,来实现外设与内存之间的数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
DMA在控制外设和内存进行数据传送时,被控制的外设设备CPU暂时无法访问,但其它外设不影响,内存也是可以正常访问。
根据官方提供的信息,主要有三种工作方式
1)突发传输,停止CPU访问内存:由DMA控制器发一个停止信号给CPU,要求CPU放弃对连接内存的数据总线的使用权。DMA控制器获得总线控制权以后,开始进行数据传输,知道传输完成后发送完成信息中断,通知CPU。
优点:控制简单,它适用于数据传输率很高的设备进行传输。
缺点:在DMA控制器访内阶段,内存的效能没有充分发挥,相当一部分内存工作周期是空闲的。
2)周期挪用:当外设I/O设备没有DMA请求时,CPU按程序要求访问内存;一旦I/O设备有DMA请求,则由I/O设备挪用一个或几个内存周期。
与停止CPU访内的DMA方法比较,该方法既实现了I/O传送,又较好地发挥了内存和CPU的效率,是一种广泛采用的方法。
3)透明传输模式
DMA与CPU相互配合,交替执行,时分复用。这种DMA传送对CPU来说,如同透明的玻璃一般,没有任何感觉或影响。在透明的DMA方式下工作,CPU既不停止主程序的运行,也不进入等待状态,是一种高效率的工作方式。当然,相应的硬件逻辑也就更加复杂
无论以上哪种都可以看出使用DMA会导致CPU效率降低,所以DMA同时用在高速的外设上。
NVIC:
参考维基百科