使用 DMA 控制器指南

使用 DMA 控制器指南
使用 DMA 控制器指南

AN2548

应用笔记

使用STM32F101xx和STM32F103xx

DMA控制器

1 前言

这篇应用笔记描述了怎么使用STM32F101xx 和 STM32F103xx的直接存储器访问(DMA)控制

器。STM32F101xx和STM32F103xx的DMA控制器、Cortex TM-M3内核、高级微控制器总线架

构(AMBA)总线和存储器系统,使得STM32具有高的数据带宽,并能使用户开发出低延迟、快响

应的软件。

这篇文档也描述了怎样充分利用这些特性,以及对于不同的外设和子系统怎样保证正确的响应

时间。

在下文中STM32F101xx和STM32F103xx都记作STM32F10xxx,DMA控制器都记作DMA。

译注:

本应用笔记配套例程下载地址:

https://www.360docs.net/doc/ac15098048.html,/stonline/products/support/micro/files/an2548.zip

本译文的英文版下载地址为:

https://www.360docs.net/doc/ac15098048.html,/stonline/products/literature/an/13529.pdf

目录

1前言1

2DMA控制器3

2.1DMA的主要特性3

3性能分析5

3.1轮询优先级方案5

3.2多层结构和总线挪用5

3.3DMA延迟6

3.4数据总线带宽限制6

3.5通道优先级选择7

3.5.1应用需求7

3.5.2内部数据带宽8

4DMA编程示例9

4.1使用SPI传输获得ADC连续采样的数据9

4.2SPI直接传输实现ADC连续数据的获取9

4.3使用DMA实现GPIO快速数据传输9

2/9

参照2007年12月 AN2548 英文第2版

2 DMA控制器

DMA是AMBA的先进高性能总线(AHB)上的设备,它有2个AHB端口:一个是从端口,用于配置

DMA,另一个是主端口,使得DMA可以在不同的从设备之间传输数据。

DMA的作用是在没有Cortex-M3核心的干预下,在后台完成数据传输。在传输数据的过程中,

主处理器可以执行其它任务,只有在整个数据块传输结束后,需要处理这些数据时才会中断主

处理器的操作。它可以在对系统性能产生较小影响的情况下,实现大量数据的传输。

DMA主要用来为不同的外设模块实现集中的数据缓冲存储区(通常在系统的SRAM中)。与分布式

的解决方法(每个外设需要实现自己的数据存储)相比,这种解决方法无论在芯片使用面积还是功

耗方面都要更胜一筹。

STM32F10XXX的DMA控制器充分利用了Cortex-M3哈佛架构和多层总线系统的优势,达到非常

低的DMA数据传输延时和CPU响应中断延迟。

2.1 DMA的主要特性

DMA具有以下的特性:

● 7个DMA通道(通道1至7)支持单向的从源端到目标端的数据传输

● 硬件DMA通道优先级和可编程的软件DMA通道优先级

● 支持存储器到存储器、存储器到外设、外设到存储器、外设到外设的数据传输(存储器可以

是SRAM或者闪存)

● 能够对硬件/软件传输进行控制

● 传输时自动增加存储器和外设指针

● 可编程传输数据字长度

● 自动的总线错误管理

● 循环模式/非循环模式

● 可传输高达65536个数据字

DMA旨在为所有外设提供相对较大的数据缓冲区,这些缓冲区一般位于系统的SRAM中。

每一个通道在特定的时间里分配给唯一的外设,连接到同一个DMA通道的外设(表1中的通道1到

通道7)不能够同时使用DMA功能。

支持DMA的外设如表1所示,DMA服务的外设和总线系统结构也在图1中所示。

表1DMA服务的外设和DMA通道分配

外设模块通道1 通道2 通道3 通道4 通道5 通道6 通道7 ADC

ADC1

ADC1

SPI

SPI1 SPI1_RX

SPI1_TX

SPI2 SPI2_RX

SPI2_TX

USART USART1 USART1_TX USART1_RX

USART2 USART2_TX

USART2_RX USART3 USART3_TX USART3_RX

I2C I2C1 I2C1_TX

I2C1_RX I2C2 I2C2_TX

I2C2_RX

TIM TIM1 TIM1_CH1TIM1_CH2TIM1_CH4

TIM1_TRIG

TIM1_COM

TIM1_UP TIM1_CH3

TIM2

TIM2_CH3

TIM2_UP TIM2_CH1 TIM2_CH2 TIM2_CH4

TIM3 TIM3_CH3TIM3_CH4

TIM3_UP

TIM3_CH1

TIM3_TRIG

TIM4 TIM4_CH1 TIM4_CH2TIM4_CH3 TIM4_UP

