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

OMAPL138的DSP端EDMA3数据传输若干问题

TI工程师您好,

      我在用OMAPL138中startware的EDMA的例程时,传输一个100Bytes的连续数据,发现有以下几个疑惑的地方;

1,srcAddr地址在DDR2中,destAddr地址在shareRAM中,(即DD2->shareRAM,下同),观察到的destAddr地方都是0,没有传输成功,但IPR却能置位。

2、DD2->DD2时,也不能传成功,目标地址上都是0 ,但IPR却能置位;

3、shareRAM->shareRAM时,数据成功传递,且数据都正确;

4、shareRAM->DDR2时,数据部分传递,只有前十几个数据传递了,后面的数据都是0。

我不太清楚什么原因导致了上述情况的发生?是否在同一块区域不是使用EDMA,望TI工程师能帮忙解惑。

fei chen2:

后续又上网看了很多有关EDMA的帖子,发现很多问题的原因都出在cache,自己尝试了关闭cache,确实可以实现正常传输。但随之问题又出现了,我的cache是根据TI工程师的建议配置优化的cache,能够实现运算加速,

 CacheEnableMAR((unsigned int)0xC0000000, (unsigned int)0x00018000);

CacheEnable(L1PCFG_L1PMODE_32K | L1DCFG_L1DMODE_32K | L2CFG_L2MODE_128K);

这部分cache优化以后是要用到的,所以不能关闭。请问有在不关闭cache的情况下实现EDMA的传输么?

Tony Tang:

回复 fei chen2:

目的地址在EDMA传输前是否被CPU访问过?如果访问过,那么是这块内存被Cache了,你看到的可能只是Cache里的内容,而不是物理内存的内容。可以打开memory窗口,输入目的地址,对比勾选/不勾选窗口的L1D, L2,看目的地址的内容是否有变化来判断。

建议:开始EDMA传输前,做一个Cache invalid操作。EDMA传输完后,不要做Cache write back操作哟!

fei chen2:

回复 Tony Tang:

谢谢Tony Tang的回复,

你对Cache的分析很正确,从memory窗口中看数据确实在Cache中,而非物理内存中。

我仔细考虑了下您给的建议,每次EDMA3传输前做一次Cache invalid操作,发现Cache invalid函数会调用IntGlobalDisable()操作,我的程序需要中断触发EDMA3传输参数,中断频率20k,不知道函数中调用的中断关闭操作会不会对我程序的中断产生严重影响。

在使用Cache invalid操作时发现,调用函数耗费了大量CPU时间,网上的帖子也有类似的说法,如果我要传300个16位的数据是不是有点得不偿失了,本来想借用EDMA 来节省CPU时间来做其他操作,但Cache invalid操作已经耗费了大量时间。

其它几点疑问:1、有工程师说把源地址和目标地址定义在Cache映射区外部,这样传输的数据就不会被Cache,但通过实验没有达到效果;

                         2、有人使用UARTDMA或SPIDMA的程序例程操作时,是否也存在数据被Cache的情况?

谢谢

赞(0)
未经允许不得转载:TI中文支持网 » OMAPL138的DSP端EDMA3数据传输若干问题
分享到: 更多 (0)