我的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口),请各位高手指点一下。
11 个解决方案
#1
顶一个!各位大侠忙吗呀!多谢了
#2
我记得三星的芯片总线需要配置一下你配置了没有。
#3
在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));
// 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));
#4
在device.cpp中函数NIC_DEVICE_OBJECT::DeviceRegisterAdapter(void)中设置总线rBWSCON和rBANKCON5的设置
#5
注意下面这个要点:
#define DM9000_DATA_OFFSET 0x04这个参数取决于CMD接在Addr几上,Addr1为2,Addr2为4
#define DM9000_DATA_OFFSET 0x04这个参数取决于CMD接在Addr几上,Addr1为2,Addr2为4
#6
感谢各位!参找sibling520的意见,我在NIC_DEVICE_OBJECT::DeviceRegisterAdapter(void)函数里面添加了对rBWSCON和rBANKCON5的设置及设置GPGCON来设置设置GPIO为EINT9(原来这个函数是没有这些的).但编译烧写之后还是出现以上问题.请各位大侠继续给力呀!小弟在此谢过了
#7
#8
ID号都能读对了,还是看看什么地方一直调用 MiniportReset、MiniportSetInformation、MiniportQueryInformation、MiniportCheckForHang 这几个吧。
#9
#10
#11
请问楼主解决问题了没有,我遇到同样的问题啊
#1
顶一个!各位大侠忙吗呀!多谢了
#2
我记得三星的芯片总线需要配置一下你配置了没有。
#3
在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));
// 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));
#4
在device.cpp中函数NIC_DEVICE_OBJECT::DeviceRegisterAdapter(void)中设置总线rBWSCON和rBANKCON5的设置
#5
注意下面这个要点:
#define DM9000_DATA_OFFSET 0x04这个参数取决于CMD接在Addr几上,Addr1为2,Addr2为4
#define DM9000_DATA_OFFSET 0x04这个参数取决于CMD接在Addr几上,Addr1为2,Addr2为4
#6
感谢各位!参找sibling520的意见,我在NIC_DEVICE_OBJECT::DeviceRegisterAdapter(void)函数里面添加了对rBWSCON和rBANKCON5的设置及设置GPGCON来设置设置GPIO为EINT9(原来这个函数是没有这些的).但编译烧写之后还是出现以上问题.请各位大侠继续给力呀!小弟在此谢过了
#7
#8
ID号都能读对了,还是看看什么地方一直调用 MiniportReset、MiniportSetInformation、MiniportQueryInformation、MiniportCheckForHang 这几个吧。
#9
#10
#11
请问楼主解决问题了没有,我遇到同样的问题啊