ADSP2116中DMA的应用.docx

上传人:b****6 文档编号:6229728 上传时间:2023-01-04 格式:DOCX 页数:9 大小:42.58KB
下载 相关 举报
ADSP2116中DMA的应用.docx_第1页
第1页 / 共9页
ADSP2116中DMA的应用.docx_第2页
第2页 / 共9页
ADSP2116中DMA的应用.docx_第3页
第3页 / 共9页
ADSP2116中DMA的应用.docx_第4页
第4页 / 共9页
ADSP2116中DMA的应用.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

ADSP2116中DMA的应用.docx

《ADSP2116中DMA的应用.docx》由会员分享,可在线阅读,更多相关《ADSP2116中DMA的应用.docx(9页珍藏版)》请在冰豆网上搜索。

ADSP2116中DMA的应用.docx

ADSP2116中DMA的应用

ADSP2116中DMA的应用

摘要:

直接内存存取(DMA)是DSP芯片中用于快速数据交换的重要技术,文中对AD公司的浮点系列芯片ADSP2116x中DMA的应用方法作了详细介绍,同时重点介绍了链式DMA的操作方法,给出了一些实际应用中的例子。

   关键词:

DMA链式DMA浮点系列芯片ADSP2116x

1 DMA概述

直接内存存取(DMA)是计算机系统提高运行效率的一项重要技术。

它可以在CPU运行指令的同时,使系统从外部存储器或设备中存取数据也可以在核心处理器不参与的情况下由专用的DMA设备存取数据。

对于DSP芯片来讲,DMA的作用尤为重要。

众所周知,DSP芯片主要面向实时信号处理其核心运算部件具有很高的运算速度,常以MFLOPS(每秒百万次浮点运算)来衡量。

ADSP2116x的速度为600MFLOPS此速度是以存储在芯片内部存储器中的程序和数据为前提的。

在DSP内部,一般采用多总线的哈佛结构数据总线和程序总线相互独立,即指令的存取和数据的存取并行不悖,另外,在AD-SP2116x内部还有各种接口总线,可用以提高数据的流通能力,而在芯片的外部,所有的总线都被合并在一起了。

为了发挥DSP核心运算单元的高速运算能力,必须先把外部数据传输到片内存储器中。

使用DMA操作可以减少核心处理器的负担,提高运算速度。

另一方面,DSP系统总要与各种外部信号打交道它从外部输入数字信号,经过各种算法处理后,还要输出给其它外部设备。

不仅如此,对于很多应用系统数据的输入和输出常常是连续不断的。

试想若用DSP的核心部件完成数据的输入和输出,将无法发挥DSP的高速运算能力。

而AD公司的ADSP2116x系列则集成了DMA控制器,从而可用DMA来完成数据的输入和输出。

高效的DSP系统通常采用图1所示的结构。

该结构的内部带有输入、输出缓冲区,而数据的获得则依靠DMA控制器。

这样,核心运算单元就可以专门进行信号处理,而将外界数据的获取交给DMA来完成。

2 ADSP2116x中的DMA

2.1ADSP2116x中DMA的数据传输类型

ADSP2116x中的DMA包含14条独立通道,可完成下列类型的数据传输操作:

●片内存储器与片外存储器或片外设备之间的传输操作;

●片内存储器与其它ADSP2116x的片内存储器之间的传输操作;

●片内存储器与主处理器之间的传输操作;

●片内存储器与串行口之间的传输操作;

●片内存储器与Link口之间的传输操作;

●片内存储器与SPI口之间的传输操作;

●片外存储器与片外设备之间的传输操作。

2.2ADSP2116x中与DMA有关的寄存器

DMA的编程实际上是通过内部核心处理单元或外部主机对片内有关的I/O寄存器设置来完成的,与DMA有关的I/O寄存器如表1所列。

控制寄存器主要用来设置数据传输的方向、数据格式、是否链式等操作;参数寄存器用来设置数据传输的地址、数目等信息;数据缓存器则主要用来缓存传输的数据,以提高数据的传输率。

这些I/O寄存器都被映射到片内存储器的前256个地址上。

表1ADSP2116x中的DMA缓存器

DMA通道号

控制寄存器

参数寄存器

数据缓存器

说 明

0

SPCTL0

II0A,IM0A,CP0A,GP0A

RX0A,TX0A

串口0A

1

II0B,IM0B,C0B,CP0B,GP0B

RX0B,TX0B

串口0B

2

SPCTL1

II1A,IM1A,C1A,CP1A,GP1A

RX1A,TX1A

串口1A

3

II1B,IM1B,C1B,CP1B,GP1B

RX1B,TX1B

串口1B

4

SPCTL2

II2A,IM2A,C2A,CP2A,GP2A

RX2A,TX2A

