首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DM9000A调试问题

DM9000A调试问题

我目前在调试DM9000A,但是初始化过程老是失败,参见厂家资料,也没有发现啥问题。谁能帮我看看代码,谢谢了。

/****************************************************************************
* 函数名称 void  EEPROM_Initial(void)
* 函数功能 用于初始化eeprom,配置相关参数。
* 入口参数 无
*      
* 出口参数 无
* 说    明 
****************************************************************************/
void EEPROM_Initial( void )
{
 uint8 i;
 uint16 *u16pTemp;
 /* write mac_address */
 u16pTemp = (uint16 *)MAC_Address;
 for(i=0; i < 3; i++)
 {
  EEPROM_Write(i, *(u16pTemp++));
 }
 /* write auto load control*/
 EEPROM_Write(0x03, 0x5455);
 /* write Vendor ID */
 EEPROM_Write(0x04, 0x0a46);
 /* write Product ID */
 EEPROM_Write(0x05, 0x9000);
 /* write  Pin Control */
 EEPROM_Write(0x06, 0x01e7);
 /* write  wake_up mode control */
 EEPROM_Write(0x07, 0x0180);
}
/****************************************************************************
* 函数名称 uint32  Ethernet_Controller__Initial(void)
* 函数功能 用于初始化enthernet_controller,配置相关参数。
* 入口参数 无
*      
* 出口参数 uint32 返回初始化结果,如果返回的数据非0,则初始化失败,返回值为出错信息
* 说    明 
****************************************************************************/
uint32  Ethernet_Controller__Initial()
{
 uint16  i;
 uint8 u8Offset;
 uint16  *u16pMAC_Address;
 /* power on reset */
 LINK_RST_SET0();
 delayNus (50000);     /* 等待50ms,PHY 上电完成  */
 LINK_RST_SET1();
  
  
// /*step 2:*/
    /*access EEPROM*/
 u16pMAC_Address =  (uint16*)&MAC_Address;
 for(i = 0; i < 3; i++)
 {
  if(*(u16pMAC_Address++) != EEPROM_Read(i)) /*eeprom loaded data?*/
  {
   EEPROM_Initial();
   break;
  }
 }
 /* reload EEPROM*/
 iow(DM9KS_EPCR, 0x40);
 /* wait for reload EEPROM complete */
 while ( i < 200 )
 {
  if(ior ( DM9KS_EPCR ) & 1)
    break;
   delayNus ( 10 );
   i++;
 } 


  /*step 3:
 rogram the NCR register to choose normal mode by setting NCR (REG. 00) LBK Bit [2:1] = "00"b. */
 iow ( 0x00 , 0x00 );//0, 0;
 /*step 4:*/
 
 /* disable interrupts and enable the Pointer Auto Return function*/
 iow ( 0xFF, 0x80 );  //0x00, 0x80

 /*设置PHY 寄存器内容*/
 /*step 1:GPR REG. 1FH PHYPD Bit[0] = 0 to 激活内部phy*/
   iow ( 0x1F, 0x00 );   /* 0x58, 0x58*/
   delayNus (5000);     /* 等待2ms,PHY 上电完成  */
   /* PHY 软件方式复位: PHY寄存器取缺省值, 0x3100*/
 HY_Write ( 0, 0x8000 ); /* 0x000d, 0x3100*/
 delayNus (3000);
 
 /*设置流控参数,
 10(FCS=1)支持流控;
 08(TX-FDX=1)支持100base-tx 全双工;
 07(TX-HDX=1)支持半双工;
 06(10-FDX=1)支持10base-t 全双工;
 05(10-HDX=1)支持10base-t 半双工;
 04~01(selector=00001)支持IEE802.3 CSMA/CD  0x0000 0101 1110 0001*/
 HY_Write ( 4, 0x01E1 | 0x0400 ); /*0x0d, 0x05e1*/
 /*12(auto-negotiation enable=1)自适应机制使能;09(Restart Auto-negotiation=1)重新初始化自动开始,
 当自适应 被禁止后(bit12=0),这位将没有用处,应该被清零,在自动初始化没有完成前这位保持1,
 完成后自动清零;自适应 操作过程中,将该位清零,对该过程没有影响。0001 0010 0000 0000*/
 /* PHY Auto-negotiation: Auto sense and recovery registers */
 HY_Write ( 0, 0x1200 );  /*0x000d, 0x1000*/
 delayNus (2000);  /* wait >2 ms for PHY Auto-sense linking to partner */ 
 /*only read status*/
 HY_Read(0x01);  /*get PHY 01H register status = 0x7849*/
 HY_Read(0x05); /*get DA9000A 05H register status = 0x0000*/
 ior(0x01); 
 
 ///* 配置多波通信的hash表 */
 dm9000_hash_table ();
 /* enable chip functions and disable loopback back to normal*/
 iow ( 0x00, 0x00 ); /*0, 0*/ 
 /* Bit[0]=1 enable RX; BIT4=1 discard crc error packet; bit5=1 discard long(1522byte) packet */
 iow ( 0x05, 0x30 | 1); /*0, 0x31*/
 /*clear stutus tag*/
 /*clear NSR status tag*/
 watch_value = ior(0x01);       
 /*clear stutus tag*/
 watch_value = ior(0x07);        /*clear ROCR status*/
 /*set RX and TX  flow  control  function */
 /* BPTR REG.08
 7~4(BPHW=3) 接受数据的空余空间下限值为 3KB,
 3~1(JPT =f)处于拥挤模式600us */
 iow ( 0x08, 0x3F );/*37, 3f*/
 /* FCTR REG.09
 7~4(HWOT = 5)  接受数据的空余空间下限值为5KB;
 3~1(LWOT = 10)  接受数据的空余空间上限值为10KB;*/
 iow ( 0x09, 0x5A ); /*38,5a*/
 /* FCR REG.0AH
 5(TXPEN = 1) 强制 TX 暂停包使能;
 3(BKPM = 1)  回压模式
 0(FLCE = 1)  流控使能;*/
 iow ( 0x0A, 0x29 );  /*00, 29*/
 /*TCR2(2DH), LED(7)=1 the led pins act as led mode 1;
 RLCP(6)=1 retry tanssmit the packet with late-collision; *//********I ADD********/
 iow (0x2d,  0x40 );/*00, 0x40*/
 delayNus(2000);
 ior(0x01);
 /* clear any pending interrupt */
  /* clear NSR 3bits status: TX1END, TX2END, WAKEST by RW/C1 */
// iow ( 0x01, 0x2c );  /*80, 80,   c0, c0*/
 /* clear ISR status: PR,PT, ROS,ROO, UDRUN, LNKCHG by RW/C1 */
 iow ( 0xFE, 0x3f );   /*20, 00*/
 /* enable interrupts and enable the Pointer Auto Return function*/
 /* IMR REG. FFH enable PAR+ PTI+PRI+ROI+ROOI+UDRUNI+LNKCHGI */
 iow ( 0xFF, 0xbf );  /*80, bf*/
 /* initialize the driver variables or the user passed arguments */
 IO_mode = ior ( 0xFE )>>7;
 /* ISR Bit [7] IOMODE indicating DATA I/O mode */

 LINK = ( ior ( 0X01 )& 0x40 ) ? TRUE: FALSE; /* if NSR Bit [6] = 1: LINK ok, else failed*/
 SPEED = ( ior ( 0X01 ) & 0x80 ) ? 10: 100;  /* if NSR Bit [7] = 0: SPEED = 100Mbps */
 DUPLEX = ( ior ( 0x00 ) & 8 ) ? FULL: HALF;  /* if NCR Bit [3] = 1: Full Duplex mode */
 return (0);      /* RETURN "NU_SUCCESS" */  /* end DM9000A_init I/O routine */
}

用的是什么开发板?
在交流中前进,共同实现nios的应用。

参照厂家资料,自己设计的。

版主:

   你有调通的初始化代码吗?我看看如何配置寄存器才能把DM9000A初始化成功,将灯点亮。

参考de2的dm9000a的驱动代码,没有问题,可以运行通过。如果你下不到,我给你发一份。
在交流中前进,共同实现nios的应用。

我在网上没有搜倒,那就麻烦斑竹了, 我的邮箱是lllan12@yahoo.com.cn

我也在调9000A驱动,使用的AVR的m64,给我也发一分吧,邮箱swing2005@sohu.com

谢谢!

已发,楼上两位查收。
在交流中前进,共同实现nios的应用。
楼上查收。
在交流中前进,共同实现nios的应用。

谢谢楼主的帮助,谢谢大家的帮助,DM9000A已搞定。目前通信没有问题,但是还是调试阶段,有几个现象还不太明白(虽然不妨碍通信),原来的问题是硬件的问题。

我也在看这个,楼上的几位好友如果有时间也给我发一份吧,谢谢

我的email:  geng0202@tom.com

你有什么问题呢??
在交流中前进,共同实现nios的应用。

kzw版主如果有时间也请给我发一份。多谢。

onebyte@126.com

斑竹也给我一个吧..

airtd1@yahoo.com.cn

斑竹能给我也发一份代码吗?我的E-MAIL是hydjyd@263.net ,谢谢
返回列表