图1总线结构和支持DMA的外设

3 性能分析

STM32F10xxx有两个主模块——Cortex-M3处理器和DMA。他们通过总线矩阵连接到从总线、闪存总线、SRAM总线和AHB系统总线。从总线的另一端连接到两个APB总线,以服务所有的

嵌入的外设(参见图1)。

总线矩阵有两个主要的特性,实现系统性能的最大化和减少延时:

● 轮询优先级方案

● 多层结构和总线挪用

3.1 轮询优先级方案

NVIC和Cortex-M3处理器实现了高性能低延时中断方案。所有的Cortex-M3指令都或者是单周期执行指令,或者可以在总线周期级上被中断。为了在系统层面上保持这个优点,DMA和总线矩

阵必须确保DMA不能够长时间占用总线。轮询优先级方案能够确保,如有必要,CPU能够每两个总线周期就去访问其它从总线。因此,在CPU看来第一个数据的最大总线系统延时,就是一

个总线周期(最大两个APB时钟周期)。

3.2 多层结构和总线挪用

多层结构允许两个主设备同时执行数据传输,只要他们寻址到不同的从模块。在Cortex-M3哈佛架构基础上,这种多层结构提高了数据的并行性,因此减少了代码执行时间并且优化了DMA效率。由于从Flash存储器取指是通过完全独立的总线,所以DMA和CPU只是在需要通过同一个从总线进行数据访问时才会产生竞争。

另外,在其它DMA控制器工作于突发模式时,STM32F10xxx的DMA数据传输只使用单个总线

周期(总线挪用)。使用总线挪用存取机制时,CPU进行数据访问所等待的最大时间是很短的(一

个总线周期) 。通常,CPU对SRAM的访问是与DMA操作交替地进行,CPU访问SRAM的同时

DMA就在通过APB总线访问外设。尽管使用DMA的突发模式可以提高(DMA访问外设)数据传输速度,但不可避免地是CPU的执行速度被拖慢。下图显示了总线挪用和突发机制的区别。

图2DMA传输的总线挪用机制和突发机制

极端的情况发生在CPU从内存的一个地方复制一块数据到内存中的另一个地方。这种情况下,

软件的执行须等到整个DMA传输完毕才能进行。实际上,CPU大部分时间是在做数据处理(寄存器的读/写),比较少地进行数据访问,因此CPU和DMA对数据的存取还算是交替进行着。

STM32F10xxx总线结构固有的并行性,加上DMA总线挪用机制,保证了CPU不会长时间地等待从SRAM中读取数据。采用总线挪用机制的DMA因此能够更高效地使用总线,从而显著地减少

了软件执行的时间。

3.3 DMA延迟

DMA完成从外设到SRAM存储器的数据传输有三个步骤:

1. DMA请求仲裁

2. 从外设中读取数据(DMA源)

3. 将读取的数据写入到SRAM中(DMA目标)

当DMA把数据从内存中传输到外设(例如SPI传送),操作步骤如下:

1. DMA请求仲裁

2. 从SRAM中读取数据(DMA源)

3. 将读取到的数据通过APB总线写入到外设中(DMA目标)

服务每个DMA通道的总时间,

t S = t A + t ACC + t SRAM

这里,

t A是仲裁时间

t A = 1个AHB时钟周期

t ACC是访问外设时间

t ACC = 1个AHB时钟周期(总线矩阵仲裁)

2个APB时钟周期(实际的数据传输)

+

1个AHB时钟周期(总线同步)

+

t SRAM是读写SRAM的时间

t SRAM = 1个AHB时钟周期(总线矩阵仲裁)

1个AHB时钟周期(单一的读/写操作)

+

或者 + 2个AHB时钟周期(先读SRAM再写SRAM的情况)

当DMA通道空闲或者是前一个DMA通道的第3步操作完成后,DMA控制器比较所有挂起的DMA 请求的优先级(先比较软件优先级;软件优先级相同时,再比较硬件优先级),高优先级的通道将会被服务,DMA开始执行第2步操作。当一个通道正在服务时(第2、3步操作正在进行),没有其他的通道能够被服务,不管它的优先级如何。

当至少同时使能了两个DMA通道时,最高优先级通道的DMA延迟时间为正在传输的时间(不包括仲裁阶段),加上下个将被服务的DMA通道(挂起优先级最高的通道)数据传输的时间。

3.4 数据总线带宽限制

数据总线带宽限制主要是因为APB总线比系统SRAM和AHB总线速度慢。对于最高优先级的DMA通道,必须考虑以下两种情况:(参见图3)

