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

【急求】link 模式的EDMA读写错误,64个dma link到一起读写错误

测试代码见附件,麻烦下载后帮忙测试一次,看看是什么问题。

测试目的:

实现64个EDMA 通过LINK方式对一段数据进行读写,每个EDMA传输数据大小4096Byte,总计传输1MB数据

测试变量:

#define   N          65536

#define  DST_ADDR1  (0x80000000)

float  srcBuff1[4*N]

float  srcBuff2[4*N]

函数说明:

函数1:

Int32 qdma_link_xfer_region (Int32 instNum, Uint8 channelNum, Int32 regionNum)

功能:把srcBuff1中的数据写到DDR3中

函数2:

 Int32 qdma_link_xfer_region_read (Int32 instNum, Uint8 channelNum, Int32 regionNum)

功能:把DDR3中数据读到srcBuff2中

测试步骤:

步骤1:初试化srcBuff1 和srcBuff2,srcBuff1赋值为0到4*N-1;srcBuff2赋值为8192;

步骤2:同过LINK方式的EDMA,调用函数qdma_link_xfer_region()把srcBuff1写到以DST_ADDR1为起始地址的DDR3中,

步骤3:通过LINK方式的EDMA,调用函数qdma_link_xfer_region_read()从以DST_ADDR1为起始地址的DDR3中读取上步写入的数据存到srcBuff2中

步骤4:通过对比srcBuff1 和srcBuff2的值,计数srcBuff1 与srcBuff2不相等的个数, (正常情况下,srcBuff1与srcBuff2的数据应该完全相等,计数应该为零)

测试结果与存在的问题:

1.通过对比分析步骤2,把srcBuff1写到DDR3 中写数据正确;

2. 实际测试发现: srcBuff2中最后4096个结果与srcBuff1中对应位置的数据不同,导出数据通过分析发现srcBuff2中的最后一部分数据在EDMA操作前后没变化?

3.  出现错误后,点击Debug 重新加载程序,然后再次运行,运行结果正确,但是再次运行错误再次出现,也就是说只有Debug后的第一运行结果正确,循环

问题猜想:

  1. 从测试结果推测,感觉64个EDMA中的最后一个EDMA没有传输完成就结束了,只传输一部分数据,请问是不是不是LINK模式的配置的不对?
  2. 一个EMMA通道能把64个EDMA   link到一起吗?

具体现象如下图所示:第2幅图是第1幅图的局部放大结果,图像的最右侧部分srcBuff1srcBuff2不相等

Jack Dong:

经过分析,初步认定是L1 cache的的问题,在Memory browser 中勾选L1cache与不勾选L1CACHE两种情况下 MCSM中的数据不同,请问该如何修改保证程序的正确性?

赞(0)
未经允许不得转载:TI中文支持网 » 【急求】link 模式的EDMA读写错误,64个dma link到一起读写错误
分享到: 更多 (0)