资料介绍
第一次接触DMA是在学校学习ARM9裸板程序的时候,想起来都时隔快2年了。现在来看看STM32平台的DMA,一样,在标准外设库的支持下,STM32的DMA编程十分简单,但是既是学习,那还是花点时间看看DMA的相关概念及原理的了解下。
1. DMA简介
DMA是Direct Memory Access的简称,是直接存储器访问的意思。DMA是STM32单片机的外设之一,主要功能是用来搬移数据的。通过DMA搬移数据不需要CPU直接参与控制,也不需要中断处理方式那样保留现场和恢复现场。在传输数据的时候,CPU可以干其他事情。
无使用DMA的数据传输:
使用DMA后的数据传输:
DMA数据传输支持从外设到存储器、存储器到外设、存储器到存储器(这里所讲的存储器可以是SRAM,也可以是FLASH)。DMA控制器包含了DMA1控制器和DMA2控制器,分别由7和5个通道作为数据传输。每个通道专门用来管理来自一个或者多个外设对存储器访问的请求,还有一个仲裁器用于协调各个外设对DMA传输请求的优先权。注意,DMA2只存在于大容量或互联型的STM32单片机中。
2. DMA功能框图
2.1 STM32外设对DMA的请求及通道
请求及通道对应图中的标号1和标号2:STM32外设想要通过DMA来传输数据,需先给DMA控制器发送DMA请求,控制器在收到外设的DMA请求之后会给外设一个应答信号,外设应答且DMA控制器收到外设的应答后,DMA启动传输,直至传输完毕。
为什么需要发出请求,应答和接收应答这几个繁琐的步骤?由图中蓝色框框可以看出,DMA传输和CPU是共用系统总线的,要启动DMA传输的前提是系统总线是空闲的,换句话说是CPU没有占用系统总线,所以启动DMA传输前需要以上几个应答机制,其最底层是DMA控制器和CPU正为系统总线作出协调。DMA1有7个通道,DMA2有5个通道,不同的外设请求要通过对应的DMA通道发给DMA控制器。将不同的外设请求传输至对应的通道,这个是我们在软件编程上设置的。
DMA1开放的通道及对应请求:
DMA2开放的通道及对应请求:
虽然每个通道可以接收多个外设的请求,但是同一时间内只能接收一个。
2.2 仲裁器
仲裁器对应图中的标号3:当DMA控制器的多个通道发生DMA请求时,就需要仲裁器管理响应处理的顺序。仲裁器通过软件和硬件来管理DMA请求:软件指的是我们写的代码,在DMA_CCRx(x指通道号)寄存器中设置,有4个等级,非常高(DMA_Priority_VeryHigh)、高(DMA_Priority_High)、中(DMA_Priority_Medium)和低(DMA_Priority_Low)。硬件则是指若有两个或以上的DMA通道请求设置的优先级一样,则它们的响应顺序取决于通道编号,编号低者优先级高,在有DMA2的STM32中,DMA1控制器拥的响应优先级高于DMA2。
2.3 配置DMA控制器
配置DMA控制器,无非就是下图这几个寄存器:
前面说到,DMA数据传输机制并不需要CPU的参与,但是DMA控制器要正常工作,数据要正确传输,需有三个必要条件:源地址、目的地址和数据大小,对于数据分批传输的情况,数据大小这个条件还包含每次传输的大小及单位。
(1)源地址和目的地址
DMA的传输数据的方向有三个:从外设到存储器、从存储器到外设、从存储器到存储器。DMA_CCR的BIT[4]DIR就是用于配置数据传输方向的:
取值为0表从外设到存储器,取值为1表从存储器到外设。外设地址在DMA_CPAR寄存器配置,存储器地址在DMA_CMAR寄存器配置。
(2)传输数据的大小及单位
以串口向电脑发送数据为例(存储器->外设方向),开发板软件可以一次性给电脑发送大量数据,具体多少在DMA_CNDTR配置:
DMA_CNDTR低16位有效,一次最多只能传输65535个数据。
数据要正确传输,源、目标存储的数据宽度必须一致。串口数据寄存器是8位的,也就是外设数据宽度设置寄存器DMA_CCRx的BIT[9:8]PSIZE取值为0:
存储器的数据宽度设置寄存器DMA_CCRx的BIT[11:10]MSIZE取值也为0:
DMA传输数据,还需要设置源地址上的数据发送指针和目的地址数据存放指针的增量模式。开发板串口向电脑发送数据,假设要发送的数据很多,那么存储器(源地址)上数据发送指针每次发送完毕需要加1,而串口数据寄存器则不需要,因为该寄存器只有一个,数据寄存器上的数据传送到电脑后被清空了(就算不清空,数据直接覆盖也没关系)。外设的地址指针增量模式由DMA_CCRx的PINC配置,存储器的地址指针则由MINC配置。
(3)传输结束
DMA中断状态寄存器DMA_ISR可以设置每个DMA通道传输过半、传输完成和传输错误示产生对应标志,
在DMA_CCRx位1、2、3可以设置发生传输过半、传输完成和传输错误时产生中断:
另外补充一点,位0用于使能DMA传输
传输完成分两种模式:一次传输和循环传输,一次传输指传输一次后就停止,要再传输需要关闭DMA使能后重新配置后才能继续传输。循环传输则是一次传输完成后又恢复第一次传输时的配置循环传输,如此循环。设置位在DMA_CCRx寄存器的CIRC。
3. DMA功能模块描述结构体
标准库的一贯风格,在stm32f10x_dma.h文件中定于可DMA_InitTypeDef初始化结构体,DMA_Init()函数定义在stm32f10x_dma.c中。
(1)DMA_PeripheralBaseAddr:外设地址,若是存储器到存储器模式,此成员设置为其中一个存储器的地址,否则设置为外设的地址。
(2)DMA_MemoryBaseAddr:存储器地址,一般设置为程序中存放数据的容器(数组)的首地址。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- S参数的概念及应用 0次下载
- 带通滤波器的概念及相关介绍 4次下载
- HDMI模块接口概念及接口信号定义介绍 0次下载
- 多个DMA通道和PCIe接口IP核资料下载 6次下载
- 移动基站天线有关概念及选型原则 15次下载
- ARM Cortex-M3 MCU 的 I2C DMA操作和中断资料下载
- 两种总线数据两种传递形式:PIO、DMA介绍资料下载
- STM32串口DMA容易忽视的问题资料下载
- 电感基本概念资料下载
- 阻抗控制相关的一些基本概念资料下载
- ARM Architecture, Core, CPU,SOC概念简明介绍资料下载
- STM32实现用DMA完成多通道AD采样资料下载
- 嵌入式Linux开发教程之嵌入式系统介绍资料免费下载
- 基于RF射频知识基本概念及DTD无线产品介绍 8次下载
- 电子商务相关概念及理论,下载 0次下载
- 相位噪声的概念及其应用 819次阅读
- 以太网网线相关的概念及其区别 1752次阅读
- 电源核相的概念及意义 4447次阅读
- STM8L051F3的DMA相关知识 1425次阅读
- 动力电池各种概念及原理剖析 2820次阅读
- Depass与Decoupling的概念及比较 1881次阅读
- 详解MMU相关概念及工作原理 7167次阅读
- 共模瞬变抗扰度(CMTI)详细概念及其在系统中的重要性 1.7w次阅读
- 流量计测量和计算中常用的物性技术参数和计算公式的详细资料免费下载 4582次阅读
- 教你如何提高LED的发光效率 2.5w次阅读
- 车联网基本概念及其实现 1.2w次阅读
- 晶圆尺寸的概念_晶圆尺寸越大越好吗 14.5w次阅读
- 异步传输是什么_异步传输概念及工作原理 1.8w次阅读
- 太赫兹成像技术概念及原理解析_太赫兹波特征及应用 3.1w次阅读
- dma控制器芯片8257资料介绍 1.6w次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多