目录
前言
DMA,全称Direct Memory Access,即直接存储器访问。
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,把这部分的CPU资源拿出来能够更好的利用CPU的资源。因此转移数据(尤其是转移大量数据)是可以不需要CPU参与。DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作–计算、控制等。
一、DMA简介
1.1DMA功能框图
只需学会使用其中3个部分即可
1.1.1DMA 请求
如果外设要想通过 DMA 来传输数据,必须先给 DMA控制器发送 DMA请求,DMA收 到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答 信号之后,就会启动 DMA 的传输,直到传输完毕。
1.1.2通道
DMA 具有 12 个独立可编程的通道,其中 DMA1 有 7 个通道,DMA2 有 5 个通道,每 个通道对应不同的外设的 DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一 时间只能接收一个,不能同时接收多个。
DMA1:
DMA2:
1.1.3仲裁器
当发生多个 DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁 器也管理。仲裁器管理 DMA 通道请求分为两个阶段。第一阶段属于软件阶段,可以在 DMA_CCRx 寄存器中设置,有 4 个等级:非常高、高、中和低四个优先级。第二阶段属于 硬件阶段,如果两个或以上的 DMA 通道请求设置的优先级一样,则他们优先级取决于通 道编号,编号越低优先权越高,比如通道 0 高于通道 1。在大容量产品和互联型产品中, DMA1 控制器拥有高于 DMA2 控制器的优先级
1.2DMA数据配置
使用 DMA,最核心就是配置要传输的数据,包括数据从哪里来,要到哪里去,传输的 数据的单位是什么,要传多少数据,是一次传输还是循环传输等等
1.2.1数据传输方向:
外设到存储器:
当我们使用从外设到存储器传输时,以 ADC 采集为例。DMA 外设寄存器的地址对应 的就是 ADC 数据寄存器的地址,DMA 存储器的地址就是我们自定义的变量(用来接收存 储 AD 采集的数据)的地址。方向我们设置外设为源地址。
存储器到外设:
当我们使用从存储器到外设传输时,以串口向电脑端发送数据为例。DMA 外设寄存器 的地址对应的就是串口数据寄存器的地址&