1.原理
以FL2440为研究对象,DM9000A支持8位 16为模式,内部有64个寄存器、SRAM等,分别控制其工作,对于其寄存器的读写依靠地址端口和数据端口来控制,在系统移植的时候根据硬件连接设置:
#define S3C24XX_PA_DM9000 0x20000300
#define S3C24XX_VA_DM9000 0xE0000000
static struct resource s3c_dm9000_resource[] = {
[0] = {
.start = S3C24XX_PA_DM9000, .end = S3C24XX_PA_DM9000+ 0x3,
.flags = IORESOURCE_MEM
}, //定义了地址端口物理地址
[1]={
.start = S3C24XX_PA_DM9000 + 0x4, //CMD pin is A2
.end = S3C24XX_PA_DM9000 + 0x4 + 0x7c,
.flags = IORESOURCE_MEM
}, //定义了数据端口物理地址
[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ
},
};
其中,20000300对应着Bank4的物理空间(2000000~27FFFFFF),由nGCS4连接DM9000A的CS管脚决定,之所以定义地址端口的地址为20000300,数据端口地址为200003010,因为硬件上ADDR2连接了DM9000A的CMD管脚,该管脚决定是对地址端口,还是对数据端口读写。
2. 因此为了完成对于DM9000的读写,需要通过下面的代码: