专家你好:
求助C6748的EDMA3传输问题,现在使用EDMA3进行数据的DDR存储,其中用到了DSTBIDX寄存器。由于需要存储的数组地址偏移量较大,而手册中写明DSTBIDX寄存器的数值范围在-32768到32767之间,所需的偏移量超过这个范围,请问如何编写程序才能满足大偏移量的数组存储呢?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
专家你好:
求助C6748的EDMA3传输问题,现在使用EDMA3进行数据的DDR存储,其中用到了DSTBIDX寄存器。由于需要存储的数组地址偏移量较大,而手册中写明DSTBIDX寄存器的数值范围在-32768到32767之间,所需的偏移量超过这个范围,请问如何编写程序才能满足大偏移量的数组存储呢?
感谢您的回复:
我的数据结构是有一个大的二维数组,float型256*16000大小,所以需要放置在DDR中。在每个采样间隔传输进入256个数据,需要按照列存储,也就是转置一下,之后采样完成后将每一行的16000个数据再通过EDMA导回内存运算。这样在采样间隔中我的DSTBIDX也就是16000*4,这就会造成寄存器溢出。
我也考虑过在采样间隔内不进行转置,也就是数据变成16000*256,这样采样间隔内的数据变成连续存储,能够完成任务。采样结束后将每列的16000个数据通过EDMA导回内存运算,这样SRCBIDX就变成256*4,也不会溢出了。
但是现在遇到问题,就是用改进过后的方法二维DMA往回导数的时候需要很多的时钟周期才能够完成,感觉是不正常的,请问问题可能出在哪里呢?
现在统计二维传输一个float数据需要500多个周期,这是不正确的,二维传输数据EDMA传输速度会有所下降吗?
从上面来看,应该是A-sync方式,即一个触发搬一个Acount,即4字节。这种小数据的传输主要时间就是其overhead,下面文档第2章有参考意义,虽然不是同一芯片的测试结果(我一时找不到C6748的数据,其实你可以在你现有测试程序基础上将Acount设为4byte和8byte各测一时间,相减即为传一个4字节的时间,剩下的就是overhead),但可以帮助理解overhead是怎么回事。
http://www.ti.com/lit/an/spraag8/spraag8.pdf
感谢您的回复:
我原来的代码理解上可能有一些问题,现在我将OPT中的传输方式改为ABSYNC就可以了,计算下来传输一个浮点数大概需要10个CPU周期,这样应该属于正常情况了吧。