使用AM3354(跑linux系统,不带设备树的版本)的GPMC与FPGA连接,使用CS1,连接线为AD0-AD15,GPMC的时序配置为
GPMC_CONFIG1= 0X00601000
GPMC_CONFIG2= 0X00011001
GPMC_CONFIG3= 0X00020201
GPMC_CONFIG4= 0X08031003
GPMC_CONFIG5= 0X000F1111
GPMC_CONFIG6= 0X0F030080
由于数据速率需要达到40MB/s,所以使用EDMA模块。
EDMA部分代码参考http://processors.wiki.ti.com/index.php/AM335x_EDMA_Driver%27s_Guide中edma_test.c文件中的mem2mem的相关配置;
目前问题:
DMA读操作,在arm部分,驱动中callback函数不能正常返回,导致数据不能正常读回;从FPGA部分看去,在进行读操作时,CS信号不能正常拉低,oe信号也不正常;
各位大神,有调通edma进行gpmc与fpga通信的,帮忙分析分析是啥问题,是时序参数问题还是别的啥问题。
在此多谢!
Shine:
能否先用EDMA在内部RAM搬移数据块试试,看是不是EDMA的配置问题。
xiaobin wu:
回复 Shine:
多谢指点,单独测试使用edma_memtomemcpytest_dma函数,可以测试通过,然后加到gpmc的驱动中,dma操作时,src地址设置为gpmc_cs_request(GPMC_CS,SZ_2K,&fpga_dev.mem_base)函数中的fpga_dev.mem_base,dst地址设置为自己申请的dma空间的物理地址(参考dma测试程序)。但是读fpga操作时,卡到while(irqraised1 = 0u);的位置,fpga部分看到cs信号和oe信号只动作了一个字节,然后就没动静了,情况基本和之前一致,目前还是不确定是啥问题;
不知道还有哪我没有注意到的地方没?
期待您的回复。
再次感谢!!!
JUN HU:
你好,我也是在调试GPMC的东西,已经能正常读取GPMC_CONFIG寄存器的数据,但是奇怪的是,编写驱动来驱动io_base地址却没有办法产生波形,你这边有什么好的建议吗?