TI论坛
直播中

黄飞高

7年用户 231经验值
私信 关注

如果DDR cache没有被使能的话,EDMA3 数据搬移成功,使能后数据搬移不成功是什么原因?

本帖最后由 一只耳朵怪 于 2018-5-28 17:42 编辑

Hello,
目前DM8148 DSP开发进行算法优化。
我将DDR3的数据搬移到L2内存段内。
一开始用memcpy()函数,数据搬移没有问题,算法运算结果正确。
然后用自己编写EDMA3_copy()函数搬移数据,同时也没有使DDR 该段外存cache使能,方法如下:
  for(i=0;i<256;i++)
  [
     MAR->MAREG = 0;
  ]
数据搬移没有任何问题。
但是当DDR 该段外存cache使能后,重新运行该段代码,运算结果就不正确。

  DDR 该段外存cache使能方法如下:
  for(i=0;i<256;i++)
  [
     MAR->MAREG = 1;
  ]
我尝试修改使该传输数据的原地址和目标地址都是0x80对齐后,DDR 该段外存cache使能,重新运行代码,运算结果正常。
根据EDMA3文档,EDMA3传送中没有对源地址,目标地址对齐有专门要求。

能否解释这种现象原因?
谢先,

BRS,
Meng

回帖(6)

乔婧

2018-5-28 08:14:52
Meng,
EDMA是搬移到DDR的物理地址,但是如果这个DDR地址是被cache的,有可能cache里的数据在回写的时候会把DDR里的数据冲掉。
建议你看看DSP Cache user guide。下面是一片中文文档,比较容易理解:
举报

杜喜喜

2018-5-28 08:27:20
引用: 物是人非aaa 发表于 2018-5-28 08:14
Meng,
EDMA是搬移到DDR的物理地址,但是如果这个DDR地址是被cache的,有可能cache里的数据在回写的时候会把DDR里的数据冲掉。
建议你看看DSP Cache user guide。下面是一片中文文档,比较容易理解:

cache 一致性。
应为你的开辟或者使用的这段空间没有做cache 对齐处理。参考kmem_cache分配内存的原理。这个函数分配的内存大小都是和cache的最大访问位宽的倍数。
                                                                         studying & working!
举报

黄飞高

2018-5-28 08:34:15
引用: 物是人非aaa 发表于 2018-5-28 08:14
Meng,
EDMA是搬移到DDR的物理地址,但是如果这个DDR地址是被cache的,有可能cache里的数据在回写的时候会把DDR里的数据冲掉。
建议你看看DSP Cache user guide。下面是一片中文文档,比较容易理解:

Hello Chris,
非常感谢您的回复。
目前程序中,L2中没有使用与其相关的cache_wb(),cache_inv(),cache_wbInv()这些函数。
L2与L1之间的一致性是自动维护的。

BRS,
Meng
举报

黄飞高

2018-5-28 08:45:02
引用: tinlyxian 发表于 2018-5-28 08:27
cache 一致性。
应为你的开辟或者使用的这段空间没有做cache 对齐处理。参考kmem_cache分配内存的原理。这个函数分配的内存大小都是和cache的最大访问位宽的倍数。
                                                                         studying & working!

Hello,
谢谢您的回复。
但是EDMA3操作中,没有说明,edma数据搬移必须地址对齐。
如果地址必须对齐,我没有DDR cache 没有使能时,数据搬移应该也不成功。
目前只是,在DDR cache使能时,EDMA3 数据搬移不成功。
但是对齐cache line size时,数据搬移成功。
非常感谢!
BRS,
Meng
举报

更多回帖

发帖
×
20
完善资料,
赚取积分