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的EDMA传输问题



专家你好:

求助C6748的EDMA3传输问题,现在使用EDMA3进行数据的DDR存储,其中用到了DSTBIDX寄存器。由于需要存储的数组地址偏移量较大,而手册中写明DSTBIDX寄存器的数值范围在-32768到32767之间,所需的偏移量超过这个范围,请问如何编写程序才能满足大偏移量的数组存储呢?

  • 我理解你的A count很大,所以bindex不够用,能不能减小Acount, 加大C count,利用AB同步,即axb等于原来的A count这种方式来实现,当然这样又会涉及到cindex。

    还是说说你的数据结构情况吧,是一个什么样的数组,要搬成什么样子,是用什么触发传输?

  • 感谢您的回复:

    我的数据结构是有一个大的二维数组,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周期,这样应该属于正常情况了吧。

  • 对于EDMA,能配置起来正常运行,就差别不会太大了,如果还想做进一步优化,可以调整一下CFGCHIPx的EDMA的burst size。还有DDR寄存器的PBBPR寄存器。

  • 你好:

    我是小萌新,老师布置了任务,要利用EDMA完成65536*65536二维数组的搬运,一直没有做出来。我是真的不会,在网上找了一些简单例子也没有对数据搬运成功。这个东西困扰我很久很久了,并且一直没能完成任务,让我很焦急。如果您有幸能够看见我的回复,并且愿意帮助我的话,可不可以把你的程序发给我参考一下?不胜感激!!