1. 当不止一个DMA通道被使能时,最高优先级的通道在APB总线上占用的数据带宽必须低

于APB最高传输率的25%。APB总线传输的所有时间必须考虑在内,即2个APB时钟周期

加上用来仲裁/同步的2个AHB时钟周期。

2. 尽管高速/高优先级DMA传输通常发生在APB2上(更快的APB总线),但是CPU和其他

DMA通道可以访问APB1上的外设。大约3/4的APB传输是在APB1上完成的,最小的

APB2频率依赖于最快的DMA通道数据带宽。

最大的APB时钟分频因子由下列的等式给出:

f AHB > (2 x N2 + 6 x N1 + 6) x B max

如果

N2 < N1则 N1 < (f AHB/ B max)/8

其中f AHB是AHB时钟频率

N1和N2分别是APB1和APB2的时钟分频因子

B max是APB2上的最大数据带宽,单位为传输次数/秒。

图3DMA传输过程中APB总线的占用情况

注:DMA1是最高优先级通道

3.5 通道优先级选择

为了实现外设数据的连续传输,相关的DMA通道必须能够维持外设数据传输率,确保DMA服务的延迟时间少于连续两个外设数据的时间间隔。

高速/高带宽外设必须拥有最高的DMA优先级,这确保了最大的数据延迟对于这些外设都是可以忍受的,而且可以避免溢出和下溢的情况。

在相同带宽需求的情况下,推荐给工作在从模式下(不能对数据传输速度进行控制)的外设分配较高的优先级,工作在主模式(能够控制数据流)下的外设分配相对低的优先级。

默认情况下,通道和硬件优先级(从1到7)的分配,是按照最快的外设分配最高优先级的顺序来分配的。当然,在某些运用场合下也许这种分配并不适用;此时,用户可以为每一个通道配置软

件优先级(分4种,从非常高到低),软件优先级优先于硬件优先级。

当同时使用几个外设(不管有没有使用DMA)时,用户必须确保内部系统能够维持应用所要求的

总数据带宽,必须权衡以下两个因素,找到一个折中方案:

● 每个外设的应用需求

● 内部数据带宽

3.5.1 应用需求

以SPI接口为例,SPI接口数据带宽是通过波特率除以SPI的数据字长度而得到的(因为数据是一

个紧接着下一个传输的)。假设SPI的波特率是18Mbps,数据是以8位传输的,操作配置在单工

模式下,因此,内部数据带宽需求是2.25M传输/秒;如果SPI配置为16位模式,则数据带宽将是

1.125M传输/秒。

注意:当使用SPI的16位模式时,同样波特率下,数据带宽除以2,即只需要1.125M/秒的传输。

强烈推荐,尽可能地使用16位模式,以减少总线占用和功耗。

3.5.2 内部数据带宽

内部数据带宽依赖于以下两个条件:

● 总线频率

─可获得的数据带宽与总线时钟频率是成正比的

● 总线类型

─ AHB数据传输需要2个时钟周期(SRAM先写后读访问需要3个周期)。数据通过APB总线传输给外设需要花费2个APB时钟周期加上两个AHB时钟周期用来做总线仲裁和数据

同步。

推荐DMA对总线的占用保持在2/3以下,这样才能保证一个合理的系统和CPU的性能水平。

AN2867 DMA编程示例

4 DMA编程示例

所有的示例都使用STM32F10xxx固件库,可以参考与该应用手册相关的固件。这些都可以在ST 网站上下载,网址为https://www.360docs.net/doc/ac15098048.html,。

4.1 使用SPI传输获得ADC连续采样的数据

ADC配置为连续转换模式,该模式下,它以最大速度对一个输入通道进行连续转换。AHB总线

频率设置为56MHz,ADC预分频为4,采样时间为13.5个ADC时钟周期。通过DMA通道1传输采样值到位于系统RAM中的缓冲区,则通道1的数据带宽为每秒0.54M次传输。

当ADC转换后的数据填充了缓冲区的一半后,软件计算出最大值并且对其数字归一化(最大值设置为0xFF),ADC转换的结果通过SPI接口传输到外部。

ADC转换结果是通过SPI1接口来传输的,使用DMA通道3把数据从SRAM缓冲区中传输到SPI1

的数据寄存器。要达到最大的DMA传输速度0.875M/秒,SPI1接口配置为16位主传输模式和

14Mbps的传输速度。

可是,当SPI1工作在主模式,SPI1有效的数据传输速度受数据的可用速率1M/S的限制时,优先级的配置如下:

● 通道1(ADC):非常高(VeryHigh)

● 通道3(SPI1_TX):高(High)

