历史上的今天

今天是:2024年09月12日(星期四)

正在发生

2019年09月12日 | 秉火429笔记之十五 DMA--直接存储区访问

发布者:huanran 来源: eefocus关键字:秉火  DMA  直接存储区访问 手机看文章 扫描二维码
随时随地手机看文章

1. 简介

直接存储器访问 (DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传 输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可 供其它操作使用。


从硬件层次上来说,DMA控制器是独立于Cortex-M4内核的,有点类似GPIO、USART外设一般,只是DMA的功能是可以快速移动内存数据。


STM32F4xx系列的DMA支持外设到存储器传输、存储器到外设传输和存储器到存储器传输三种传输模式。这里的外设一般指外设的数据寄存器,比如ADC、SPI、I2C、DCMI等等外设的数据寄存器,存储器一般是指片内SRAM、外部存储器、片内Flash等等。


外设到存储器传输。比如进行ADC采集时我们可以利用DMA传输把AD转换数据转移到我们定义的存储区中,这样对于多通道采集、采样频率高、连续输出数据的AD采集是非常高效的处理方法。


存储器到存储器传输就是把一个指定的存储区内容拷贝到另一个存储区空间。功能类似于C语言内存拷贝函数memcpy,利用DMA传输可以达到更高的传输效率,特别是DMA传输是不占用CPU的,可以节省很多CPU资源。


2. 功能

DMA 控制器基于复杂的总线矩阵架构,将功能强大的双 AHB 主总线架构与独立的 FIFO 结 合在一起,优化了系统带宽。 


2.1 外设通道

两个DMA控制器,同时外设繁多,为实现正常传输,DMA需要通道选择控制。每个DMA控制器具有8个数据流,每个数据流对应8个外设请求。每个外设请求都占用一个数据流通道,相同外设请求可以占用不同数据流通道。

2.2 仲裁器

简单讲,判别数据流具有优先传输的权利。


仲裁器为两个 AHB 主端口(存储器和外设端口)提供基于请求优先级的 8 个 DMA 数据流请 求管理,并启动外设/存储器访问序列。


优先级管理分为两个阶段:


● 软件:每个数据流优先级都可以在 DMA_SxCR 寄存器中配置。分为四个级别:


— 非常高优先级


— 高优先级


— 中优先级


— 低优先级


● 硬件:如果两个请求具有相同的软件优先级,则编号低的数据流优先于编号高的数据流。例如,数据流 2 的优先级高于数据流 4。


2.3 FIFO

FIFO 用于在源数据传输到目标之前临时存储这些数据。


每个数据流都有一个独立的 4 字 FIFO,阈值级别可由软件配置为 1/4、1/2、3/4 或满。为了使能 FIFO 阈值级别,必须通过将 DMA_SxFCR 寄存器中的 DMDIS 位置 1 来禁止直接 模式。


DMA传输具有FIFO模式和直接模式。


直接模式在每个外设请求都立即启动对存储器传输。在直接模式下,如果DMA配置为存储器到外设传输那DMA会见一个数据存放在FIFO内,如果外设启动DMA传输请求就可以马上将数据传输过去。


FIFO对于要求源地址和目标地址数据宽度不同时非常有用,比如源数据是源源不断的字节数据,而目标地址要求输出字宽度的数据,即在实现数据传输时同时把原来4个8位字节的数据拼凑成一个32位字数据。此时使用FIFO功能先把数据缓存起来,分别根据需要输出数据。


FIFO另外一个作用使用于突发(burst)传输。

2.4 存储器端口和外设端口

DMA控制器实现双AHB主接口,更好利用总线矩阵和并行传输。DMA控制器通过存储器端口和外设端口与存储器和外设进行数据传输。DMA控制器的功能是快速转移内存数据,需要一个连接至源数据地址的端口和一个连接至目标地址的端口。


DMA2(DMA控制器2)的存储器端口和外设端口都是连接到AHB总线矩阵,可以使用AHB总线矩阵功能。DMA2存储器和外设端口可以访问相关的内存地址,包括有内部Flash、内部SRAM、AHB1外设、AHB2外设、APB2外设和外部存储器空间。


DMA1的存储区端口相比DMA2的要减少AHB2外设的访问权,同时DMA1外设端口是没有连接至总线矩阵的,只有连接到APB1外设,所以DMA1不能实现存储器到存储器传输。

2.5 编程接口

AHB从器件编程端口是连接至AHB2外设的。AHB2外设在使用DMA传输时需要相关控制信号


3. DMA数据配置

DMA 传输模式

DMA2支持全部三种传输模式,而DMA1只有外设到存储器和存储器到外设两种模式。


在DMA_SxCR寄存器的PSIZE[1:0]和MSIZE[1:0]位分别指定外设和存储器数据宽度大小,可以指定为字节(8位)、半字(16位)和字(32位),我们可以根据实际情况设置。直接模式要求外设和存储器数据宽度大小一样,实际上在这种模式下DMA数据流直接使用PSIZE,MSIZE不被使用。


源地址和目标地址

DMA数据流x外设地址DMA_SxPAR(x为0~7)寄存器用来指定外设地址,它是一个32位数据有效寄存器。DMA数据流x存储器0地址DMA_SxM0AR(x为0~7) 寄存器和DMA数据流x存储器1地址DMA_SxM1AR(x为0~7) 寄存器用来存放存储器地址,其中DMA_SxM1AR只用于双缓冲模式,DMA_SxM0AR和DMA_SxM1AR都是32位数据有效的。


当选择外设到存储器模式时,即设置DMA_SxCR寄存器的DIR[1:0] 位为“00”,DMA_SxPAR寄存器为外设地址,也是传输的源地址,DMA_SxM0AR寄存器为存储器地址,也是传输的目标地址。对于存储器到存储器传输模式,即设置DIR[1:0] 位为“10”时,采用与外设到存储器模式相同配置。而对于存储器到外设,即设置DIR[1:0]位为“01”时,DMA_SxM0AR寄存器作为为源地址,DMA_SxPAR寄存器作为目标地址。


流控制器

流控制器主要涉及到一个控制DMA传输停止问题。


。DMA传输在DMA_SxCR寄存器的EN位被置1后就进入准备传输状态,如果有外设请求DMA传输就可以进行数据传输。很多情况下,我们明确知道传输数据的数目,比如要传1000个或者2000个数据,这样我们就可以在传输之前设置DMA_SxNDTR寄存器为要传输数目值,DMA控制器在传输完这么多数目数据后就可以控制DMA停止传输。


DMA数据流x数据项数DMA_SxNDTR(x为0~7)寄存器用来记录当前仍需要传输数目,它是一个16位数据有效寄存器,即最大值为65535。这个值在程序设计是非常有用也是需要注意的地方。我们在编程时一般都会明确指定一个传输数量,在完成一次数目传输后DMA_SxNDTR计数值就会自减,当达到零时就说明传输完成。


如果某些情况下在传输之前我们无法确定数据的数目,那DMA就无法自动控制传输停止了,此时需要外设通过硬件通信向DMA控制器发送停止传输信号。这里有一个大前提就是外设必须是可以发出这个停止传输信号,只有SDIO才有这个功能,其他外设不具备此功能


循环模式

循环模式相对应于一次模式。一次模式就是传输一次就停止传输,下一次传输需要手动控制,而循环模式在传输一次后会自动按照相同配置重新传输,周而复始直至被控制停止或传输发生错误。


传输类型

DMA传输类型有单次(Single)传输和突发(Burst)传输。突发传输就是用非常短时间结合非常高数据信号率传输数据,相对正常传输速度,突发传输就是在传输阶段把速度瞬间提高,实现高速传输,在数据传输完成后恢复正常速度,有点类似达到数据块“秒传”效果。为达到这个效果突发传输过程要占用AHB总线,保证要求每个数据项在传输过程不被分割,这样一次性把数据全部传输完才释放AHB总线;而单次传输时必须通过AHB的总线仲裁多次控制才传输完成。


直接模式

默认情况下,DMA工作在直接模式,不使能FIFO阈值级别。


直接模式在每个外设请求都立即启动对存储器传输的单次传输。直接模式要求源地址和目标地址的数据宽度必须一致,所以只有PSIZE控制,而MSIZE值被忽略。突发传输是基于FIFO的所以直接模式不被支持。另外直接模式不能用于存储器到存储器传输(一旦配置存储器到存储器模式,则硬件自动配置为FIFO模式)。


在直接模式下,如果DMA配置为存储器到外设传输那DMA会见一个数据存放在FIFO内,如果外设启动DMA传输请求就可以马上将数据传输过去。


双缓存

设置DMA_SxCR寄存器的DBM位为1可启动双缓冲传输模式,并自动激活循环模式。双缓冲不应用与存储器到存储器的传输。双缓冲模式下,两个存储器地址指针都有效。


双缓冲模式应用在需要解码程序的地方是非常有效的。如MP3


DMA中断


达到半传输:DMA数据传输达到一半时HTIF标志位被置1,如果使能HTIE中断控制位将产生达到半传输中断;


传输完成:DMA数据传输完成时TCIF标志位被置1,如果使能TCIE中断控制位将产生传输完成中断;


传输错误:DMA访问总线发生错误或者在双缓冲模式下试图访问“受限”存储器地址寄存器时TEIF标志位被置1,如果使能TEIE中断控制位将产生传输错误中断;


FIFO错误:发生FIFO下溢或者上溢时FEIF标志位被置1,如果使能FEIE中断控制位将产生FIFO错误中断;


直接模式错误:在外设到存储器的直接模式下,因为存储器总线没得到授权,使得先前数据没有完成被传输到存储器空间上,此时DMEIF标志位被置1,如果使能DMEIE中断控制位将产生直接模式错误中断。


注: 实例见官方ADC DMA例程等


关键字:秉火  DMA  直接存储区访问 引用地址:秉火429笔记之十五 DMA--直接存储区访问

上一篇:秉火429笔记之十四 USART--串口通信
下一篇:秉火429笔记之十二 看门狗

推荐阅读

#include "spi.h"#include "sys.h" //ϵͳ×Óº¯Êý #include "delay.h" //ÑÓʱ×Óº¯Êý#include "MFRC522.h"unsigned char CT[2];//¿¨ÀàÐÍunsigned char SN[4]; //¿¨ºÅunsigned char RFID[16]; //´æ·ÅRFID u8 KEY[6]={0xff,0xff,0xff,0xff,0xff,0xff};void test_rf552(void);in...
深耕于高压集成电路高能效功率转换领域的知名公司Power Integrations宣布其200 V Qspeed™二极管 – LQ10N200CQ和LQ20N200CQ – 现已通过AEC-Q101汽车级认证。Qspeed硅二极管采用混合PIN技术,可在软开关和低反向恢复电荷(Qrr)之间提供独特的平衡。该特性有助于降低EMI和输出噪声,这对于车载音响系统特别重要。 最新通过认证的200 V二极管具有业...
全球前三大DRAM厂都将停止供货华为,台湾存储器业者目前则仍未明确表态后续与华为业务的往来关系。不过,华邦与旺宏高层均不讳言,美国大举封杀华为,确实对公司营运造成短期影响。南亚科、华邦及旺宏等台湾主要存储器芯片厂迄今仍未明确表态停供华为。南亚科日前针对美国扩大对华为禁令,特别公告指出,将在相关法律许可范围内支持客户,尽力符合客户需求...
9月10日,2021世界机器人大会正式开幕。本届大会以“共享新成果,共注新动能”为主题,吸引了110余家企业,500多款产品参展。参会专家表示,预计我国机器人产业全年增速将超过30%。根据智慧芽最新数据显示,全球与“机器人”直接相关的专利申请超170万件,其中约88%为发明专利。以专利数量排名,全球排名前十的申请人分别为三星电子株式会社、应用材料股...

史海拾趣

问答坊 | AI 解惑

pll

PLL,,,ADF4108…

查看全部问答∨

proteus ARES 画PCB视频教程

点击进入下载-proteus_ARES视频教程.rar 附件太大,放在网盘…

查看全部问答∨

sqlce连接失败

代码:    string strConn = "Data Source=" + sDbpath + ";Password=SZTL";    m_Conn = new SqlCeConnection(strConn);    m_Conn.Open(); 异常: 未处理 System.Data.SqlServerCe.SqlCeException & ...…

查看全部问答∨

FPGA 过程块触发

最近看了一篇文章,上面讲在FPGA时,最好要所有过程块都要系统时钟去触发。举个例子:例如数码管动态显示时,选通信号端,一一般频率要大于50HZ,这样人才感觉不到闪烁的效果!如果我用计数器分出50hZ的信号,作为另一个过程块的触发信号!与所有过 ...…

查看全部问答∨

请教cc2510传输距离

请问下怎么确定cc2510传输的距离有多远?求指教…

查看全部问答∨

室友的几本书,谁要?

本帖最后由 ddllxxrr 于 2016-1-7 16:41 编辑 …

查看全部问答∨

ADI设计问答:为什么我精心设计的有源滤波器未能达到其技术指标要求?

回答:这是因为许多有源滤波器软件忽略了“实际的”放大器特性。 最近,我度假去红海潜水。临行之前,我把自己的手机和计算机都留在了家里,并把所有的工作都暂时抛在一边。但是,我却犯了一个愚蠢的错误,那就是用带有"Analog Devices"字样的 ...…

查看全部问答∨

艾曼第四代四代图像处理采集识别检测fpga开发板套件

本帖最后由 ddllxxrr 于 2016-1-7 16:13 编辑 去年淘宝买来做毕业设计,现闲置无用,九成九新,附送所有资料,以及关于视频图像的研究生论文。有意者QQ:471293219! 本站强荐:185娱乐∮城.足球∮真_人.彩票齐全∮手机可投∮注任何游戏. 首次 ...…

查看全部问答∨

2015年全国大学生电子设计竞赛进度安排

国赛就要开始啦!还不清楚国赛具体安排的看看吧 一、第一阶段(3月至5月),报名、征题工作(1) 3月份召开2015年全国大学生电子设计竞赛启动工作会议,并由全国竞赛组委会发出《关于组织2015年全国大学生电子设计竞赛的通知》。(2) 4月上旬各赛区按 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved