闯出一个世界 发表于 2013-1-24 22:15:38

为什么我的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]
查看完整版本: 为什么我的DM9000初始化后DM9000_NSR的值总是0,链接不上,请大侠指点迷津