q求求各位大神帮忙解答。
用的C6678芯片,按Memory_Performance例程调用edma_Throughput_Test函数进行EDMA来书数据。
edma_Throughput_Test原型为:
void edma_Throughput_Test (Uint32 src, Uint32 dst, Uint32 uiACount, Uint32 uiBCount, Uint32 uiIndex, CSL_TpccRegs* EDMACCRegs, Uint32 TC_channel);
之前使用了一个核 Core0时 没有问题,用的EDMA控制器为:
EDMACCRegs1= gEDMACCRegs[1];
channel1 = 0;
EDMACCRegs2= gEDMACCRegs[2];
channel2 = 0;
现在需要使用四个核,其中0核EDMA初始化,1核、2核、3核传输数据,1-3核每个核需要两个通道传输,设置如下:
EDMACCRegs1= gEDMACCRegs[DNUM-1];
channel1 = 0;
EDMACCRegs2= gEDMACCRegs[DNUM-1];
channel2 = 1;
不知道为什么,总是运行到下面一步停止,也就是等待edma over的时候停止了。
/* Wait for completion */
while ((EDMACCRegs->TPCC_IPR&(1<<(TC_channel))) ==0);
//clear completion flag
EDMACCRegs->TPCC_ICR=0xffffffff;
弄了好久还是不知道什么原因,请问各位大神是怎么回事 ,万分感谢!!!!
Shine:
请问是每个核都出现这样的错吗?核0也是?
Mr.Night:
回复 Shine:
单核运行的时候只用了核0,这个时候没出错。多核运行的时候,0核不再搬移数据,只有1-3核使用EDMA,此时,1-3核都出现了问题。停在了 while ((EDMACCRegs->TPCC_IPR&(1<<(TC_channel))) ==0)这一步
Mr.Night:
q求求各位大神帮忙解答
Shine:
回复 Mr.Night:
先只让核1搬数据,看EMDA是否能complete。
Mr.Night:
回复 Shine:
不行事实证明 同一时刻一个CCRegs只能有一个通道在运行否则就会出错
我的世界不荒凉:
回复 Mr.Night:
你好,我也遇到了和您同样的问题,核0是可以正常传数的,但是其他核搬数据就会出错;如果在核1中初始化,核1也会正常搬数据,请问您问题解决了吗???
Mr.Night:
回复 我的世界不荒凉:
没有解决应该是我工程中某些参数设错了。 在别人那可以跑通在我这跑不通 。 所以最后就每个核只用一个EDMA控制器了,数据pingpong操作, 计算时间满足要求了 ,后来也就没管了。
我的世界不荒凉:
回复 Mr.Night:
那可以看一下你核0的初始化代码都做了哪些吗?我的核1、2都不能传数,可能是初始化这里出现了问题。
十分感谢!!!