4.2 SPI直接传输实现ADC连续数据的获取

这个例子完成的功能和前面一个几乎相同,只是没有数据的标准化。CPU内部并没有处理这些

数据,直接把ADC转换结果传输到SPI数据寄存器可以减少一半的总线占用。

因此,仅使用DMA 通道1,该通道的目标存储器地址设置为SPI数据寄存器,而不需要SRAM缓冲。

4.3 使用DMA实现GPIO快速数据传输

这个例子示范了如何将不同的外设用于DMA请求和数据传输,这个机制允许在没有使用CPU的情况下实现简单的快速并行同步接口。

定时器3和连接到TIM3_TRIG 的DMA通道6,用来实现获取数据的接口。在GPIO的端口上可以获取16位并行数据。一个外部时钟信号作用在定时器3的外部触发器输入端,在外部触发器上升沿,定时器产生一个DMA请求。由于GPIO数据寄存器地址已设置到DMA通道6的外设地址,

DMA控制器在每一次DMA请求时从GPIO端口读取数据,并把它存储到SRAM的缓冲器中。

10 DMA控制器

复习思考题 第章DMA控制器 1.试说明在DMA方式时内存往外设传输数据的过程。 2.对一个DMA控制器的初始化工作包括哪些内容? 3.DMA控制器8237A什么时候作为主模块工作?什么时候作为从模块工作?在这两种情况下,各控制信号处于什么状态? 4.8237A有哪几种工作方式?各自用在什么场合? 5.什么叫DMA控制器的自动预置功能?这种功能是用得很普遍的,举一个例子说明它的使用场合。 6.用DMA控制器进行内存到内存的传输时,有什么特点? 7.DMA控制器8237A是怎样进行优先级管理的? 8.设计8237A的初始化程序。8237A的端口地址为0000-000FH,设通道0工作在块传输模式,地址加1变化,自动预置功能;通道1工作于单字节读传输,地址减1变化,无自动预置功能;通道2、通道3和通道1工作于相同方式。然后对8237A设控制命令,使DACK 为高电平有效,DREQ为低电平有效,用固定优先级方式,并启动8237A工作。9.CPU对DMA控制器的总线请求响应要比对中断请求响应快,请分析其原因。10.8237A在进行单字节方式DMA传输和块方式DMA传输时,有什么区别? 11.什么是DMA传送?DMA传送与中断方式传送的基本区别是什么? 12.8237A在实行存储器与存储器之间传输时,与存储器和外设之间的传输有什么不同?13.8237A采用压缩时序方式,试估算在最好情况下传送10KB数据需要多少时间?再试用最高效的程序衽同样数量数据的传输,大约要多少时间?(时钟都以5MHz算) 14.8237A为了在16位以上的微机系统中应用,必须设计适当的页面地址寄存器。如个人计算机中那样设计,请问: (1)如何知道什么时候该换页?如何换页? (2) 换页时应对DMA控制器作什么处理? (3) 如果通道0也需要页面地址,如何获得RA、RB的控制信号? 15.在个人计算机中8237A的通道2为什么设置成单字节传送?如果用成块传送会发生什么问题?如何解决? 16.ADSTB信号与AEN有什么不同?它们各自起什么作用? 17.一个系统需要接6个用DMA控制的外设,如何用8237A实现这个系统的连接,请画出连接图,并说明方式控制字应如何设置。如用固定优先级请列出你所设计方案中6个设备的优先级排列。 18.用简化框图形式表示一个DMA系统的基本构成,请标明DMA控制器与CPU、系统总线及外设连接的关键信号。 19.8237A上设有一个READY控制端以适应慢速存储器或外设的需要,这是否与DMA的快速传送宗旨相违背?为什么? 20.DMA操作过程中,DMA控制器将代替CPU控制系统总路线,根据它的这一任务,请列出DMA控制器必须具有的几项功能。 21.单字节传送、成组传送与请示传送三种DMA方式在传送方式、DMA请示方面有什么差别? 22.图中是一个DMA系统框图,DMA控制器是个可编程器件,外设也由一个可编程接口电路控制。请在各框图间连上必要的线,并标明它胶的名称。(附图6-55)

stm32DMA控制器的介绍

