本帖最后由 一只耳朵怪 于 2018-6-19 15:01 编辑
测试代码见附件,麻烦下载后帮忙测试一次,看看是什么问题。
测试目的:
实现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后的第一运行结果正确,循环
问题猜想:
- 从测试结果推测,感觉64个EDMA中的最后一个EDMA没有传输完成就结束了,只传输一部分数据,请问是不是不是LINK模式的配置的不对?
- 一个EMMA通道能把64个EDMA link到一起吗?
具体现象如下图所示:第2幅图是第1幅图的局部放大结果,图像的最右侧部分srcBuff1与srcBuff2不相等