由于我的2440的BSP包里面只有CS8900的驱动程序,所以我把优龙的DM9000的驱动程序直接拷到
我的BSP包DRIVERS的目录下面,然后做如下修改:
1。修改DRIVERS下的DIR目录,添加对DM9000的编译的支持
2. 由于我使用的是GCS5作为DM9000的片选,所以修改注册表和DM9000驱动程序中g_szDm9ConfigParams参数的
IO_BASE_ADDRES的地址,由0x20000300改为0x28000300。
3. 由于我使用EINT9作为中断信号,所以就修改cfw.c文件中当产生EINT9号中断时就产生SYSINTR_DM9000
事件,并修改armint.c文件中的程序使在处理完该事件后能清除中断。
经过以上编译之后,然后进行烧写之后,在启动之后一直循环出现如下信息:
ENTER MiniportReset
[dm9: Chip signature is 90000A46
ENTER MiniportSetInformation
ENTER MiniportSetInformation
ENTER MiniportQueryInformation
ENTER MiniportCheckForHang
ENTER MiniportReset
[dm9: Chip signature is 90000A46
ENTER MiniportSetInformation
ENTER MiniportSetInformation
ENTER MiniportQueryInformation
ENTER MiniportCheckForHang
ENTER MiniportReset
[dm9: Chip signature is 90000A46
。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。
从调试信息可以看到DM9000启动后MiniportReset、MiniportSetInformation、MiniportQueryInformation、MiniportCheckForHang
被反复调用,请各位高手指点一下是怎么会事,还有哪些地方做些修改?还有一个比较奇怪的问题就是怎么在DM9000驱动中没有对IO口的定义呢(即定义GPG1口为ENIT9口),请各位高手指点一下。
------解决方案--------------------------------------------------------
我记得三星的芯片总线需要配置一下你配置了没有。
------解决方案--------------------------------------------------------
在BSPIntrInit()中设置GPIO为EINT,看我的
// Set GPG1 as EINT9
value = INREG32(&pOalPortRegs->GPGCON);
OUTREG32(&pOalPortRegs->GPGCON, (value & ~(3 << 2))
------解决方案--------------------------------------------------------
(2 << 2));
// Disable pullup
value = INREG32(&pOalPortRegs->GPGUP);
OUTREG32(&pOalPortRegs->GPGUP, value
------解决方案--------------------------------------------------------
(1 << 1));
// High level interrupt
value = INREG32(&pOalPortRegs->EXTINT1);
OUTREG32(&pOalPortRegs->EXTINT1, (value & ~(0x7 << 4))
------解决方案--------------------------------------------------------
(0x1 << 4));
------解决方案--------------------------------------------------------
ID号都能读对了,还是看看什么地方一直调用 MiniportReset、MiniportSetInformation、MiniportQueryInformation、MiniportCheckForHang 这几个吧。
------解决方案--------------------------------------------------------