为什么我的DM9000初始化后DM9000_NSR的值总是0,链接不上,请大侠指点迷津
代码如下#define DM_ADD (*((volatile unsigned short *) 0x20000300))
#define DM_CMD (*((volatile unsigned short *) 0x20000304))
//延时
void udelay(uint32 t)
{
U32 i;
for(;t>0;t--)
{
for(i=0;i<100;i++){}
}
}
//dm9000初始化
void DM9000_init(void)
{
uint32 i;
IOSetInit();
dm9000_reg_write(DM9000_GPCR, 0x01); //设置 GPCR(1EH) bit=1,使DM9000的GPIO3为输出。
dm9000_reg_write(DM9000_GPR,0x00); //GPR bit=0 使DM9000的GPIO3输出为低以激活内部PHY。
Printf("\nGPR=%x\n",dm9000_reg_read(DM9000_GPR));/////
udelay(1000000); //延时2ms以上等待PHY上电。
Printf("\nGPR=%x\n",dm9000_reg_read(DM9000_GPR));/////
//初始化设置步骤: 2
dm9000_reg_write(DM9000_NCR,0x03); //软件复位
Printf("\nNCR=%x\n",dm9000_reg_read(DM9000_NCR));/////
udelay(30000); //延时20us以上等待软件复位完成
dm9000_reg_write(DM9000_NCR,0x00); //复位完成,设置正常工作模式。
dm9000_reg_write(DM9000_NCR,0x03); //第二次软件复位,为了确保软件复位完全成功。此步骤是必要的。
udelay(30000);
Printf("\nNCR=%x\n",dm9000_reg_read(DM9000_NCR));///////
dm9000_reg_write(DM9000_NCR,0x00);
dm9000_reg_write(DM9000_NSR,0x2c); //清除各种状态标志位
dm9000_reg_write(DM9000_ISR,0xbf); //清除所有中断标志位
dm9000_reg_write(DM9000_RCR,0x39); //接收控制
dm9000_reg_write(DM9000_TCR,0x00); //发送控制
dm9000_reg_write(DM9000_BPTR, 0x3f);
dm9000_reg_write(DM9000_FCTR, 0x38); //接收FIFO门限3k 8k
dm9000_reg_write(DM9000_FCR,0xff);
dm9000_reg_write(DM9000_SMCR, 0x00);
//初始化设置步骤: 5
for(i=0; i<6; i++)
dm9000_reg_write(DM9000_PAR + i, hwaddr);//
dm9000_reg_write(DM9000_NSR,0x2c); //清除各种状态标志位
dm9000_reg_write(DM9000_ISR,0x3f); //清除所有中断标志位
Printf("\nNSR=%x\n",dm9000_reg_read(DM9000_NSR));///////
dm9000_reg_write(DM9000_IMR, 0x81); //中断使能
Printf("初始化成功!\r\n");
}
页:
[1]