玩转STM32-直接存储器DMA(详细-慢工出细活)

一、DMA介绍

1.1 DMA简介

DMA用来提供外设与外设之间、外设与存储器之间、存储器与存储器之间的高速数据传输,无需CPU干预,数据可以通过DMA快速传输,节省CPU的资源。
在实现DMA传输时,由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移的问题,即DMA传输前,CPU把总线控制权交给DMA控制器,在结束DMA传输后,DMA控制器立即把总线控制权交回CPU。
一个完整的DMA传输过程包括DMA请求、DMA响应、DMA传输、DMA结束等4个步骤。
(1)DMA请求:CPU对DMA控制器初始化,并向IO接口发出操作命令,IO接口提出DMA请求。
(2)DMA响应:DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知IO接口开始DMA传输。
(3)DMA传输:DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与IO接口进行DMA传输。在DMA控制器的控制下,CPU只要提供传送数据的起始位置和数据长度,然后存储器和外设之间直接进行数据传输,CPU不参与传送过程。
(4)DMA结束:当完成规定的成批数据传送后,DMA控制器释放总线控制权,并向IO接口发出结束信号。当IO接口收到结束信号后,一方面停止IO设备的工作,另一方面向CPU提出中断请求,CPU响应中断,执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来程序。

1.2 DMA结构

STM32最多拥有两个DMA控制器,DMA1控制器拥有7个独立的可配置通道,DMA2有5个独立的可配置通道,每个通道用来管理来自一个或多个外设对存储器访问的请求。
DMA是AHB总线上的设备,它有2个AHB端口:一个是从端口,用于配置DMA;一个是主端口,用于设备间数据传输。两个AHB/APB桥在AHB和两个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操作速度限于72MHz。STM32F103的DMA结构图如下所示:
来自STM32F103手册
STM32的Cortex-M3核心和DMA控制器通过总线矩阵连接到Flash控制总线、SRAM总线和AHB总线,进而通过AHB总线连接到APB总线服务外设。
总线矩阵有两个主要特征:循环优先调度、多层结构和总线挪用。

  1. 循环优先调度
    NVIC和Cortex-M3处理器实现了高性能低延时中断调度。所有的Cortex-M3指令即可以在单周期内执行,也可以在总线周期上被中断。循环优先级调度能够确保CPU在必要时每两个总线周期就去访问其他总线。
  2. 多层结构和总线挪用
    多层结构允许两个主设备并行执行数据传输。使用总线挪用存取机制,CPU访问和DMA通过APB总线存取外设可以并行工作。DMA总线挪用机制使得总线利用效率更高。

DMA功能的是通过操作两类寄存器实现的:
一类是具有DMA功能的相关外设寄存器,主要来自外设开启DMA功能,例如在通用定时器中的DMA/中断使能寄存器、DMA控制寄存器和连续式的DMA地址寄存器。
另一类是DMA相关寄存器,用来设置DMA的具体工作方式,DMA相关寄存器包括DMA中断状态寄存器(DMA_ISR)、DMA中断标志清除寄存器(DMA_IFCR)等。

二、DMA相关寄存器(了解)

  1. DMA中断状态寄存器——DMA_ISR
    该寄存器保存着DMA中断的状态。
    在这里插入图片描述
    在这里插入图片描述

  2. DMA中断标志清除寄存器——DMA_IFCR
    该寄存器用来清除DMA中断标志。
    在这里插入图片描述

  3. DMA通道x配置寄存器——DMA_CCRx
    该寄存器用来配置DMA工作模式。
    在这里插入图片描述
    在这里插入图片描述

  4. DMA通道x传输数量寄存器——DMA_CNDTRx
    该寄存器用来配置DMA传输数据量。
    在这里插入图片描述

  5. DMA通道x外设地址寄存器——DMA_CPARx
    该寄存器用来配置DMA通道外设地址。
    在这里插入图片描述

  6. DMA通道x存储器地址寄存器——DMA_CMARx
    该寄存器用来配置DMA通道存储器地址。
    在这里插入图片描述

三、DMA的工作过程(掌握)

1. DMA传送
当发生一个事件后,外设发送一个时间请求信号到DMA控制器,DMA控制器根据通道的优先权来处理请求。当DMA控制器开始访问外设时,DMA控制器首先向外设发送一个应答信号;外设得到应答信号后立即撤销请求;外设撤销请求后,DMA控制器同时撤销应答信号。如果载磁发生请求,外设则可以启动下次传送。每个DMA传送由以下3个操作组成;
(1) 从外设数据寄存器或由DMA_CMARx寄存器指定地址的存储单元执行加载操作。(取数据)
(2)存储数据到外设数据寄存器或存数据到DMA_CMARx寄存器指定地址的存储单元。(存储)
(3)执行依次DMA_CNDTRx寄存器的递减操作,该寄存器内容为完成的传输内容数量。
2. 仲裁器
仲裁器根据通道请求的优先级来启动外设/存储器的访问。优先权管理分2个阶段:
(1)软件:每个通道

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值