ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:654.67KB ,
资源ID:7730370      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7730370.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(转DSPTMS320C6713入门之旅四edma的理解和使用.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

转DSPTMS320C6713入门之旅四edma的理解和使用.docx

1、转DSPTMS320C6713入门之旅四edma的理解和使用DSP(TMS320C6713)入门之旅(四、edma的理解和使用)发表于2010 年 11 月 28 日由hulin574 views EDMA的全称是:Enhanced Direct Memory Access(增强型dma),增强型直接内存存取(EDMA)是数字信号处理器(DSP)中用于快速数据交换的重要技术,具有独立于CPU的后台批量数据传输的能力,能够满足实时图像处理中高速数据传输的要求。以TI公司的TMS320C6713型DSP为例,介绍EDMA控制器的特点。结合实例给出EDMA在数据实时传输中的具体控制和实现方法。实验结

2、果表明,通过灵活控制EDMA不仅能够提高数据的传输效率,而且能够充分发挥DSP的高速性能。也就是在我们一般的dma的基础上做了一下加工以完成特定的功能。比如我们dma传送数据一般是连续的一片数据块,但是我们想间隔着传送就不行了。还有就是增强型的dma可以实现二维的传送和一个事件可以发起两次传送,这样就可以很好的服务我们的数据传送要求! 如图EDMA结构图:可以看到我们配置自己的edma之后,就等待传送事件的到来,当传送事件到来的时候edma的控制器就接受到一个触发信号,就进入传送过程。传送的规则定义在edma的每一个通道的参数设置里面,我们可以通过控制传送的参数来达到我们要传送的数据的控制的目

3、的!传送参数表如图: 第一个双字就是控制edma传送的规则,比如:一维单元同步,一维帧同步,二维等等。这些控制属性得在这个域里面对其进行说明。第二个双字就是告诉edma要传送数据的源地址,第三个双字的帧的数目和数据单元的数目,第四个双字就是告诉edma要传送数据的目的地址。第五个双字告诉edma下一次触发时地址的偏移量的量。第六个双字就是当前的单元传送完成之后的单元数目的重载值和edma是否需要要链接到下一个edma(注意:这儿是通道链接) 我们先来理解几个概念: 事件链接:实质就是想一个事件触发之后引起两次edma的搬移,当然这两次搬移不是同一个edma通道,如果是同一个edma通道,相当于

4、同样的数据搬移两次,这样不仅没有意义,还会占用内部总线带宽,影响片内数据的流动的速度。那么TI设计的是将一个事件先链接到第一个通道,然后将第一个通道的完成中断事件链接到第二个edma通道。相当于当一个事件触发之后,就触发第一个edma通道搬移数据,当第一个通道完成之后就发出一个事件触发第二个通道搬移数据,最后可以产生一个中断通知CPU。这样一般用视频的FIFO同步。注:大家可能会用疑问,不是是要同时搬移两块吗,怎么不是同时的呢?大家可以想想DSP内部一般就只有一条数据总线供edma使用。那么在同一时刻只用一个数占用总线,如果我们有两个设备驱动总线数据,那么数据就不对了。所以edma事件同步就是

5、先让第一个通道搬移完成触发第二个通道搬移。 通道链接:实质就是由于edma搬移的数据块就只有那么大,那么当想搬移很多很多的时候怎么办呢?当然可以在完成中断中重新设置edma参数,这样当事件到来时,就可以重新开始搬移了。其实也可以用edma的通道链接这个属性,当这个通道的参数设置的完成时,通过链接到自己或者别人这样就不用重新设置来达到事件到来时搬移数据的目的。通道链接的时候一般下一个通道的事件触发器是同一个,这样就不会丢失事件。这种属性一般应用于大量数据从一个固定地址到另一个固定地址!还要就是一个提高处理速度的乒乓结构的数据的搬移。 乒乓结构:在做一些设计的时候,一般要考虑两种因素:速度和面积。

6、速度当然是指我们要求的处理数据的速度,面积就是存储数据的要用的内存大小(成本问题)。在这两者之间权衡我们的算法。在这儿讲的乒乓结构就是用面积换取速度的一种做法!我们用两块内存和两个edma通道(相互链接,同一个事件触发),第一块取名为乒,第二块取名为乓。当一个事件到来的时候触发我们的乒通道搬移数据到乒的内存块,等待一系列事件完之后,乒通道完成,就连接到乓通道。这时就是产生一个中断,告诉cpu第一个块数据已经准备好在乒内存块了,让其进行数据算法处理。与此同时乓通道也在搬移数据到乓内存块,完成之后通知cpu,链接到乒通道这样形成一个循环。就好像生活中打乒乓一样!如图: 四种数据搬移方式:一维单元同

7、步搬移(1D-to-1D):设置一个edma通道为一维数据单元同步搬移时,当一个事件到来触发时,一次edma搬移数据的大小就是一个单元。那么edma数据块搬移完成之后总体大小为:ESIZE*FRMCNT*ELERLD,当下一个事件到来时,下一个源地址和目的地址的偏移由opt中sum,dum控制。例如:ESIZE=00b,SUM=01b,DUM=01b,FRMCNT=02h,ELERLD=04h,这样搬移的数据总量为2*4=8字节。一维帧同步搬移(1D-to-1D):设置一个edma通道为一维数据帧同步搬移时,当一个事件到来触发时一次edma搬移数据的大小就是一帧,也就是一帧中所有单元数据总和。

8、那么edma数据块搬移完成之后总体大小为:ESIZE*FRMCNT*ELERLD,当下一个事件到来时,下一个源地址和目的地址的偏移由opt中sum,dum控制。例如:ESIZE=00b,SUM=01b,DUM=01b,FRMCNT=02h,ELERLD=04h,这样搬移的数据总量为2*4=8字节。二维数组同步搬移(2D-to-2D):设置一个edma通道为一维数据帧同步搬移时,当一个事件到来触发时一次edma搬移数据的大小就是一个数组,也就是一帧中所有单元数据总和。那么edma数据块搬移完成之后总体大小为:ESIZE*FRMCNT*ELERLD,当下一个事件到来时,下一个源地址和目的地址的偏移

9、由opt中sum,dum控制。例如:ESIZE=00b,SUM=01b,DUM=01b,FRMCNT=02h,ELECNT=04h,这样搬移的数据总量为2*4=8字节。二维数组同步搬移(2D-to-2D):设置一个edma通道为一维数据帧同步搬移时,当一个事件到来触发时一次edma搬移数据的大小就是一个整个数据块,也就是一个edma通道中所有数据总和。那么edma数据块搬移完成之后总体大小为:ESIZE*FRMCNT*ELERLD,当下一个事件到来时,下一个源地址和目的地址的偏移由opt中sum,dum控制。例如:ESIZE=00b,SUM=01b,DUM=01b,FRMCNT=02h,ELE

10、CNT=04h,这样搬移的数据总量为2*4=8字节。实例源代码,使用timer1作为事件触发源,通过1D-1D单元同步来实现乒乓结构:/* Copyright 2003 by Texas Instruments Incorporated.* All rights reserved. Property of Texas Instruments Incorporated.* Restricted rights to use, duplicate or disclose this code are* granted through contract.*/*main_edma1.c* This pro

11、gram uses the timers to trigger EDMA events. These events in turn* trigger linked EDMA parameter tables to fill a ping pong buffer structure.* Set a breakpoint on processbuff function. Then open two memory windows.* Use ping as the address for one memory window and pong for the other. Then* run the

12、application. Youll note that the program bounces between the ping* and pong buffers filling each with a value that comes from the source.* (Note: This example runs with CACHE enable).*/#include #include #include #include #include #include /*-*/* Pick which EDMA transfer completion interrupt we want

13、to use */#define TCCINTNUM 10/* define the constants */#define BUFF_SZ 256 /* ping-pong buffer sizes in # of ints */#define FCPU 150000000 /* CPU clock frequency */#define SRATE 8000 /* data sample rate (simulated w/timer */#define TPRD (FCPU/(4*SRATE) /* timer period */#define TRANSFER_CNT 20 /* Tr

14、ansfer count */* Create the buffers. We want to align the buffers to be cache friendly */* by aligning them on an L2 cache line boundary. */#pragma DATA_SECTION (ping, “.buffers”);#pragma DATA_SECTION (pong, “.buffers”);#pragma DATA_SECTION (outbuff, “.buffers”);#pragma DATA_ALIGN(ping,128);#pragma

15、DATA_ALIGN(pong,128);#pragma DATA_ALIGN(outbuff,128);int pingBUFF_SZ;int pongBUFF_SZ;int outbuffBUFF_SZ;/* These two variables serve as the data sources for this example. */* Also want to align these on a cache line boundary since they */* sources of EDMA transfers. */#pragma DATA_SECTION (ping_data

16、, “.buffers”);#pragma DATA_SECTION (pong_data, “.buffers”);#pragma DATA_ALIGN(ping_data,128);#pragma DATA_ALIGN(pong_data,128);static int ping_data;static int pong_data;/* global variable used to track the ping-ponging */static int pingpong = 0;volatile int transferCount = 0;extern far void vectors(

17、);void setupInterrupts(void);void stopEdma(void); /* function used to stop EDMA */*-*/* declare the CSL objects */TIMER_Handle hTimer; /* Handle for the timer device */EDMA_Handle hEdma; /* Handle for the EDMA channel */EDMA_Handle hEdmaPing; /* Handle for the ping EDMA reload parameters */EDMA_Hand

18、le hEdmaPong; /* Handle for the pong EDMA reload parameters */EDMA_Config cfgEdma; /* EDMA configuration structure */* Create the EDMA configuration structure for ping transfers */EDMA_Config cfgEdmaPing = EDMA_OPT_RMK( /* Making Options parameter register EDMA_OPT */ EDMA_OPT_PRI_LOW, /* Priority l

19、evels for EDMA events:- EDMA_OPT_PRI_LOW Low priority EDMA transfer EDMA_OPT_PRI_HIGH High priority EDMA transfer*/ EDMA_OPT_ESIZE_32BIT,/* Element size :- EDMA_OPT_ESIZE_32BIT 32 bit word EDMA_OPT_ESIZE_16BIT 16 bit word EDMA_OPT_ESIZE_8BIT - 8 bit word */ EDMA_OPT_2DS_NO, /* Source dimension :- ED

20、MA_OPT_2DS_NO 1-dimensional source EDMA_OPT_2DS_YES 2-dimensional source */ EDMA_OPT_SUM_NONE, /* Source address update mode :- EDMA_OPT_SUM_NONE Fixed address mode EDMA_OPT_SUM_INC Increment address mode EDMA_OPT_SUM_DEC Decrement address mode EDMA_OPT_SUM_IDX Address modified by element index or f

21、rame Index */ EDMA_OPT_2DD_NO, /* Destination dimension :- EDMA_OPT_2DD_NO 1-dimensional source EDMA_OPT_2DD_YES 2-dimensional source */ EDMA_OPT_DUM_INC, /* Destination address update mode :- EDMA_OPT_DUM_NONE Fixed address mode EDMA_OPT_DUM_INC Increment address mode EDMA_OPT_DUM_DEC Decrement add

22、ress mode EDMA_OPT_DUM_IDX Address modified by element index or frame Index */ EDMA_OPT_TCINT_YES, /* Transfer complete interrupt :- EDMA_OPT_TCINT_NO Indication disabled EDMA_OPT_TCINT_YES Indication enabled */ EDMA_OPT_TCC_OF(TCCINTNUM),/* Transfer complete code */ EDMA_OPT_LINK_YES, /* Linking of

23、 event parameters EDMA_OPT_LINK_NO - Disabled EDMA_OPT_LINK_YES - Enabled */ EDMA_OPT_FS_NO /* Frame synchronization EDMA_OPT_FS_NO Channel is element/array synchronized EDMA_OPT_FS_YES - Channel is frame synchronized*/ ), EDMA_SRC_OF(&ping_data),/* Source address register &ping_data source address

24、*/ EDMA_CNT_OF(BUFF_SZ), /* Transfer count parameter BUFF_SZ buffer sizes in # of ints */ EDMA_DST_OF(ping), /* Destination address parameter ping destination address */ EDMA_IDX_OF(000000004),/* Index parameter */ EDMA_RLD_OF(000000000) /* Count reload/link parameter */;/* Create the EDMA configura

25、tion structure for pong transfers */EDMA_Config cfgEdmaPong = EDMA_OPT_RMK( /* Making Options parameter register EDMA_OPT */ EDMA_OPT_PRI_LOW, /* Priority levels for EDMA events:- EDMA_OPT_PRI_LOW Low priority EDMA transfer EDMA_OPT_PRI_HIGH High priority EDMA transfer */ EDMA_OPT_ESIZE_32BIT,/* Element size :- EDMA_OPT_ESIZE_32BIT 32 bit word EDMA_OPT_ESIZE_16BIT 16 bit word EDMA_OPT_ESIZE_8BIT - 8 bit word */

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

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