管理提醒: 本帖被 qq2440 从 QQ2440技术交流专区 移动到本区(2009-05-19)
小弟的板子是QQ2440,我最近在上面跑ucosII,我做网卡驱动的时候出问题了,我把读DM9000 ID的代码贴出来,请教一下
#define DM9000_ID 0x90000A46
#define DM9000_BASE 0x20000300
#define DM9000_IO DM9000_BASE
#define DM9000_DATA (DM9000_BASE+4)
#define DM9000_VIDL 0x28
#define DM9000_VIDH 0x29
#define DM9000_PIDL 0x2A
#define DM9000_PIDH 0x2B
#define DM9000_outb(d,r) ( *(volatile unsigned char *)r = d )
#define DM9000_inb(r) (*(volatile unsigned char *)r)
unsigned char DM9000_ior(unsigned char reg)
{
DM9000_outb(reg,DM9000_IO);
return DM9000_inb(DM9000_DATA);
}
void Main(void)
{
unsigned long id;
rBWSCON=(rBWSCON|0x000f0000)&0xfff1ffff;
rBANKCON4=0x0700;
id =DM9000_ior(DM9000_VIDL);
id|=DM9000_ior(DM9000_VIDH)<<8;
id|=DM9000_ior(DM9000_PIDL)<<16;
id|=DM9000_ior(DM9000_PIDH)<<24;
if(id==DM9000_ID) printf("dm9000 is found");
else printf("dm9000 is not found");
}
这样读出来的ID=0x46464646,我改成这样
id =DM9000_ior(DM9000_VIDH); //也就是把DM9000_VIDH放在最前面
id|=DM9000_ior(DM9000_VIDL)<<8;
id|=DM9000_ior(DM9000_PIDL)<<16;
id|=DM9000_ior(DM9000_PIDH)<<24;
读出的ID是0x0a0a0a0a
同样把DM9000_PIDL放在最前面读出的ID是0x00000000
把DM9000_PIDH放在最前面读出的ID是0x90909090
不知道哪儿出了问题,高人指点下。小弟万分感激。