总结一下DM6437中的EDMA的使用出现的问题,方便以后再开发定位问题。
1.EDMA Link 和 Chain的区别
link实现了DMA的自动重加载(非静态模式),需要两个param
chain是不更新param set表,直接event对应的param。
2. transfer completioncode(TCC)
a.OPT中的TCC决定了pending bit的位置,不需要做到和channel的一一对应。故理论上同一个TCC可以对应多个channel
b.如何使chain方式下,这个TCC决定了下次event触发的channel event id.
3. Q0,Q1、Q2和TC0、TC1和TC2
DM6437的EDMA控制器有3个Queue。对应的是Transfer control. 64个channel可以配置到指定的queue中,当然Q0 priority最高,默认64个都配置到Q0上。
4 EDMA最优的模式:ACNT≤DBS ACNT is power of 2 BIDX=ACNT BCNT≤1023 SM/AM = 0(Increment)
5.在link 模式下OPT.static =0时。最终传输完成后会link到0xffff,即设置param为一个NULL param
6,对于A与A-B SNYC模式的event数
对于A模式,需要BCNT*CCNT个event。即如果外设peripheral的话需要触发出这么多个Event事件
而对于A-B模式,只需要CCNT个Event,故对于常常二维2D处理时,只需要CCNT =1 就可以满足,故手动一次设置就可以。
而如果是3D的话,手动的话就需要CCNT次EVENT(考虑到CCNT交小时,可以考虑使用运行OPT.static = 0,并且Intermediate chain(每个TR即2D后启动再Event到自己));3D模式使用的不是很多。
7. MCBSP和EDMA结合使用时出现只能启动一次transfer?
因为在完成基本的传输后,最后还会发送一个Event触发了一个Null,会置位ESR,从而阻塞了Q0。故需要清除ESR寄存器。相同通道的DMA才可以再次工作