DMA简介(1) DMA,全称为:Direct Memory Access(即直接存储器访问),DMA 用来提供在外设和存储器之间、存储器和存储器之间的高速数据传输。当CPU 初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。DMA传输对于高效能嵌入式系统算法和网络是很重要的,因为DMA 传输方式无需CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,而是直接通过硬件为RAM 与I/O 设备开辟一条直接传送数据的通路,能使CPU 的效率大为提高。 STM32 最多有2 个DMA 控制器(DMA2 仅存在大容量产品中),DMA1 有7 个通道(如上图所示),DMA2 有5个通道。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。例如,在通道1 上有以下几个DMA请求:ADC1、TIM2_CH3、TIM4_CH1。 由上可知,每一条独立的DMA通道都对应着若干个可以产生DMA请求的置外设,这些DMA请求信号通过逻辑或后输出到对应的DMA通道上,如通道1就是由ADC1、TIM2_CH3和TIM4_CH1产生的DMA 请求信号通过逻辑或后输出到通道1上,所以每一条通道任意一个时刻只能输出一个DMA请求(由于逻辑或是只要有一个请求信号便会输出到通道上,意味着在出现两个或以上的DMA请求信号的情况下无法分别到底是哪个外设的请求,因此,我们在使用某一条通道时,应尽可能做到只有一个外设的DMA请求或者时分复用)。 仲裁器是用来协调各个DMA 通道的优先级(这里我们所说的优先级指的是DMA通道的优先级,而不是来自外设的DMA请求的优先级)。然后,再由仲裁器根据优先级来处理各个通道的 从外设(TIMx、ADC、SPIx、I2Cx 和USARTx)产生的DMA 请求,通过逻辑或输入到DMA 控制器,这就意味着同时只能有一个请求有效(从7个通道输出的请求信号只有一个有效)。外设的DMA 请求可以通过设置相应的外设寄存器中的控制位,被独立地开启或关闭。下表是DMA1 各通道一览表:

10 DMA控制器

1.试说明在DMA方式时内存往外设传输数据的过程。 答:当一个接口要由内存往其输出数据时,就往DMA 控制器发一个DMA 请求;DMA 控制器接到请求以后,便往控制总线上发一个总线请求;若CPU 允许让出总线便发出一个总线允许信号;DMA 控制器接到此信号后,就将地址寄存器的内容送到地址总线上,同时往接口发一个DMA 回答信号并发一个I/O 写信号和一个内存读信号;内存接到读信号后将数据送到数据总线,I/O 写信号将数据送到接口,并撤除DMA 请求信号,于是DMA 控制器的地址寄存器的内容加1 或减1,计数器的值减1,而且撤除总线请求信号,就完成了对一个数据的DMA 输出传输。 2.对一个DMA控制器的初始化工作包括哪些内容? 答:①将数据传输缓冲区的起始地址或者结束地址送到地址寄存器中; ②将传输的字节数或字数送到计数器中。 ③通过模式寄存器设置工作方式等。 3.DMA控制器8237A什么时候作为主模块工作?什么时候作为从模块工作?在这两种情况下,各控制信号处于什么状态? 答:1.在外设向8237A 发DMA 请求,8237A 向CPU 发总线请求得到CPU 总线允许时,获得了总线控制权就作为总线主模块工作。2.当CPU 把数据送到8237A 的寄存器或者从8237A 的寄存器取出时,8237A 就象I/O接口一样作为总线的从模块工作。3.主模块工作时的控制信号:DREQx 有效,HRQ 高,HLDA 高,DACKx 有效,AEN高,IOR、MEMW 或IOW、MEMR有效,16位地址送地址总线。从模块工作时的控制信号:CS和HRQ为低,A3 ~A0 为某一确定值,IOR或IOW有效。

微机原理 第10章 DMA控制器8237A 习题及参考

第十章DMA控制器8237A 1.试说明在DMA方式下,传输单个数据的全过程。 答:内存往外设传输单个数据: (1)当一个接口准备就绪,要进行DMA传输时,该接口往DMA 控制器发一个DMA请求; (2)DMA控制器采样到DRED有效电平后,若屏蔽寄存器是开放的,便往控制总线上发一个总线保持请求; (3)若CPU允许让出总线,则发回一个总线保持允许信号;(4)DMA控制器接到此信号后,就将其内部地址寄存器的内容送到地址总线上; (5)同时,DMA控制器往接口发一个DMA回答信号,并发出一个内存读信号和一个I/O写信号; (6)接口收到DMA回答信号后,撤除DMA请求信号,且内存把数据送到数据总线上; (7)接口锁存数据总线上的数据后,一般往DMA控制器回送一个准备好信号; (8)DMA控制器的地址寄存器内容加1或减1,字节计数器的值减1; (9)DMA控制器撤除总线保持请求信号,CPU收回总线控制权。这样,就完成了对一个数据的DMA输出过程。 外设往内存传输单个数据的过程: (1)当一个接口中有数据要输入时,就往DMA控制器发一个DMA 请求信号; (2)DMA控制器接到DMA请求后,(若屏蔽触发器是开放的)便往控制总线上发一个总线保持请求信号; (3)若CPU允许让出总线,则发回一个总线保持允许信号;(4)DMA控制器接到此信号后,就将其内部地址寄存器的内容送到