串口2A

5

II2B,IM2B,C2B,CP2B,GP2B

RX2B,TX2B

串口2B

6

SPCTL3

II3A,IM3A,C3A,CP3A,GP3A

RX3A,TX3A

串口3A

7

II3B,IM3B,C3B,CP3B,GP3B

RX3B,TX3B

串口3B

8

LCTLSPICTL

IILB1,IMLB1,CLB1,CPLB1,GPLB1IISTX,IMSRX,CSRX,GPSRX

LUBF0SPIRX

Link0口SPI发送口

9

IILB1,IMLB1,CLB1,CPLB1,GPLB1IISTX,IMSTX,CSTX,GPSTX

LUBF1SPITX

Link1口SPI发送口

10

DMAC10

IIEP0,IMEP0,CEP0,CPEP0,GPEP0,EIEP0,EMEP0,ECEP0

EPB0

外部接口0

11

DMAC11

IIEP1,IMEP1,CEP1,CPEP1,GPEP1,EIEP1,EMEP1,ECEP1

EPB1

外部接口1

12

DMAC12

IIEP2,IMEP2,CEP2,CPEP2,GPEP2,EIEP2,EMEP2,ECEP2

EPB2

外部接口2

13

DMAC13

GPEP3,EIEP3,CEP3,CPEP3,GPEP3,EIEP3,EMEP3,ECEP3

EPB3

外部接口3

2.3ADSP2116x中DMA一般传输过程的设置

DMA一般传输过程的设置步骤如下:

(1)设置对应通道的参数寄存器

(2)设置对应通道的DMA控制寄存器,并将其中的DMA使能位设为有效

(3)开始DMA数据传输

(4)DMA传输结束后,产生对应的中断,并通过程序对中断进行处理。

2.4ADSP2116x中的链式DMA

为了减少由DMA引起的中断,ADSP2116x中的DMA控制器提供了链式DMA功能。

所谓链式DMA,是指在当前的DMA结束时,I/O处理器能够自动加载DMA参数并开始下一个DMA传输。

利用这种特性,程序能够设置多个具有不同属性的DMA传输。

在链式DMA过程中,通常先把每次DMA传输的有关参数写成一个传输控制块(TCB),并把它们存储在片内。

传输过程中,在当前的DMA结束时,I/O处理器将对链式指针寄存器(CPx)进行控制以使其指向存储在片内的下一个TCB。

表2TCB中各相关参数寄存器的排列顺序

地  址

外部口

Link口和串口

CPx+0x00040000

IIEPx

IIx

CPx-1+0x00040000

IMEPx

IMx

CPx-2+0x00040000

CEPx

Cx

CPx-3+0x00040000

CPEPx

CPx

CPx-4+0x00040000

GPEPx

GPx

CPx-5+0x00040000

EIEPx

 

CPx-6+0x00040000

EMEPx

 

CPx-7+0x00040000

ECEPx

 

CPx-8+0x00040000

-

 

CPx在链式DMA中具有非常重要的作用,它是一个19位的寄存器,其中低18位是偏移地址,在ADSP2116x中,这组偏移地址加上0x00040000后才是片内存储器中的实际地址,其中最高一位为中断控制位。

该位在被设置的情况下,I/O处理器将在链式DMA结束时产生一个中断,实际上CPx指向的是TCB的最大地址,在TCB中,各有关DMA参数寄存器的排列顺序如表2所列。

表中的“x”代表所用到的DMA通道。

链式DMA传输过程的设置步骤如下:

(1)在片内存储器中设置好所有的TCB

(2)设置对应通道的控制寄存器,并将其中的DMA使能位和链式使能位设为有效

(3)将第一个TCB的最大地址写到CPx中,并开始链式DMA的传输

(4)传输结束后,产生对应的中断。

有两点要特别注意:

第一是链式DMA只能发生在同一DMA通道内;二是SPI口不支持链式DMA。

3 几种常用的DMA操作

在基于ADSP2116x的DSP系统开发过程中,最常用的操作是片内存储器和片外存储器之间的DMA、link口之间的DMA、串口之间的DMA以及SPI之间的DMA等几种。

限于篇幅,本文只介绍前面两种。

3.1片内存储器和片外存储器之间的DMA

片内存储器与片外存储器之间的DMA传输可用通道10~13这四个通道中的任意一个来进行。

下面通过一个例子来说明这种传输。

假定要把片内存储器地址0x50000~0x5001f中的32个数据利用DMA通道10传送到片外存储器0x2000000~0x200001f中,则可用下面的程序来实现:

R0=0;dm(DMAC10)=R0;//清空对应通道的DMA控制寄存器

//设置片内存储器参烽寄存器

R0=0x50000;dm(IIEP0)=R0;//设置片内存储器起始地址

