一、DMA定义
存储器直接访问(DMA),DMA(Direct Memory Access),是指一种高速的数据传输操作,允许在外部设备和存储器之间利用系统总线直接读写数据,既不通过微处理器,也不需要微处理器干预。
DMA用来提供外设与外设之间、外设与存储器之间、存储器与存储器之间的高速数据传输,无需CPU干预,数据可以通过DMA快速传输,节省CPU的资源。
二、STM32DMA的功能
1、STM32具有7个可配置的独立通道ADC、USART、SPI、I2C、TIM;
2、每个通道都可以硬件请求或者软件触发,这些功能及传输的长度、传输的源地址和目的地址,都可以通过软件设置;
3、7个请求之间的优先权可以通过软件编程设置;
4、每个通道都有3个事件标志,DMA半传输、DMA传输完成、DMA传输出错
5、传输数据的宽度,8位字节、16位半字、32位全字,最大传输数量65536
6、DMA可以在如下区域传输:外设到存储器(I2C或USART获得数据传输到SRAM),SRAM不同区域之间,存储器到外设(将SRAM中预先保存的数据送入DAC产生各种波形),外设到外设(从ADC读取数据后送到TIM1控制其产生不同的PWM占空比);
三、DMA传输的要素和过程
DMA传输的三大要素:
- 传输源:DMA控制器从传输源读出数据;
- 传输目标:数据传输的目标地址
- 触发信号:用于触发一次数据传输的动作,执行一个单位的数据传输。
DMA传输过程的四个步骤:
- DMA请求:CPU对DMAC初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求;
- DMA响应:DMAC对DMA请求判别优先级及屏蔽,向总线仲裁器提出总线请求。CPU执行完当前总线周期即可释放总线控制权。此时总线仲裁器输出总线应答信号,表示DMA已经响应,通过DMA通知I/O接口开始DMA传输。
- DMA传输:DMAC获得总线控制权后,CPU立即挂起或只执行内部操作,由DMAC输出读/写命令,直接控制RAM与I/O接口进行DMA传输。
- DMA结束:当完成规定的数据传输操作后,DMAC释放总线控制权,并向I/O接口发出结束信号。