地址总线上; (5)同时,DMA控制器往接口发一个DMA回答信号,并发一个I /O读信号和一个内存写信号; (6)接口收到DMA回答信号后,撤除DMA请求信号,并将数据送到数据总线上; (7)内存在收到数据后,一般往DMA控制器回送一个准备好信号;(8)DMA控制器的地址寄存器内容加1或减1,字节计数器的值减1; (9)DMA控制器撤除总线保持请求信号,CPU收回总线控制权。这样,就完成了对一个数据的DMA输入过程。 2.为使DMA控制器正常工作,系统对DMA控制器进行初始化的过程分为哪两个主要方面? 答: (1) 将数据传输缓冲区的起始地址或结束地址送到地址寄存器中; (2) 将传输的字节数或字数送到计数器中。 3.8237A什么时候作为主模块工作?什么时候作为从模块工作?在这两种情况下,各控制信号处于什么状态? 答:当DMA控制器得到总线控制权,可以控制系统总线时,便成为总线主模块;当DMA控制器接受CPU对它的读写操作时,便成了总线从模块。 作总线主模块时:它会往总线上提供要访问的内存地址,地址的低八位放在A0 ~ A7上,地址的高八位放在DB0~DB7上,此时,AEN信号为有效的高电平,存储器读和I/O写有效,或者存储器写和I/O读有效。 作总线从模块时:8237A接收16位地址,用较高的12位地址产生片选信号,据此判断本片是否被选中,用低4位地址来选择内部寄存器。片选信号为有效的低电平,HRQ和AEN都为无效的低电平,I/O读

嵌入式音频处理器中DMA控制器的设计

中图分类号:TP332文献标识码:A文章编号:1009-2552(2011)03-0042-05 嵌入式音频处理器中DMA控制器的设计 王俊,应忍冬 (上海交通大学电子工程系,上海200240) 摘要:高性能的DMA控制器是音视频等多媒体处理器的重要组成部分。通过分析DMA控制器在嵌入式音频处理HiPAP中担负的数据传输任务及数据特点,设计了面向AMBA AHB总线的双通道高性能的DMA控制器。在FPGA平台上的实际运行结果显示,该DMA控制器的数据传输性能比使用CPU至少提升了45%。 关键词:DMA;控制器;AHB Design of DMA controller in embedded audio processor WANG Jun,YING Ren-dong (Department of Electronic Engineering,Shanghai Jiaotong University,Shanghai200240,China) Abstract:High-performance DMA controller is the key component in multimedia processor.After the analysis for data transfer in embedded audio processor HiPAP,an AHB supported2-channel audio DMA controller is proposed in this paper.Compared with CPU,the performance of data transfer is improved by up to45%on FPGA platform. Key words:DMA;controller;AHB 0引言 对于多媒体处理而言,使用ASIC(Application Specific Integrated Circuit)编解码IP(Intellectual Property)能够高速同时低功耗地完成编解码任务,但是它们不能被修改,当音视频标准或者协议升级时,必须开发新的IP。而使用配备专用加速指令的音视频处理器,则只需要更新固件就可以完成新的任务,由于这些处理器有着很好的灵活性,因此发展非常迅速[1]。近年来,各大公司都推出了针对音频编解码的音频处理器,比如,Tensilica公司的DIA-MOND330HiFi以及ARM公司的AudioDE等。 随着处理器性能的提高,系统各模块间的数据交换成为提高系统运行速度的瓶颈[2]。使用DMA (Direct Memory Access)方式能够有效代替CPU的load/store指令。在DMA方式下,CPU只需要在数据传输之前对DMA控制器(Direct Memory Access Controller)进行少量的初始化操作,之后CPU就无需介入数据传输过程,可以和DMA并发的工作。这样,CPU的利用率得到了大幅提升[3]。 面对嵌入式音频处理器的数据传输需求,传统的通用DMA控制器并不能很好的满足。本文介绍了音频处理器HiPAP(High Performance Audio Pro-cessor)中双通道音频DMA控制器的设计与实现。1系统架构与数据传输需求 1.1音频处理器的数据传输需求 在一个包含音频处理器芯片的SoC系统中,音频处理器负责诸如编解码之类的音频处理。除此之外,系统一般还拥有负责全局控制的主处理器,通用DMA控制器和存储器等的各种外设以及连接所有模块的总线。在音频处理器的运行过程中,涉及处理器控制的数据传输可按照其特点分为两类:第一类,大数据量、较低实时性的传输。这包括在音频处理器处理前将原始码流载入音频处理器的本地存储器内,以及在处理完成后将输出数据传输至主存或者音频DAC。 收稿日期:2010-09-16 作者简介:王俊(1985-),男,硕士研究生,主要研究方向为集成电路芯片设计与验证。 — 24 —

