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

AM3358中GPMC的burst+DMA配置和速率问题

接着前面的帖子,之前想尝试GPMC的burst功能,发现仅仅读出了一个数,原因是因为自己没有开启DMA功能。于是这两周的重点又放在了GPMC+DMA的结合之上。

先重新提一下我的平台和连接,我是要实现FPGA和ARM之间的通信,采用的GPMC接口,同步模式,接口宽度为16bit。FPGA主要是传递1024*1024*16bit图像过来。

由于GPMC的single模式+DMA速率太慢,所以考虑利用GPMC的burst模式+DMA。那么,问题来了。

GPMC侧,我将config1配置为burst模式,pagelength设置为16words,然后rdaccesstime设置为2,rdcycletime设置为3。

DMA侧,由于是ARM去读FPGA,而FPGA侧主要是一个FIFO,所以我们将SRCBIDX和SRCCIDX都配置为0,另外ACNT设置为2,BCNT设置为1024。DSTBIDX设置为1024.然后采用sync_AB读取模式。

DMA中的OPT配置如下:

       paramSet.opt = 0u;

       paramSet.opt &= EDMA3CC_OPT_DAM_SHIFT;   // ~(EDMA3CC_OPT_SAM | EDMA3CC_OPT_DAM);

       paramSet.opt |= (1u<<2);

       paramSet.opt |= ((EDMAAPP_DMA_TCC_NUM << EDMA3CC_OPT_TCC_SHIFT)

                         & EDMA3CC_OPT_TCC);

       paramSet.opt |= (1u << EDMA3CC_OPT_ITCINTEN_SHIFT);

       paramSet.opt |= (1u << EDMA3CC_OPT_TCINTEN_SHIFT);

然后我主要在FPGA侧用chipscope抓GPMC的波形,来观察时序图。

在测试过程中发现,如果ACNT设置为2,则波形如下: ARM侧能够顺利的将7FEA、7FED、7FE0存入DDR中。

但是这速率显然太慢,于是我将rdaccesstime设置为10,rdcycletime设置为26。另外DMA的ACNT设置为32。FPGA抓到的时序会发现CS低电平长度明显大于我们设置的值,且OE低电平对应的后半部分的数在ARM侧都没有获取到。也就是会丢数,效果和这篇帖子相同(https://e2echina.ti.com/question_answer/dsp_arm/sitara_arm/f/25/p/73309/178220?tisearch=e2e-quicksearch&keymatch=GPMC%20DMA#178220

)。而且同时FPGA采样发现GPMC_A这个地址信号会出现递增的现象,而不是我所一直读取的固定地址。

经过一段时间的反复测试发现,我只有在将DMA侧的配置参数ACNT配置为2的时候,GPMC的时序才能和我设置的参数一致,而我一旦将ACNT设置为4或者8、或者更大时,FPGA采集到的GPMC的时序一定和我ARM设置的存在较大差异(就算我DMA侧FWID配合着修改也不行)。但是ACNT配置为2的时候,也导致了一种情况,不管我GPMC那边burst长度设置的多长,不管我accesstime和cycle_time之间的间隔拉的多长,我在一个CS低电平期间都只能读走一个16bit的数,而不是我所想要的一个CS低电平周期内读走好多数走。所以导致现在GPMC+DMA速率也只有30MB左右,也就是很多帖子提到的GPMC single+DMA的速率。

PS:目前DMA配置参考的下图

所以这边咨询下大家的意见,GPMC采用burst模式+DMA结合的时候,请问是否有大神配置成功过,能够一次GPMC的cs低电平期间就读走很多字节数的?是否有关键的地方需要注意配置的?

目前看来,GPMC 的同步burst模式和DMA结合达不到理想的效果,我的邮箱是975316458@qq.com,也希望能和大家交流沟通一下这方面的问题。

Shine:

看看下面的wiki网站是否有帮助?
processors.wiki.ti.com/…/Tips_for_configuring_OMAP35x,_AM35x,_and_AM-DM37x_GPMC_registers

xiaolin wang:

回复 Shine:

谢谢回复,但是不是这个问题引起的!

赞(0)
未经允许不得转载:TI中文支持网 » AM3358中GPMC的burst+DMA配置和速率问题
分享到: 更多 (0)