|
最近刚买了块开发板。但是给的BSP的eboot里面用的是CS8900,但是板子上面是DM9000,所以现在主要的事情就是将ether.c换成DM9000的接口。。我在网上copy了一份驱动源代码。。。。但是放上去后我就是读不到ID。。。经过盘查。应该是读写IO口的问题
static UCHAR
ReadReg(USHORT offset)
{
IOWRITE(dwEthernetIOBase, offset);
return IOREAD(dwEthernetDataPort);
}
static void
WriteReg(USHORT offset, UCHAR data)
{
IOWRITE(dwEthernetIOBase, offset);
IOWRITE(dwEthernetDataPort, data);
}
#define IOREAD(o) ((UCHAR)*((volatile UCHAR *)(o)))
#define IOWRITE(o, d) *((volatile UCHAR *)(o)) = (UCHAR)(d)
其实看起来这个读写时很简单的。。。只是做了这样的一个实验WriteReg(0x1f,3)后。。我去读ReadReg(0x28)..但是我却读到的是03.。。似乎我在这个读写的过程中只是像dwEthernetDataPort赋值,然后就去读这个变量而已。。。
我用友善提供的NK是可以正常上网的。。。。说明时序什么的都是正确的。我的DM9000是连接在NGCS4上面的。所以IOBASE是0x20000300.IOPORT = IOBASE + 4;
没有错啊。。。
但是读ID的时候却每次读到的IOPORT是0,
我猜想是不是DM9000在上电需要什么初始化一下寄存器才可以读ID的吧。。。
能不能帮我解答一下
|
|