资讯专栏INFORMATION COLUMN

DMA控制器原理详解

moven_j / 1366人阅读

摘要:目录工作原理硬件架构硬件架构通道的作用寄存器出现的目的出现的目的工作原理全拼直接内存存取,在传统的存取数据时会先将数据放到缓存寄存器中然后在写入到指定位置存取数据流程图经历了三个步骤,先将内存中指定位置

目录

工作原理

DMA硬件架构

DMA通道的作用

DMA寄存器

DMA出现的目的


工作原理

DMA全拼Direct Memory Access(直接内存存取),在传统的CPU存取数据时会先将数据放到缓存寄存器中然后在写入到指定位置

CPU存取数据流程图:

CPU经历了三个步骤,先将内存中指定位置上的数据取到数据缓存器中,然后在将数据缓存器中的内容写入到内存中,总共用了三步来完成内存两天不同地址上的数据写入

而使用DMA之后就会变得非常简单,DMA不会放入暂存器,而是直接写入写入内存,你只需要设置好源地址,目标地址,传输量,那么DMA就会开始传输数据,但DMA会占用你设备的总线,也就是这个过程中你无法使用总线,需要进行一个控制权转移,这样虽然传输变快了但是传输期间CPU基本上做不了别的事情,但是有些架构已经为DMA提供了一套自己的总线,在DMA传输过程中CPU依然可以控制外设,这个控制权转移不是一直DMA有效的,为了保证CPU也能正常通过系统总线去控制外设,一般会给DMA一定时间然后控制权在切回CPU,然后CPU处理一段时间在切回DMA直到DMA结束才会停止控制权转移。

DMA硬件架构

以下取自STM32芯片手册中对DMA的框架描述

 

  • 从上图可以看到DMA是一个多带带的控制器,并且它有两个,挂设在AHB总线上,可以看到DMA1 CH1 - CH7也就是可配置的控制通道而DMA2只有5个,CPU通过配置DMA来完成数据传输
  • 可以看到它们不是使用System总线,而是使用了DMA自己的控制总线,所以这个架构会比使用系统总线的架构要快许多,但是功耗要大于使用系统总线的架构

以下是两个DMA控制器的结构图,可以清晰的看到每个通道用于做什么的

 DMA1

DMA2

DMA通道的作用

通道是一个小型的IO控制器,每个通道对应控制不同的外设、Memory,可以通过MCU数据手册里查看你的DMA里的每个通道对应控制的外设。

从上图给出的通道结构图中可以看到每个通道IO都支持Uart、SPI、I2C外设功能,值得注意的是这里外设是有编号的,可以在上图通道中看到,不同的外设由不同的通道程序来控制,如你使用I2C2外设,则需要找到支持I2C2的通道并使用它,其中也可以看到SW trigger (MEM2MEM BIT)这个意思代表支持Memory到Memory之间的通讯,如内部的Sram到Sram,也可以看到上图中有HW request 4 意味着这个通道支持中断通知,意思是当这个通道开始工作时会设置对应寄存器里的值,然后产生中断,我们可以在对应的中断标志寄存器里读到哪个通道产生了中断,以及做了什么事情

如果是对外设进行控制的话记得,如果是内部的Memory到Memory之间传输数据的话可以随便选择一个通道,因为从上图的结构可以看出每个通道IO都支持内部Memory

通道可以理解成一个小型的程序,它是一个简单的IO控制程序,只能处理对应外设之间的数据传输,工作之前需要配置DMA里使用哪个通道,可以选择多个通道,也可以选择一个通道,这些通道是支持同时工作的。

DMA寄存器

 可以看到可以通过上面的通道来配置Uart、SPI、I2C的一些功能,同时看到Internal/Request是内部带有中断功能的,具体如何配置还需要看寄存器功能

寄存器介绍

① 中断类

寄存器名

作用

DMA_ISR

中断状态寄存器

DMA_IFCRDMA中断标志位清除寄存器

② 控制传输类

寄存器名

作用

DMA_CCRxDMA通道x配置寄存器 
DMA_CNDTRx

DMA通道x数据数量寄存器

DMA_CPARxDMA通道x外设地址寄存器
DMA_CMARxDMA通道x内存地址寄存器

需要注意上面的寄存器针对DMA1与DMA2都有对应的一组,它们俩不使用一组寄存器控制

可以简单把DMA理解成CPU的一个传输小帮手,CPU通过告诉DMA该传输哪些数据,然后由DMA去完成传输工作

DMA是一个独立的控制器,内部有小型芯片来控制的,也有自己的一套架构,一般集成在MCU内部与CPU紧密贴合

DMA出现的目的

DMA的出现就是为了解决CPU在处理大量数据传输时的时间耗费成本,在传输大数据时CPU会先放到暂存器中这样的速度会影响效率,速度较慢,同时CPU如果一直忙于传输数据就不能去做别的事情了,所以DMA的诞生解决了这个问题,需要值得注意的是在使用DMA之前要看下架构,DMA是否与CPU使用同一总线,若同一总线的情况下是会影响CPU工作效率而非传输效率

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119147.html

相关文章

  • 操作系统中的IO控制方式详解

    摘要:当输入的时候,设备先将输入的信息放到控制器中的数据寄存器中,等到攒到一定数量或者输入完成后,一次性将数据拿走,提高了的运行效率。设别状态识别控制器会识别设备的工作状态,将工作状态保存到状态寄存器中,供查用。 ...

    Acceml 评论0 收藏0
  • 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    摘要:异步通信与同步通信异步通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。同步通信同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。配置串口设置为异步通信基础参数波特率为。 ...

    yck 评论0 收藏0
  • 基于UCOSII的RS485通信(STM32F107)

    摘要:为了可靠工作,在总线状态切换时需要做适当延时,再进行数据收发。 一、实现效果         基于ucosii实时操作系统的RS485通信,采用USART + DMA进行收发,  二、开发环境 开发工具:KEIL V5开发板: STM32f107RC采用方式:USART + DMA使用系统:...

    verano 评论0 收藏0
  • 【程序员基础必备】计算机组成原理概念大全

    摘要:计算机组成原理是大学中的专业必修课,也是程序员需要掌握的专业知识。所以说计算机组成原理是非常重要的一门课程,本文总结了五十个组原中的重要概念,供大家学习。通道程序通道程序由通道指令组成,他完成某种外围设备与主存传送信息的操作。 计算机组成原理是大学中的专业必修课,也是程序员需要掌握的专业...

    OBKoro1 评论0 收藏0
  • 奈学P7业务架构师

    摘要:是数据平面开发工具包,由用于加速在各种架构上运行的数据包处理的库组成。机制采用提供机制,可以旁路,将所有报文处理的工作在用户空间完成。数据路径为网卡轮询模式基础库业务零拷贝通过实现数据零拷贝是的特点之一。 DPDK(Data Plane Development Kit)是数据平面开发工具包,由用于加速在各种CPU架构上运行...

    xingqiba 评论0 收藏0

发表评论

0条评论

moven_j

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<