DMA控制器定计数器

第一讲: 第六章DMA控制器和定时/计数器 回顾:微型计算机与外部设备之间的数据传送控制方式 本讲重点:DMA的基本概念,DMA 控制器芯片8237的性能概述,内、外部结构,工作周期,工作方式,通道的优先级及数据传输速率。 讲授内容: 6. 1 DMA控制器Intel8237 一、DMA概述 我们已经介绍了微机系统中各种常用的数据输入输出方法,有程控法(包括无条件及条件传送方式)和中断法,这些方法适用于CPU与慢速及中速外设之间的数据交换。但当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,就在一定程度上限制了数据传送的速率。以Intel8088CPU为例,CPU从内存(或外设)读数据到累加器,然后再写到外设端口(或内存)中,若包括修改内存地址,判断数据块是否传送完,Intel8088CPU(时钟接近5MHz)传送一个字节约需要几十微秒的时间,由此可大致估计出用程控及中断的方式来进行数据传送,其数据传送速率大约为每秒几十KB字节。 为了提高数据传送的速率,人们提出了直接存储器存取(DMA)的数据传送控制方式,即在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送。 典型的DMAC的工作电路如图6-1。DMA数据传送的工作过程大致如下: ①外设向DMAC发出DMA 传送请求。 ②DMAC通过连接到CPU 的HOLD信号向CPU提出DMA 请求。 ③CPU在完成当前总线操作 后会立即对DMA请求做出响 应。CPU的响应包括两个方面: 一方面,CPU将控制总线、数据 总线和地址总线浮空,即放弃对 这些总线的控制权;另一方面, CPU将有效的HLDA信号加到 图6-1 DMAC的工作电路 DMAC上,用此来通知DMAC,

DSP的DMA控制器与ARM的DMA控制器比较

