TI中文支持网
TI专业的中文技术问题搜集分享网站

使用Memory_Performance中的edma_Throughput_Test函数时出错

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都不能传数,可能是初始化这里出现了问题。
十分感谢!!!

赞(0)
未经允许不得转载:TI中文支持网 » 使用Memory_Performance中的edma_Throughput_Test函数时出错
分享到: 更多 (0)