EDMA与QDMAself summary文档格式.docx
- 文档编号:21040735
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:17
- 大小:522.95KB
EDMA与QDMAself summary文档格式.docx
《EDMA与QDMAself summary文档格式.docx》由会员分享,可在线阅读,更多相关《EDMA与QDMAself summary文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
每帧的数据元素个数可以不同,由通道参数BCNT指定,传完一帧数据后由BCNTRLD重新载入块中的下一帧的数据元素个数BCNT;
块中的帧的个数由通道参数CCNT指定;
1D数据传输有两种同步方式:
OPT.FS=0,元素同步方式;
OPT.FS=1,帧同步方式;
元素同步时,一次同步事件引起一帧中的一个元素的传输,每传输一次BCNT递减1;
当同步事件触发时,BCNT=1表明是一帧的最后一个数据元素,此时EDMA控制器除了完成最后这个元素的传输外,还需要重新载入BCNT(通过BCNTRLD)并且CCNT递减1;
ELEIDX表示元素之间的偏移,FRMIDX(即帧间偏移)表示一帧的最后一个元素和下一帧的第一个元素之间的偏移;
如果OPT.LINK=(不是最后一个有效PaRAM,还要继续加载新的PaRAM)1时,传输完成中断产生(CCNT=0)就重新从PRAM中载入当前通道的其他参数(也是传输多个Frame,再每个元素完成时产生中断);
帧同步时,一次同步事件引起一帧数据的传输,FRMIDX表示两帧的第一个元素之间的偏移(这里是区别1);
②
2D数据
数据组成为“块->
Frame->
元素”,同一Frame中的元素是连续存放的,因此ELEIDX无意义;
Frame中的元素素引表示2D的第一维,块中的Frame索引表示2D的第二维;
FRMIDX的值依赖于OPT.FS的设定;
OPT.FS=0:
表示一次同步事件传输一个Frame,此时FRMIDX是Frame首地址之间的偏移;
每传完一个Frame,CCNT递减1;
当OPT.LINK=1并且CCNT递减至0时,从PRAM的中重新载入当前通道的其他参数;
OPT.FS=1:
表示一次同步事件传输一个块;
FRMIDX表示前一个Frame的最后一个元素的地址与后一个Frame的第一个元素的地址之间的偏移;
如果OPT.LINK等于1,则当整块数据传完时,重新从PRAM中为当前通道载入新的参数;
(3)EDMA传输过程的源/目的地址的修改
在每次同步事件触发EDMA数据传输,并且传输完成后,需要对源/目的地址进行更新;
地址的更新方式由SUM/DUM进行设定,并且和2DS、2DD以及FS是密切相关的;
(4)数据元素大小和对齐方式
源/目的地址是在元素大小的边界对齐的,因此要注意指向源/目的地址的指针的类型需要和OPT.ESIZE匹配;
(5)CCNT和ELEMCNT的更新
QUESTION:
每次进行计数更新时,BCNTRLD的值哪里来的(不变的)?
?
(6)EDMALinkingTransfer
当传输完成时(根据当前通道参数设定已经传完所有数据了,具体条件如下表所示),并且OPT.LINK=1,EDMA控制器会根据通道参数LINK(非OPT.LINK,16bits)从PaRAM中的其他位置(以24个字节对齐,因为通道参数为6WORD)重新载入当前传输通道的参数;
可以链接到一个空的通道参数集(NULLParameter)来停止EDMA传输,也可以自链接(用于循环缓冲处理或者重复的数据传输);
Linking过程中不对相关寄存器作判定;
(7)EDMA中断
C64XDSP的EDMA控制器的所有64个通道只产生一种中断:
EDMA_INT。
如果需要让第n个EDMA通道(或者QDMA请求)可以在传输完成时可以产生中断通知CPU的话,应该如下设定:
u
OPT.TCINT=1:
表示启用传输完成中断
OPT.TCC=n:
在传输完成时,CIPR[TCC]=1,用于标记对应通道的传输完成,即便对应的CIER位没有启动,传输完成事件还是会在CIPR记录,即挂起的含义所在;
OPT.CIER[n]=1:
表示立即允许挂起的第n个通道传输完成事件触发EDMA_INT中断发送给CPU;
其中,TCC用于表示的通道的位数不够时,可以扩展使用TCCM(即TCCM:
TCC),CIPR和CIER均由两个寄存器组成:
CIPRL+CIPRH以及CIERL+CIERH。
中断服务例程ISR读取CIPR,确定哪一个通道完成了数据传输,进行相应的处理。
ISR在进行处理之前需要清除CIPR中确定了通道的位(写入1到相关位清除,写入0不起作用),目的是记录以后的传输完成事件的发生。
在中断服务例程对某通道的传输完成中断进行服务后,因为期间有可能有其他通道传输完成了,也已经设置了CIPR中的相应位,或者也有可能本来有好几个中断挂起了并且现在触发了,因此中断服务例程必须检查所有的CIPR并全部完成中断服务才行。
当CIPR[n]&
CIER[n]=1时,则设置对应的IFR为1,防止在退出ISR时丢失中断并且使得可以多次调用ISR。
中断服务例程的一个任务是清除CIPR和CIER中的与通道对应的位。
C64XDSP除了传输完成中断外,还有交替性传输完成中断,即在传输过程中完成一个传输子过程(如传完一个数据元素、传完一个帧/Frame数据;
2D帧同步传输没有交替性传输完成中断)给CPU发送一个中断,相应的设定由OPT.ATINT、OPT.ATCC设定,处理过程和传输完成中断雷同,区别只是在传输还没全部完成的过程中进行中断处理而已。
(8)QDMA
QDMA数据传输总是帧同步的,即对于1D数据传输而言每次同步事件传输一帧数据,对于2D数据传输而言每次同步事件传输一块数据。
因此,QOPT.FS(帧同步还是元素同步,QDMA不可选,全是帧同步)对于QDMA是无意义的。
另外,QDMA是一次性快速传输的,因此也没有中间传输过程这个概念,即没有交替性传输完成中断。
QDMA没有Linking方式的传输,但是有Chaining方式的传输。
QDMA有两组内存映射寄存器用于设定通道参数,如下图所示:
其中,QDMA寄存器集只用于配置,QDMApsedudo寄存器集可以用于提交QDMA请求。
(9)EDMA控制器的请求提交
请求包括L2控制器(Cache服务、访问未Cache的内存以及QDMA传输)、EDMA通道、HPI/PCI。
TransferCrossbar为请求排定优先级。
(10)EventEncoder
事件编码器
事件寄存器ER(包括ERL和ERH)用于捕获对应于64个EDMA通道的事件。
在事件编码器中只是负责提交请求,事件的优先局依赖于EDMA通道参数的设定,并且在TransferCrossbar中才正式排定。
(11)ParameterRAM
ParameterRAM位于EDMA控制器内部,只有设备总线可以对之进行访问。
PRAM表大小为2KB,其组成为:
①
64个24字节(即每项6个32bits的字WORD)的表项,用于保存64个通道的参数,也可作为保存Linking时候需要进行重载的通道参数;
21个24字节(即每项6个32bits的字WORD)的表项,用于保存Linking时候需要进行重载的通道参数;
③
剩余的8个字节;
每个通道参数(6WORDS)如下:
(12)EDMAChaining
传输
Chaining传输的含义是当一个EDMA通道传输完成时,触发另一个EDMA通道的传输。
TCINT需要设为1,根据当前通道的(TCCM:
)TCC值,设定CCER(CCERL+CCERH)的)(TCCM:
)TCC位的值,表示当前通道传输完成后触发(TCCM:
)TCC通道的数据传输。
Chaining传输也可以交替性传输完成,使用ATTC指定要触发的通道。
自己的总结
OPTION字段
32bit的OPTION控制寄存器
Bit31:
优先级标识,0normal,1-supervisor.
Bit24-27(4bit):
?
Bit
A/ABSynchronize的区别
它们的本质区别是每次CC提交到TC的数据不一样
A模式一次提交一个Array,而AB模式一次提交一个Frame。
它们就有以下的区别:
A模式中:
1.BCNT有效并会递减
2.CCNT在BCNT减为0时就会减1
3.BCNTRLD在BCNT减为0是就会被加载到BCNT中。
也就是说每个FRAME的BCNT应该一样,因为在每次BCNT减为0时,新加载的BCNT都是一样的。
4.如果是能了intermediate中断或chain事件,则会在每次BCNT减1时触发
5.SRCCIDX/DSTCIDX都是有效,是前一Frame最后一个Array的头与后一Frame第一个Array的头的偏移
AB模式中:
1.BCNT有效,但是不会递减。
因为每次都加载一个Frame。
2.CCNT有效会递减1。
3.BCNTRLD在AB模式下无效,因为BCNT不会变化,所以不需要重载。
4.如果是能了intermediate中断或chain事件,则会在每次CCNT减1时触发
5.SRCCIDX/DSTCIDX都是有效,是前一Frame第一个Array的头与后一Frame第一个Array的头的偏移
它们有以下相同点:
1.如果是能了Complete中断或chain事件,在CCNT减为0时,都会触发
2.SRCBIDX/DSTBIDX都是有效的,都是同一Frame内相邻两个Array头的偏移
关键概念
edmaNum(Instance)
CSL_TPCC_0
CSL_TPCC_1
CSL_TPCC_2
是指DSP可以同时支持3个EDMA实例,它们分属在不同的区域。
现在我们紧紧支持一个,就是CSL_TPCC_0。
所以所有的地方都是使用0.
Regions
TheEDMA3channelcontrollerdividesitsaddressspaceintoeightregions.
ActivememoryprotectioncanbeusedinconjunctionwithregionssuchthatonlyaspecificEDMAprogrammer(forexample,privilegeidentification)orprivilegelevel(forexample,userversussupervisor)isallowedaccesstoagivenregion,andthustoagivenDMAorQDMAchannel.
Regions可以用来进行资源保护。
每个用户使用1个R,然后各个用户的R资源,比如DAM/QDMAchannel等,是不能互相访问的。
Applicationsoftwarecanbedesignedtouseregionsorignorethemaltogether.
当然,用户也可以不使用R,把所有资源合在一起使用。
代码:
#defineCSL_EDMA3_REGION_00
#defineCSL_EDMA3_REGION_11
#defineCSL_EDMA3_REGION_22
#defineCSL_EDMA3_REGION_33
#defineCSL_EDMA3_REGION_44
#defineCSL_EDMA3_REGION_55
#defineCSL_EDMA3_REGION_66
#defineCSL_EDMA3_REGION_77
全局变量
ghEdmaModule
CSL_Edma3HandleghEdmaModule
=&
gFedmaObjOpenanEDMAInstance
这个全局变量是一个EDMAInstance,它记录了此Instance(0)的信息,包括寄存器MMR以及各种规格。
/*Instance0:
PopulatetheBaseAddress...*/
pBaseAddress->
regs=(CSL_Edma3ccRegsOvly)CSL_EDMA0CC_REGS;
//0x02700000
/*PopulatetheConfigurationInformationforthisinstance.*/
pCfgInfo->
numDMAChannel=CSL_EDMA3_TPCC0_NUM_DMACH;
//16
numQDMAChannel=CSL_EDMA3_TPCC0_NUM_QDMACH;
///8
numINTChannel=CSL_EDMA3_TPCC0_NUM_INTCH;
numParamsets=CSL_EDMA3_TPCC0_NUM_PARAMSETS;
//128
numEvque=CSL_EDMA3_TPCC0_NUM_EVQUE;
///2
numRegions=CSL_EDMA3_TPCC0_NUM_REGIONS;
IsChannelMapping=TRUE;
IsMemoryProtection=TRUE;
gEDMAChannelObjPool
CSL_Edma3ChannelObjgEDMAChannelObjPool[CSL_EDMA3_NUM_DMACH64];
记录了每个被使用Channel的参数。
DMA与QDMA通用结构体
gEDMAChannelPool
SEDMAChannelElementgEDMAChannelPool[CSL_EDMA3_NUM_DMACH64];
它是一个Transfer元素。
每个元素包含了Transfer使用的channelObject,以及使用的PaRAM
gSEDMAChannelCallbackPool
SEDMAChannelCallbackgSEDMAChannelCallbackPool[CSL_EDMA3_NUM_PARAMSETS256];
每个PaRAM的回调函数。
gEDMACoreChannelPool
每个CPU预留的DMA号
APPs
DMAChannelAlloc--channel
DMAChannelFree
分配一个channel。
如果不是channel指定分配,则会从为此CPU预留的9个channel中分配。
在分配时,会设置channel使能占用标志,并使能对应channel的中断标志。
调用的函数包括:
CSL_edma3ChannelOpen—Object/Handle
OpenaEDMAObject。
打开一个EDMAObject,除了基本的channel信息外,还有其Instance信息等
//CSL_Edma3ChannelHandle就是Object
DMATransferAlloc1D/DMATransferAlloc3D--PaRam
分配一个PARAM,并把参数装载进去
DMATransferConfig
PaRAM软件映射的设置
@param[in]PaRAMEntryNumber要设置的Param编号<
512(实际是128个)
@param[in]PaRAMSetRegister要设置的寄存器
@param[in]newValue设置的值
DMAChannelStartTransfer/EdmaTrigger
触发某个EDMAchannel的传输动作。
DMAChannelStartTransfer函数中仅仅是设置事件标志。
Questions
EdmaTrigger没有使用。
DMAChannelSetTransfer
Interrupts
EDMAIsr
StartUpTimingConfigMapEvents
InitialOperation
是在odo_init_config_handler1的硬件初始化阶段的StartUpHwConfig中初始化EDMA的
EDMAModuleInit
打开EDMA的Instance0记录到ghEdmaModule中
1.获取此Instance的MMR以及规格数据(参考全局变量解释)
2.对此Instance进行寄存器初始化
3.初始化TC的6个队列的优先级
4.初始256个PaRAM的MMR的SRC为NULL
5.Region设置(cpu0-1cpu1-2cpu2-4)
a)使能此Instance的Region功能隔离各个CPU的默认channel
b)在Region内使能对应channel的中断
c)在Region内使能QDMA功能
QDMAChannelInit
会打开一个此CPU默认使用的一个QDMAchannel。
QDMA的channel号在软件是从64开始,在MMR中还是从1开始
1.在本CPU的Region内打开此CPU的默认QDMAChannelghQDMAChannel
2.设置此Channel的PaRAM号(cpu0-64cpu1-65cpu2-66)
3.设置此channel的triggerword为b-111
4.使能此RegionQDMA的中断
5.设置此channel使用的TC队列号为5
6.设置此channel的中断回调函数QdmaIsr到gTccCallbackPool
EDMAChannelPoolInit
Set
gEDMAChannelPool[i].status=FALSE
gSEDMAChannelCallbackPool[i].cb=GLO_NULL;
Capability(规格)
CSL_EDMA3_NUM_DMACH//64DMAchannelnumber
CSL_EDMA3_NUM_QDMACH//8QDMAchannelnumber
Channelsallocate(0-63channel)
/*EDMAChannelsforCPU1.Channelcannotbegreaterthan63.*/
12,13,14,15,32,33,34,35,54//9个
/*EDMAChannelsforCPU2.Channelcannotbegreaterthan63.*/
44,45,47,48,49,50,51,52,62//9个
/*EDMAChannelsforCPU3.Channelcannotbegreaterthan63.*/
53,55,56,57,58,59,60,61,63//9个
剩余37个
DMARingBuff
初始化配置-StartUpEdmaRingBufferConfig
此函数在OS_PROCESS(StartProcess)中调用
EdmaDriverInit
DMA初始化,完成的事件如下:
GPIOEvent事件DMAUSED_CFG_CHANNEL_FOR_GPIO_EVENTS初始化
使用EDMA的步骤
需要使用的情况
一个Faraday上CPU之间的数据搬移
从一个CPU的内存中把数据搬移到另一个CPU的内存中。
在有第三方器件时,如果其中没有DMA驱动,也需要如此搬移。
分配一个channel
DMAChannelAlloc
分配一个PaRam
DMATransferAlloc1D/DMATransferAlloc3D
根据业务需要选择1D还是3D发送方式
SetTransfer
把此paRam的序号设置到DCHMAP[channel]中
StartTransfer
DMAChannelStartTransfer。
Startchanneltransfer。
使用EDMA的业务
Rake
AifHandlerFde.c---FDE_SendAifFdeConfReq
AIF_FDE_CONF_REQ_MSG请求天线配置数据
SPPE(InterfacebetweenL1TraandTX)
SPPE_Monitor.c----setupSnapShotDma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDMA与QDMAself summary EDMA QDMAself