系列索引:《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理
目录
DMA的定义及传输要素
DMA的引入——让CPU做更有意义的工作
CPU——经理
数据——物品
外设——销售或采购
存储器——仓库
定义
DMA控制器 —— 仓库保管员
DMA(Direct Memory Access,直接存储器存取),是一种完全由硬件执行数据交换的工作方式。它由DMA控制器而不是CPU来控制在存储器和存储器、存储器和外设之间的批量数据传输。
传输要素
传输源 传输目标 传输数据量 触发信号
DMA的传输过程
DMA请求
CPU初始化DMA控制器,外设(I/O接口)发出DMA请求。
DMA响应
DMA控制器判断DMA请求的优先级及屏蔽,向总线仲裁器提出总线请求。
当CPU执行完当前总线周期时,可释放总线控制权。此时,总线仲裁器输出总线应答,表示DMA已经响应,DMA控制器从CPU接管对总线的控制,并通知外设(I/O接口)开始DMA传输。
DMA传输
DMA数据以规定的传输单位(通常是字)传输,每个单位的数据传送完成后,DMA控制器修改地址,并对传送单位的个数进行计数,继而开始下一个单位数据的传送,如此循环往复,直至达到预先设定的传送单位数量为止。
DMA结束
当规定数量的DMA数据传输完成后,DMA控制器通知外设(I/O接口)停止传输,并向CPU发送一个信号(产生中断或事件)报告DMA数据传输操作结束,同时释放总线控制权。
DMA的优缺点及其适用场景
优点
CPU利用率 数据传输效率 用户软件开发代码
缺点
在一段时间内独占总线
数据传输量过大,会导致中断延时较长,实时性强不适用
适用
高速、成组数据的传输
STM32中DMA的特点
STM32中DMA的优先级机制
仲裁器根据通道请求的优先级来启动外设/存储器的访问。
优先权管理分2个阶段:
● 软件:每个通道的优先权可以在DMA_CCRx寄存器中设置,有4个等级:
─ 最高优先级
─ 高优先级
─ 中等优先级
─ 低优先级
● 硬件:通道编号越小优先级越高,如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优先权。举个例子,通道2优先于通道4。
STM32中DMA的传输模式
STM32微控制器支持循环模式和普通模式两种工作模式,
循环模式用于处理循环缓冲区和连续的数据传输(如ADC的扫描模式)。在DMA_CCRx寄存器中的CIRC位用于开启这一功能。当启动了循环模式,数据传输的数目变为0时,将会自动地被恢复成配置通道时设置的初值,DMA操作将会继续进行。
STM32中DMA的常用初始化过程
初始化参数
DMA的常用库函数(主要在初始化时结构体变量的设置)
DMA_DeInit:将DMAy的通道x的寄存器恢复为复位启动时的默认值。
DMA_Init:根据DMA_InitStruct中指定的参数初始化指定DMA通道的寄存器。
DMA_GetCurrDataCounter:返回当前指定DMA通道剩余的待传输数据数目。
DMA_Cmd:使能或者禁止指定的DMA通道。
DMA_GetFlagStatus:查询指定的DMA通道的标志位状态。
DMA_ClearFlag:清除指定的DMA通道的待处理标志位。
DMA_ITConfig:使能或禁止指定的DMA通道中断。
DMA_GetITStatus:查询指定DMAy的通道x的中断的状态。
DMA_ClearITPendingBit:清除DMAy的通道x的中断挂起位。
评论记录:
回复评论: