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

求帮助,多核多通道DMA传输一个循环内又取又存数据的冲突

TI的专家你好,现在困扰我的问题主要是在一个循环里DMA又取又存有冲突哈.现在如果单独的多核同时DMA取数(DDR3->L2)或者DMA存数(L2->DDR3)没有问题,我现在只用了PING缓存.但我发现个很奇怪的问题,希望TI的专家帮我看看谢谢…

我的程序架构:

(8核同步情况下)

for(i=0;i<1024;i++)

{

(1)DMA传输(DDR3->L2);

(2)读取DMA传输到L2里的数据;

(3)DMA传输(L2->DDR3);

(4)读取DMA传输到DDR3里的数据;

}

这样的话在第二步里读取L2的数据就会发现DMA传输会出现掉包的现象。但第四步就不会出现掉包的现象。其中(1)和(3)中的L2和DDR3的地址都是不一样的。但是我现在调整下顺序就不会出现掉包的现象如下:

for(i=0;i<1024;i++)

{

(1)DMA传输(DDR3->L2);

(2)DMA传输(L2->DDR3);

(3)读取DMA传输到L2里的数据;

(4)读取DMA传输到DDR3里的数据;

}

这样在读取(3)和(4)中的数据时就都不会出现掉包的现象。。。。但这样又不符合我的主程序架构,请问这是哪里引起的冲突了?急求解答这个问题已经困扰我半个多月了

如果需要我DMA的代码我再贴出哈

jie lei:

可以肯定的是,在正确使用的前提下,在一个循环里DMA又取又存是没有问题的。这里需要注意的是,EDMA3具备Early complete的能力,在查询或edma  complete中断到来的时候,仅仅是paramset从cc装入了TC,这时去读取数据,就会发现数据存在问题,所以问题的根源还在于EDMA的使用方式,论坛的VLDPC是个非常好的例子,可以参考一下EDMA乒乓操作的实现部分

JY LI:

回复 jie lei:

jie lei 你好,我原先也是过EDMA乒乓操作,但在多核同时DMA存数时,pong缓存会出现掉包的现象,所以才只有了一个ping缓存.我想问问你说的VLDPC是在那里了,我在论坛里没有找到了?

Andy Yin1:

1. 两个DMA使用的是同一channel还是不同的channel?

2. 在每次启动完数据传输后,是如何获得数据传输完成的,即在Core去读数时需要保证数据传输完成,可以通过查询相应channel的TPCC bit是否置位的方式来保证。

赞(0)
未经允许不得转载:TI中文支持网 » 求帮助,多核多通道DMA传输一个循环内又取又存数据的冲突
分享到: 更多 (0)