各位专家好:
最近在做EDMA多核并行传输时遇到一些困难,有两个问题想请教各位,希望能得到大家的帮助!
EDMA中的channel可看做是一个传输事件,用于触发一个EDMA通道进行数据传输。记得Andy在一个帖子中曾说过,“IPR寄存器是用来记录产生中断的EDMA channel源,从低到高每一个bit依次对应相应的channel,如IPR bit0对应channel 0, IPR bit1对应channel 1,所以如果查询的话就是看channel0或1的任务是否完成并产生中断。” 就这句话我现在有两个疑问。
问题1: 对于PingPong模式的数据传输,是否只是用一个channel进行数据传输?如果是,那么Ping PaRAM和Pong PaRAM中所设置的TCC是否是一样的的?在使能中断时,是否只需将IER中这一个channel所对应的位置1呢? (我是看到有一个PingPong例程中,只用了channel 0,但是Ping PaRAM和Pong PaRAM的TCC分别为1和2,在中断时能寄存器中使能了0和1位,对应于上面一句话也就是说这里的IPR bit0和IPR bit1均对应于channel 0)
问题2:6678的EDMA模块中有3个CC,共计10个TC,也就是说可以允许10个channel的并行数据传输,每一个channel对应一个TC,不知这样理解是否正确?我想请教的问题是,在进行EDMA并行数据传输时,CSL中哪一语句是将channel和TC做一一映射关系的,是CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_0);这句话吗?其中的Que_0—Que8又作何理解?
问得比较多,也比较琐碎,还望各位专家见谅,希望能早些得到帮助!
谢谢各位!
Ryan KU:
回复 Andy Yin1:
Andy Yin1您好:
感谢您详尽的解答,关于PingPong传输和并行传输我还有两个问题想请教您。
1. 关于PingPong传输,我在工程中将channel 0 MAP 至PaRAM 0,在调试的时候发现必须要将hParamPing和hParamPing均设置成CSL_edma3GetParamHandle(hChannel, 0, &status); 我的疑问是,PingPong模式下Ping和Pong的PaRAM ID是否必须要设置成一样,只是各自PaRAM中的内容有所不同?
2. 关于多核并行传输,我在完成单核PingPong模式的 Block Move取数–算数–Data Sorting存数 的基础上,测试了处理时间,由于我的算数时间小于取数存数时间,因此最后的单核总时间就是取数存数的时间和(大概为0.3s),这也符合EDMA的传输机理。但是我用双核并行处理时,核0和核1各自处理一半数据,测试时间后却发现两个核都用了0.4s,也就是说双核并行时处理时间反而增加了,我尝试了多种情况下不同核用不同的CC和TC,channel和PaRAM也不同,请问专家这可能是什么原因导致的呢?多核并行EDMA传输时又需要注意些什么呢?
不知Andy Yin1可否提供多核并行EDMA传输的例子供参考学习。
谢谢!!!
qian cui:
请问你多核edma传输搞定没有,具体怎么做的,能告知吗,谢谢
Chi Wang1:
回复 Ryan KU:
Ryan KU:
你好。请问有关于EDMA多核并行传输的问题解决了吗?我采用DSP 6678中的4个核,从Core0~3。使用EDMA CC1,多核核0~3分别使用TC0~TC3。并且使用不同的PaRAM和通道。每个核传输一半的数据。可是发现无法进行并行处理。处理时间长度仍然与单核处理整块数据的长度大致相同。请问多核调用EDMA并行传输如何设置?非常感谢!