R0=1;dm(EMEP0)=R0;//设置片内存储器地址增加值

R0=32;dm(ECEP0)=R0;//设置片内存储器计数寄存器

//设置片外参数寄存器

R0=0x2000000(dmEIEP0)=R0//设置片外存储器起始地址

R0=1;dm(IMEP0)=R0;//设置片外存储器地址增加值

R0=32;dm(CEP0)=R0;//设置片外存储器计数寄存器

//设置对应通道的DMA控制寄存器

Ustat1=0x00000000;

Bitsetustat1MASTER|PMODE4|TRAN|DEN;

Dm(DMAC10)=ustat1;//设置为master和无打包模式,并开始DMA传输

上面的例子是一般的DMA传输。

而如果需要进行两段或两段以上的数据传输,则要在中断后重新设置参数寄存器,在这种情况下,用链式DMA更有利于提高核心处理单元的效率。

假定要把片内存储器地址0x50000~0x5001f中的32个数据和0x50040~0x5007f中的64个数据利用DMA通道10分别传送到片外存储器0x2000000~0x200001f和0x2000040~0x200007f中,可用下面的程序来实现:

VARtcb1[8]=32,//ECEP0

1,//EMEP0

0x2000000,//EIEP0

0,//GPEP0

tcb2+7-0x40000,//CPEP0,保证第一次DMA结束后自动加载第二个TCB

32,//CEP0

1,//IMEP0

0x50000;//IIEP0

VARtcb2[8]=64,1,0x2000040,

//ECEP0,EMEP0,EIEP0,0//GPEP0

0x40000,//CPEP0,保证第二个DMA结束后产生DMA中断

64,1,0x50040;//CEP0,IMEP0,IIEP0

r0=0,

dm(DMAC10)=r0;//清空对应通道的DMA控制器

ustat0=0x00000000;

bitsetustat0INT32|MASTER|PMODE4|CHEN|DEN|TRAN;

dm(DMAC10)=ustat0;//设置为master和无打包模式,链式DMA

r0=tcb1+7-0x40000;

dm(CPEP0)=r0;//加载第一个TCB的CPEP0

开始DMA传输完第一段数据

后自动开始加载第二个TCB,

直到两段数据后产生中断

bitsetmode1IRPTEN//设置全局中断使能

bitsetimaskEP0I//设置DMA通道#10中断使能

3.2片内存储器与link口之间的DMA

ADSP2116x具有很强的并行工作能力,它不需另加任何外部仲裁电路,便可以直接通过link口联接在一起并行工作以实现片间数据的交换,在通常情况下可采用DMA方式,以便充分发挥其优点。

下面是两片ADSP2116x之间通过link0口进行数据传输的例子。

假定要把第一片片内存储器0x100000~0x1001ff中的512个数据传送到第二片的片内存储器0x120000~0x1201ff中。

其程序如下:

//第一片

.vartxtcb_source8=0000051210x100000

//设置DMATCB

r0=0dmLCTL=r0//清空对应通道的

控制寄存器

ustat1=dmLCTL

bitclrustat1L0TRAN|LAB0|L0CLKD0

bitsetustat1L0EN|L0CLKD1|L0DEN|L0CHENdmLCTL=ustat1//设置DMA控制器LCTL

//设置link0口为2x时钟,发

送数据模式,链式DMA

r1=0x00040000

r0=txtcb_source+7

r0=r1orr0//设置CPLB0寄存器中的PCI位

dmtxtcb_source+4=r0//设置TCB中的CPLB0

dmCPLB0=r0//加载TCB中的CPLB0,并

开始链式DMA

//第二片

.varrxtcb_dest8=0000051210x120000

//设置DMATCB

r0=0dmLCTL=r0//清空对应通道的控制

寄存器

ustat1=dmLCTL

bitclrustat1LAB0|L0CLKD0

bitsetustat1L0TRAN|L0EN|L0CLKD1|L0DEN|L0CHEN

dmLCTL=ustat1//设置DMA控制器LCTL

//设置link0口为2x时钟,

接收数据模式,链式DMA

r1=0x00040000

r0=rxtcb_dest+7

r0=r1orr0//设置CPLB0中的PCI位

dmrxtcb_dest+4=r0//设置TCB中的CPLB0

dmCPLB0=r0//加载TCB中的CPLB0

并开始链式DMA

4结束语

本文简要介绍了ADSP2116x中DMA的基本原理,给出了几种DMA操作时的编程实例,这些例子重点突出了链式DMA的应用。

由于ADSP2116x中DMA操作功能强大,形式多样。

因此,只有熟练掌握和应用各种DMA,才能使数据进出芯片变得更加流畅,同时也才能使其核心处理单元的运算能力发挥到极致。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1