DSP的DMA控制器与ARM的DMA控制器比较 分类:技术相关总结2009-10-17 15:18 1836人阅读评论(0) 收藏举报 工作任务c 去年,曾经使用过TI的DSP,TMS320VC5502(属于TMS320C5000系列),用过了它的DMA 功能,前段时间,又使用了STM32的DMA。现总结它们主要的区别: DSP的DMA传输的数据可以细分,一个总的传输块(BLOCK)里面,又可以分若干个帧(FRAME),每传完一帧都可以开启中断。而且在整个DMA传输期间,不管是循环模式或者是其他一次性的模式,都可以中途暂停,因为它的DMA控制器可以记录当前暂停时的传输大小,和传输地址索引,然后下次再次开启的时候,会紧接着上次中断后的地方来传输。而STM32的DMA就显得功能没那么大, 设定了传输大小后,不能再细分区域。而且传输过程中,不能暂停。缺了这些功能,其实不会影响一般使用的,只在某些特定的使用中,就显得没DSP的DMA那么方便了。 STM32的DMA控制器只有一套工作寄存器。而DSP的DMA控制器,不单单有一套工作寄存器,而且还多了一个备份寄存器,称为配置寄存器。按照其命名可以很容易的理解,工作寄存器肯定就是提高给DMA控制器使用,也就是说,当前DMA控制器传输所用的配置是由工作寄存器得来的。而配置寄存器,就是由用户配置的,该寄存器可以在任何时候,包括DMA在启用的时候,都可以配置(某些特定寄存器不能在DMA启动的时候配置,具体请参考其手册),假如使用AUTO自动初始 化模式,在完成一个BLOCK传输后,会讲配置寄存器值复制到工作寄存器,改变DMA传输参数;假如非AUTO模式,就在再次使能通道的时候进行寄存器复制。这样就带来了一个好处,DMA控制参数,可以在DMA传输的过程中,对下一次传输进行预配置,然后等传输完的时候,启用新参数继续传输。而STM32的DMA,假如DMA在启动,假如需要改变下一次传输的参数,那只能乖乖的等它将这次任务完成了,然后停止DMA,再去配置工作寄存器,再重新启动DMA。也就是说,DSP 的DMA,多了一个备份配置寄存器,带来的好处是,无需停止DMA,就可以实现传输参数的改变。 注:不管是STM32或者5502的DMA,在非循环模式下,每次传输完后,假如要传输新的数据,都需要重新配置目标地址和源地址和传输数据等参数。而且STM32还要重新给DMA配置通道。 DMA传输是“直接存储器访问”的缩写,由DMA控制器完成数据传输,不需要CPU操作,因此可节省CPU开销,传输速度快,突发操作每时钟搬移一个数据。要通过CPU搬移数据的话,CPU要先读到他的寄存器,再从寄存器写到存储器,就是流水操作总要4-8个时钟或更多,速度就差了几倍。 DSP的DMA传输的数据可以细分,一个总的传输块(BLOCK)里面,又可以分若干个帧(FRAME),每传完一帧都可以开启中断。而且在整个DMA传输期间,不管是循环模式或者是其他一次性的模式,都可以中途暂停,因为它的DMA控制器可以记录当前暂停时的传输大小,和传输地址索引,然后下次再次开启的时候,会紧接着上次中断后的地方来传输。 DMA都是为了成批传输数据的,不论单次DMA 和突发DMA。不同的是每次传输一个单元数据(比如使用32bit

使用8237A可编程DMA控制器实验目的

使用8237A可编程DMA控制器实验目的 1、掌握8237A可编程DMA控制器和微机的接口方法。 2、学习使用8237A可编程控制器,实现数据直接快速传送的编程方法 1、实验内容 实验原理图如图5-26(见下页)所示,本实验学习使用8237A可编程DMA控制器进行RAM到RAM的数据传送方法。 实验中规定通道0为源地址,通道1为目的地址,通过设置0通道的请求寄存器产生软件请求,8237A响应这个软件请求后发出总线请求信号HRQ,图中8237HRQ直接连到8237A的HLDA上,相当于HRQ作为8237A的总线响应信号,进入DMA操作周期。 在8237A进行DMA传送时,当字节计数器减为0时,8237A的/EOP 引脚输出一个负脉冲,表示传送结束。/EOP可以作为系统的外部中断信号,通过8259A控制器使CPU 判断DMA传递是否结束。本实验中未用/EOP信号。 图中RAM 6264的地址为8000~9FFF,实验要求将RAM 6264中地址为8000~ 83FFH 的1KB数据传送到地址为9000H~93FFH的区域中去。为了验证传送的正确性,你可在源地址(8000H~83FFH)区首末几个单元填充标志字节,传送完再检查目的地址区的相应单元的标志字节是否与填入的一样。 2、实验步骤 (1)、将DMA扩展实验板按信号线的对应关系插入DVCC-8086H的Z5插座。 (2)、将DMA扩展实验板上的8237CS信号插孔和DVCC?8086H 的译码输出插孔00H-01FH相连。 (3)、打开DVCC-8086H电源,DVCC-8086H系统显示"DVCC -86H"。 (4)、运行实验程序 在系统显示"DVCC-86H"状态下,按任意键,系统显示命令提示符"-" 。 按GO键,显示器显示"1000 XX"。 输入F000 :B8C0 。 按EXEC键,显示器显示"8237-1"。 待数据传送结束,显示器显示"8237 good"。

使用 DMA 控制器指南

AN2548 应用笔记 使用STM32F101xx和STM32F103xx DMA控制器 1 前言 这篇应用笔记描述了怎么使用STM32F101xx 和 STM32F103xx的直接存储器访问(DMA)控制 器。STM32F101xx和STM32F103xx的DMA控制器、Cortex TM-M3内核、高级微控制器总线架 构(AMBA)总线和存储器系统,使得STM32具有高的数据带宽,并能使用户开发出低延迟、快响 应的软件。 这篇文档也描述了怎样充分利用这些特性,以及对于不同的外设和子系统怎样保证正确的响应 时间。 在下文中STM32F101xx和STM32F103xx都记作STM32F10xxx,DMA控制器都记作DMA。 译注: 本应用笔记配套例程下载地址: https://www.360docs.net/doc/ac15098048.html,/stonline/products/support/micro/files/an2548.zip 本译文的英文版下载地址为: https://www.360docs.net/doc/ac15098048.html,/stonline/products/literature/an/13529.pdf

目录 1前言1 2DMA控制器3 2.1DMA的主要特性3 3性能分析5 3.1轮询优先级方案5 3.2多层结构和总线挪用5 3.3DMA延迟6 3.4数据总线带宽限制6 3.5通道优先级选择7 3.5.1应用需求7 3.5.2内部数据带宽8 4DMA编程示例9 4.1使用SPI传输获得ADC连续采样的数据9 4.2SPI直接传输实现ADC连续数据的获取9 4.3使用DMA实现GPIO快速数据传输9 2/9 参照2007年12月 AN2548 英文第2版

相关文档
最新文档