WINCE5.0+S3C2440下DM9000驱动下的移植

时间:2022-06-01 21:40:27
   由于我的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口),请各位高手指点一下。

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));

#4


在device.cpp中函数NIC_DEVICE_OBJECT::DeviceRegisterAdapter(void)中设置总线rBWSCON和rBANKCON5的设置

#5


注意下面这个要点:
#define DM9000_DATA_OFFSET   0x04这个参数取决于CMD接在Addr几上,Addr1为2,Addr2为4

#6


感谢各位!参找sibling520的意见,我在NIC_DEVICE_OBJECT::DeviceRegisterAdapter(void)函数里面添加了对rBWSCON和rBANKCON5的设置及设置GPGCON来设置设置GPIO为EINT9(原来这个函数是没有这些的).但编译烧写之后还是出现以上问题.请各位大侠继续给力呀!小弟在此谢过了

#7


该回复于2011-03-10 13:33:58被版主删除

#8


ID号都能读对了,还是看看什么地方一直调用 MiniportReset、MiniportSetInformation、MiniportQueryInformation、MiniportCheckForHang 这几个吧。

#9


该回复于2011-03-14 09:12:44被版主删除

#10


该回复于2011-08-24 10:32:20被版主删除

#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));

#4


在device.cpp中函数NIC_DEVICE_OBJECT::DeviceRegisterAdapter(void)中设置总线rBWSCON和rBANKCON5的设置

#5


注意下面这个要点:
#define DM9000_DATA_OFFSET   0x04这个参数取决于CMD接在Addr几上,Addr1为2,Addr2为4

#6


感谢各位!参找sibling520的意见,我在NIC_DEVICE_OBJECT::DeviceRegisterAdapter(void)函数里面添加了对rBWSCON和rBANKCON5的设置及设置GPGCON来设置设置GPIO为EINT9(原来这个函数是没有这些的).但编译烧写之后还是出现以上问题.请各位大侠继续给力呀!小弟在此谢过了

#7


该回复于2011-03-10 13:33:58被版主删除

#8


ID号都能读对了,还是看看什么地方一直调用 MiniportReset、MiniportSetInformation、MiniportQueryInformation、MiniportCheckForHang 这几个吧。

#9


该回复于2011-03-14 09:12:44被版主删除

#10


该回复于2011-08-24 10:32:20被版主删除

#11


请问楼主解决问题了没有,我遇到同样的问题啊