还是网卡驱动的问题,请帮忙解决一下

硬件连接:
处理器AT91SAM9263——————————DM9000引角
D15----D0 ——————————————SD15–SD0
A2 ——————————————————CMD
PD4(FIQ)———————————————INT
PD11(EBI0_NCS2)———————————CS#
NRD/CFOE ————————————————IOR#
NWE/NWR0/CFWE——————————————IOW#
以上为硬件连接关系:

在startup/board/里init_pio.c里设置相关的寄存器:
对SMC设置:
out32(AT91SAM9263_SMC0_BASE + AT91_SMC_SETUP(2), AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(0)| AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(0));

out32(AT91SAM9263_SMC0_BASE + AT91_SMC_PULSE(2), AT91_SMC_NWEPULSE_(4) | AT91_SMC_NCS_WRPULSE_( 8 )| AT91_SMC_NRDPULSE_(4) | AT91_SMC_NCS_RDPULSE_( 8 ));

out32(AT91SAM9263_SMC0_BASE + AT91_SMC_CYCLE(2), AT91_SMC_NWECYCLE_(16) | AT91_SMC_NRDCYCLE_(16));

out32(AT91SAM9263_SMC0_BASE + AT91_SMC_MODE(2), AT91_SMC_BAT_WRITE|AT91_SMC_DBW_16 | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(1));

对PD11的IO功能设置:
out32(AT91SAM9263_PIOD_BASE + AT91_PIO_IDR, (1 << 11));
out32(AT91SAM9263_PIOD_BASE + AT91_PIO_PUDR,(1 << 11));
out32(AT91SAM9263_PIOD_BASE + AT91_PIO_ASR, (1 << 11));
out32(AT91SAM9263_PIOD_BASE + AT91_PIO_PDR ,(1 << 11));
我在这里对SMC进行了设置,然后让PD11设置为使用外设A,即EBI0_NCS2功能。但是我不知道中断应该怎么设置,不过我想即使中断不正确,只要激活网卡也应该可以读到DM9000的ID:
运行dm9000:
io-pkt-v4 -d dm9000 ioport=0x30000000,irq=10
在sloginfo里是如下信息:
Jan 01 00:00:57 5 14 0 tcpip starting
Jan 01 00:00:57 3 14 0 Unable to attach to pci server: No such file or directory
Jan 01 00:00:57 3 14 0 Using pseudo random generator. See “random” option
Jan 01 00:00:57 6 14 0 id = 2b2a2928
Jan 01 00:00:57 6 14 0 id = 2b2a2928
Jan 01 00:00:57 2 14 0 DM9000 not found
Jan 01 00:00:57 2 14 0 shim: unable to init dll devn-dm9000.so: No such device
Jan 01 00:00:57 2 14 0 Unable to init devn-dm9000.so: Unknown error

如果正确,ID=0x90000a46,这里读成id = 2b2a2928。

请帮我指出一下问题
非常感谢。

试试io-pkt-v4 -d dm9000 ioport=0x30000000,irq=10,step=4
IRQ肯定是不对的,首先你要将PD4设置成输入,中断使能,触发特性,然后要写一个GPIO interrupt callout挂在PD上,这样内核得到PD的中断后会自动调用PIO interrupt callout,然后返回相应的IRQ号.