DSPTMS320C6713入门之旅四edma的理解和使用.docx
- 文档编号:1923130
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:17
- 大小:589.12KB
DSPTMS320C6713入门之旅四edma的理解和使用.docx
《DSPTMS320C6713入门之旅四edma的理解和使用.docx》由会员分享,可在线阅读,更多相关《DSPTMS320C6713入门之旅四edma的理解和使用.docx(17页珍藏版)》请在冰豆网上搜索。
DSPTMS320C6713入门之旅四edma的理解和使用
DSP(TMS320C6713)入门之旅四、edma的理解和使用
EDMA的全称是:
EnhancedDirectMemoryAccess(增强型dma),增强型直接内存存取(EDMA)是数字信号处理器(DSP)中用于快速数据交换的重要技术,具有独立于CPU的后台批量数据传输的能力,能够满足实时图像处理中高速数据传输的要求。
以TI公司的TMS320C6713型DSP为例,介绍EDMA控制器的特点。
结合实例给出EDMA在数据实时传输中的具体控制和实现方法。
实验结果表明,通过灵活控制EDMA不仅能够提高数据的传输效率,而且能够充分发挥:
DSP的高速性能。
也就是在我们一般的dma的基础上做了一下加工以完成特定的功能。
比如我们dma传送数据一般是连续的一片数据块,但是我们想间隔着传送就不行了。
还有就是增强型的dma可以实现二维的传送和一个事件可以发起两次传送,这样就可以很好的服务我们的数据传送要求!
如图EDMA结构图:
可以看到我们配置自己的edma之后,就等待传送事件的到来,当传送事件到来的时候edma的控制器就接受到一个触发信号,就进入传送过程。
传送的规则定义在edma的每一个通道的参数设置里面,我们可以通过控制传送的参数来达到我们要传送的数据的控制的目的!
传送参数表如图:
第一个双字就是控制edma传送的规则,比如:
一维单元同步,一维帧同步,二维等等。
这些控制属性得在这个域里面对其进行说明。
第二个双字就是告诉edma要传送数据的源地址,第三个双字的帧的数目和单元的数目,第四个双字就是告诉edma要传送数据的目的地址。
第五个双字告诉edma下一次触发时地址的偏移量的量。
第六个双字就是当前的单元传送完成之后的单元数目的重载值和是否edma是否需要要链接到下一个edma(注意:
这儿是通道链接)
我们先来理解几个概念:
事件链接:
实质就是想一个事件触发之后引起两次edma的搬移,当然这两次搬移不是同一个edma通道,如果是同一个edma通道,相当于同样的数据搬移两次,这样不仅没有意义,还会占用内部总线带宽,印象片内数据的流动的速度。
那么TI设计的是将一个事件先链接到第一个通道,然后将第一个通道的完成中断事件链接到第二个edma通道。
相当于当一个事件触发之后,就触发第一个edma通道搬移数据,当第一个通道完成之后就发出一个事件触发第二个通道搬移数据,最后可以产生一个中断通知CPU。
这样一般用视频的FIFO同步。
注:
大家可能会用疑问,不是是要同时搬移两块吗,怎么不是同时的呢?
大家可以想想DSP内部一般就只有一条数据总线供edma使用。
那么在同一时刻只用一个数占用总线,如果我们有两个设备驱动总线数据,那么数据就不对了。
所以edma事件同步就是先让第一个通道搬移完成触发第二个通道搬移。
四种数据搬移方式:
一维单元同步搬移(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搬移数据的大小就是一帧,也就是一帧中所有单元数据总和。
那么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,当下一个事件到来时,下一个源地址和目的地址的偏移由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,ELECNT=04h,这样搬移的数据总量为2*4=8字节。
实例源代码,使用timer1作为事件触发源,通过1D-1D单元同步来实现乒乓结构:
/*
* Copyright2003byTexasInstrumentsIncorporated.
* Allrightsreserved.PropertyofTexasInstrumentsIncorporated.
* Restrictedrightstouse,duplicateordisclosethiscodeare
* grantedthroughcontract.
*
*/
/*
*———main_edma1.c———
*ThisprogramusesthetimerstotriggerEDMAevents.Theseeventsinturn
*triggerlinkedEDMAparametertablestofillapingpongbufferstructure.
*Setabreakpointon‘processbuff’function.Thenopentwomemorywindows.
*Usepingastheaddressforonememorywindowandpongfortheother.Then
*runtheapplication.You’llnotethattheprogrambouncesbetweentheping
*andpongbuffersfillingeachwithavaluethatcomesfromthesource.
*(Note:
ThisexamplerunswithCACHEenable).
*/
#include
#include
#include
#include
#include
#include
/*—————————————————————————-*/
/*PickwhichEDMAtransfercompletioninterruptwewanttouse*/
#defineTCCINTNUM 10
/*definetheconstants*/
#defineBUFF_SZ 256 /*ping-pongbuffersizesin#ofints */
#defineFCPU 150000000 /*CPUclockfrequency */
#defineSRATE 8000 /*datasamplerate(simulatedw/timer */
#defineTPRD (FCPU/(4*SRATE))/*timerperiod */
#defineTRANSFER_CNT20 /*Transfercount*/
/*Createthebuffers.Wewanttoalignthebufferstobecachefriendly*/
/*byaligningthemonanL2cachelineboundary. */
#pragmaDATA_SECTION(ping,“.buffers”);
#pragmaDATA_SECTION(pong,“.buffers”);
#pragmaDATA_SECTION(outbuff,“.buffers”);
#pragmaDATA_ALIGN(ping,128);
#pragmaDATA_ALIGN(pong,128);
#pragmaDATA_ALIGN(outbuff,128);
intping[BUFF_SZ];
intpong[BUFF_SZ];
intoutbuff[BUFF_SZ];
/*Thesetwovariablesserveasthedatasourcesforthisexample.*/
/*Alsowanttoaligntheseonacachelineboundarysincethey */
/*sourcesofEDMAtransfers. */
#pragmaDATA_SECTION(ping_data,“.buffers”);
#pragmaDATA_SECTION(pong_data,“.buffers”);
#pragmaDATA_ALIGN(ping_data,128);
#pragmaDATA_ALIGN(pong_data,128);
staticintping_data;
staticintpong_data;
/*globalvariableusedtotracktheping-pong’ing*/
staticintpingpong=0;
volatileinttransferCount=0;
externfarvoidvectors();
voidsetupInterrupts(void);
voidstopEdma(void);/*functionusedtostopEDMA*/
/*————————————————————————-*/
/*declaretheCSLobjects*/
TIMER_HandlehTimer; /*Handleforthetimerdevice */
EDMA_HandlehEdma; /*Handleforth
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSPTMS320C6713 入门 edma 理解 使用