我的硬件环境是基于gumstix overo的usrp-e110开发板。上面采用omap3530,在GPMC总线的分配上,CS0默认为nand flash,开发板上此处没有接flash。CS5分配给以太网使用。CS4分配给FPGA。
软件环境为ubuntu。在FPGA的GPMC驱动上,ettus公司提供了usrp_e的FPGA GPMC驱动,采用的是DMA的方式。可操作的指令为:
.owner = THIS_MODULE,
.open = usrp_e_open,
.release = usrp_e_release,
.read = usrp_e_read,
.write = usrp_e_write,
.llseek = usrp_e_llseek,
.unlocked_ioctl = usrp_e_ioctl,
.poll = usrp_e_poll,
.mmap = usrp_e_mmap,
在系统的kernel部分,初始化board_overo.c文件中,对GPMC总线进行了以下设置:
// Set up CS4, data read/write
gpmc_cs_write_reg(4, GPMC_CS_CONFIG7, 0x0); udelay(100);
// Signal control parameters per chip select
tmp = gpmc_cs_read_reg(4, GPMC_CS_CONFIG1);
tmp |= (GPMC_CONFIG1_WRITETYPE_SYNC);
tmp |= (GPMC_CONFIG1_READTYPE_SYNC); tmp |= (GPMC_CONFIG1_FCLK_DIV(2));
gpmc_cs_write_reg(4, GPMC_CS_CONFIG1, tmp);
printk("GPMC_CONFIG1 reg: %x\n", tmp); #endif
.....................
.....................
在以上的设置中,对于config1到congfig6的设置含义都理解,但是不知道为什么在这里初始化时config7设置为0,即:将CS4的使能关闭。
当系统在开发板上启动后,在/dev/设备中有FPGA接口的设备,应用程序也可以open这个设备。以太网设备驱动等也是ettus提供好的,在应用中,以太网一直都能正常工作。
现在我的问题是,在FPGA端,通过在线逻辑分析看波形时,发现CS5即以太网使能间断性的拉低工作。但是CS4一直为高。当我把kernel中board_overo.c中的初始化CS4的config7设置为0xf60时,重新换uImage后,系统启动时会报错,不能进入系统。
在看GPMC的驱动代码时,看到了里面采用了自旋锁等技术防止冲突,可是在这里如何让以太网和FPGA都能工作呢?另外在写应用程序时如何操作,有没有谁能提供对应的示范代码。
谢谢!!!!!