亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dm9000end.c

?? 操作系統(tǒng)中的一找你個的相關(guān)的淡淡的碼源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
    UCHAR tmp;
     
    /*set the internal Phy power-on*/
    DM9000_OUT_REG(0x1f,0x00);  /*GPR*/  
    uDelay(20);
     
    /*soft reset */
    DM9000_OUT_REG( 0x00, 0x03 );              
    uDelay(20);
    DM9000_OUT_REG( 0x00, 0x03 );              
    uDelay(20);
 
    /* set the internal PHY power-on, GPIOs normal, and wait 20us */
    DM9000_OUT_REG(0x1f,0x01);  /*GPR*/
    DM9000_OUT_REG(0x1f,0x00);  /*GPR*/
    uDelay(1000);
    uDelay(1000);
    uDelay(1000);
    uDelay(1000);
   

    /* I/O mode */
    DM9000_IN_REG( 0xfe, tmp );
    dev->io_mode = (tmp & 0xff) >> 6;        /* ISR bit7:6 keeps I/O mode 16bit */
       
    /*Set PHY Mode*/
    set_PHY_mode(dev);
}

static void dmfe_config_dm9000( END_DEVICE *dev, int stat)
{

    DM9000_OUT_REG( 0x00, 0x08 );
    DM9000_OUT_REG( 0x02, 0x00 );    /* TX Polling clear */
    DM9000_OUT_REG( 0x2f, 0x00 );    /* Special Mode */
    DM9000_OUT_REG( 0x01, 0x2c);     /*NSR*/
    DM9000_OUT_REG( 0xfe, 0x0f);
    DM9000_OUT_REG( 0x08, 0x37 );    /* Less 3Kb, 200us */
    DM9000_OUT_REG( 0x09, 0x38 );    /* Flow Control : High/Low Water */
    DM9000_OUT_REG( 0x0a, 0x29 );    /* Flow Control wwq?*/
  
    /*Set Physical address and multicast address*/
    dmfGetPhyAndMulAdrs( dev );     
   
    /*Enable the SRAM read/write pointer*/
    DM9000_OUT_REG( 0xff, DM9000_REGFF_OFF );   
    
    if( stat == 2 )
    {
        /* Activate DM9000 */
        DM9000_OUT_REG( 0x05, DM9000_REG05 );      /* RX enable */
        DM9000_OUT_REG( 0xff, DM9000_REGFF );      /* Enable TX/RX interrupt mask */
    }
    if( stat == 1 )
    {
        /* dis-Activate DM9000 */
        DM9000_OUT_REG( 0x05, DM9000_REG05_OFF );  /* RX disable */
        DM9000_OUT_REG( 0xff, DM9000_REGFF_OFF );  /* Disable TX/RX interrupt mask */
    }

    /* Init Driver variable */
    dev->tx_pkt_cnt = 0;
}

/* Hardware start transmission.
   Send a packet to media from the upper layer.
*/
static int dmfe_Copy_TxFrame(END_DEVICE *dev, char *pBuffer, int TxLen )
{ 
    int i, lastone;
    int tmplen;  
    USHORT * pTxBuff;
    
    /*define for debug,wwq*/
    char * pBufferTx;
    pBufferTx = pBuffer;
    
    if( (TxLen == 0) || (pBuffer == NULL) )
    {
        logMsg("dm9000Send: TxLen == 0 or pBuffer == NULL\n", 0, 0, 0, 0, 0, 0);
        return ERROR;
    }

	
    /* Move data to DM9000 TX RAM */
    DM9000_OUT_ADDR( 0xf8 );
    if( dev->io_mode == 2 )
    {    /* Byte mode */
        for( i = 0; i < TxLen; i++ )
          DM9000_OUT_BYTE( (*pBuffer++) );
    }
    else if(dev->io_mode == 0)
    {   /* Word mode */
        tmplen = (TxLen+ 1) / 2;
        pTxBuff = (USHORT*)pBuffer; 
        for( i = 0; i <  tmplen; i++ )
        {
          DM9000_OUT_WORD( *pTxBuff++ );
        }
    }else
    {   /*Dwors mode*/
    	 printf("dword error!\n");
    	 return ERROR;
    }
    
    if(dev->tx_pkt_cnt == 0){ 
      dev->tx_pkt_cnt ++;

   
      /* Set TX length to DM9000 */
      DM9000_OUT_REG( 0xfd, (TxLen >> 8) & 0xff );
      DM9000_OUT_REG( 0xfc, TxLen & 0xff );
   
    /* Issue TX polling command */
      DM9000_OUT_REG( 0x2, 0x01 );        /* Cleared after TX complete */
    }else{
    	dev->queue_pkt_len = TxLen;
      dev->tx_pkt_cnt ++;
    }
    return OK;
}

/*************************************************
 *
 */
 
static UCHAR  dmfe_Get_NextPacket(void)
{
	UCHAR 	Rxbyte;
	  
	  /* Check packet ready or not */
    DM9000_IN_REG( 0xf0, Rxbyte ); /* Dummy read */
    DM9000_IN_REG( 0xf0, Rxbyte ); /* Got most updated data */
    Rxbyte &= 0xff;
    return (Rxbyte);	
}
/**************************************************
 * Received a packet and pass to upper layer
 * 
 * return ERROR or  received packet length
 */
static int dmfe_Copy_RxFrame(END_DEVICE *dev, char *pBuffer, UCHAR rxbyte)
{
    UCHAR  tmp1,tmp2;
    UCHAR  RecvDataU8;
    USHORT RecvDataU16;
    
    USHORT* pRxBuff;
    
    USHORT i, GoodPacket, tmplen;
    USHORT RxStatus = 0, RxLen = 0;
    
    UCHAR* pBufferRx;
    pBufferRx = pBuffer;
    
#ifdef DM_DEBUG_PRINT
	logMsg ("dmfe_Copy_RxFrame: packet_rec( rxbyte=%d).\n", rxbyte, 0, 0, 0, 0, 0);
#endif


    /* packet ready to receive check */
   if( rxbyte == DM9000_PKT_RDY )
   {
        /* A packet ready now  & Get status/length */
     GoodPacket = TRUE;
     switch(dev->io_mode)
     {
       case 2:
            /* Byte mode */
            DM9000_IN_REG( 0xf2, tmp1 );
            DM9000_IN_REG( 0xf2, tmp2 );
            RxStatus = tmp1 + (tmp2 << 8);

            DM9000_IN_REG( 0xf2, tmp1 );
            DM9000_IN_REG( 0xf2, tmp2 );
            RxLen = tmp1 + (tmp2<<8);
         break;
       case 0:
            /* Word mode */
            DM9000_OUT_ADDR( 0xf2 );
            DM9000_IN_WORD( RxStatus );
            DM9000_IN_WORD( RxLen );
         break; 
       default:
       	 break; 
     }

    /*dm9000 receive packet length error*/   
    if( RxLen < 0x40){        	
            logMsg("dm9000Recv: packet too small !\n", 0, 0, 0, 0, 0, 0);
            GoodPacket = FALSE;
    }
       
     /*dm9000 receive packet is bad packet*/
     if( RxStatus & 0xbf00)
     {
       GoodPacket = FALSE;
       if( RxStatus & 0x100 )  
         logMsg("dm9000Recv: FIFO Overflow Error!\n ", 0, 0, 0, 0, 0, 0);
       if( RxStatus & 0x200 )   
         logMsg("dm9000Recv: CRC Error!\n", 0, 0, 0, 0, 0, 0); 
       if( RxStatus & 0x8000 ) 
         logMsg("dm9000Recv: received frame is smaller than 64B!\n ", 0, 0, 0, 0, 0, 0);
      }

     /* Move data from DM9000 */
     if( GoodPacket ){  
        /* Read received packet from RX SARM */
        if (dev->io_mode == 2){
           /* Byte mode */
           for( i=0; i<RxLen; i++ )
             DM9000_IN_BYTE(*pBuffer++ );
        }else if(dev->io_mode == 0){
           /* Word mode */
           tmplen = (RxLen + 1) / 2;
           pRxBuff = (USHORT*)pBuffer;
           for( i = 0; i < tmplen; i++)
             DM9000_IN_WORD(*pRxBuff++);
        }else{
           /*Dword mode*/
           return (ERROR);
        }    
#ifdef    DM_DEBUG_PRINT    
            logMsg("RxLen = 0x%x\n",RxLen, 0, 0, 0, 0, 0 );
#endif

         return (RxLen);
            
     }else{  
            
        if( dev->io_mode == 2 ){
           /* Byte mode */
           for( i = 0; i < RxLen; i++ )
             DM9000_IN_BYTE( RecvDataU8 );
         }else{
                /* Word mode */
           tmplen = (RxLen + 1) / 2;
           for( i = 0; i < tmplen; i++ )
             DM9000_IN_WORD( RecvDataU16 );
         }
         return ERROR;
     }
   }
 
 	/* Status check: this byte must be 0 or 1 */
  if( rxbyte > DM9000_PKT_RDY )
    {
      DM9000_OUT_REG( 0xff, DM9000_REGFF_OFF);   /* Stop INT request */
      DM9000_OUT_REG(0xfe,  0x0f);               /*clear ISR status*/
      DM9000_OUT_REG( 0x05, DM9000_REG05_OFF);   /* Stop Rx function */
        
      logMsg ("dm9000Recv;The rxbyte=%d, Rx need reset.\n", rxbyte, 0, 0, 0, 0, 0);
      dm9000Reset( dev );
      dm9000Config( dev );
    }
 	
}

/**************************************************
*Stop the interface.
*The interface is stopped when it is brought.
*/
static int dmfe_Stop_Chip( END_DEVICE *dev)
{
#ifdef  DM_DEBUG_PRINT
    logMsg("dmfe_Stop_Chip()\n", 0, 0, 0, 0, 0, 0);
#endif
    /* RESET devie */
    phy_write( dev, 0x00, 0x8000 );             /* PHY RESET */
    DM9000_OUT_REG( 0x1f, DM9000_PHY_OFF );      /* Power-Down PHY */
    DM9000_OUT_REG( 0xff, DM9000_REGFF_OFF );    /* Disable all interrupt */
    DM9000_OUT_REG( 0x05, DM9000_REG05_OFF );    /* Disable RX */

    return 0;
}


/************************************************
 *Set PHY operationg mode
 */
static void set_PHY_mode( END_DEVICE *dev )
{
    USHORT phy_reg4 = 0x01e1, phy_reg0=0x1000;

    DM9000_OUT_REG( 0x1e, 0x01 );      
    DM9000_OUT_REG( 0x1f, DM9000_PHY_OFF );      /* disable PHY */

#ifdef  DM_DEBUG_PRINT  
   logMsg ("set_PHY_mode()\n", 0, 0, 0, 0, 0, 0);
#endif

    if ( !(dev->op_mode & DM9000_AUTO) )
    {
        switch(dev->op_mode)
        {
            case DM9008A:
            case DM9000_10MHD:
                phy_reg4 = 0x21;
                phy_reg0 = 0x0000;
                break;
            case DM9000_10MFD:
                phy_reg4 = 0x41;
                phy_reg0 = 0x0100;
#ifdef  DM_DEBUG_PRINT 
		logMsg ("set_PHY_mode: set DM9000_10MFD.\n", 0, 0, 0, 0, 0, 0);
#endif 
                break;
            case DM9000_100MHD:
                phy_reg4 = 0x81;
                phy_reg0 = 0x2000;
                break;
            case DM9000_100MFD:     
                phy_reg4 = 0x101;
                phy_reg0 = 0x3100;
                break;
            case DM900xA_PCEL:
                phy_reg4 = 0x101;
                phy_reg0 = 0x2100;
                break;
            default:              
            	  break; 
        }
    }
    /*phy_write(dev, 0, 0x8000);*/   /*  Tmp */
    if(dev->op_mode == DM900xA_PCEL) phy_write(dev, 16, 0x4014);
    if(dev->op_mode == DM9008A) phy_write(dev, 20, 0x0010);

	  phy_write(dev, 0, 0x8000);
	  phy_write(dev, 0, phy_reg0);    /*  Tmp */	
    phy_write(dev, 4, 0x400|phy_reg4);    /* Set PHY media mode */

    DM9000_OUT_REG( 0x1f, DM9000_PHY_ON );      /* Enable PHY */
}

/******************************************************* 
 *Set DM9000 multicast address
 * Set DM9000 Physical Address
 */
static void dmfGetPhyAndMulAdrs(END_DEVICE *dev)
{

    /* Set Node address */
    DM9000_OUT_REG( 0x10, dev->enetAddr[0]);
	uDelay( 20 );
    DM9000_OUT_REG( 0x11, dev->enetAddr[1]);
	uDelay( 20 );
    DM9000_OUT_REG( 0x12, dev->enetAddr[2]);
	uDelay( 20 );
    DM9000_OUT_REG( 0x13, dev->enetAddr[3]);
	uDelay( 20 );
    DM9000_OUT_REG( 0x14, dev->enetAddr[4]);
	uDelay( 20 );
    DM9000_OUT_REG( 0x15, dev->enetAddr[5]);
	uDelay( 20 );


}

/***************************************************
 * Read a word from phyxcer
 */
static USHORT phy_read( END_DEVICE *dev, int reg )
{
    UCHAR tmp1, tmp2;

    /* Fill the phyxcer register into REG_0C */
    DM9000_OUT_REG( 0x0c, DM9000_PHY | reg );

    DM9000_OUT_REG( 0x0b, 0x0c );          /* Issue phyxcer read command */
    do
    {
        uDelay(100);                        /* Wait read complete */
        DM9000_IN_REG( 0x0b, tmp1 );
    }while( tmp1 & 0x01 );
    DM9000_OUT_REG( 0x0b, 0x0 );           /* Clear phyxcer read command */

    /* The read data keeps on REG_0D & REG_0E */
    DM9000_IN_REG( 0x0e , tmp1 );
    DM9000_IN_REG( 0x0d , tmp2 );
    return ( (tmp1 << 8 ) | tmp2 );
}

/******************************************************** 
 * Write a word to phyxcer
 */
static void phy_write( END_DEVICE *dev, int reg, USHORT value)
{
    UCHAR tmp1;
    /* Fill the phyxcer register into REG_0C */
    DM9000_OUT_REG( 0x0c, DM9000_PHY | reg );

    /* Fill the written data into REG_0D & REG_0E */
    DM9000_OUT_REG( 0x0d, (value & 0xff) );
    DM9000_OUT_REG( 0x0e, ( (value >> 8) & 0xff) );

    DM9000_OUT_REG( 0x0b, 0x0a );        /* Issue phyxcer write command */
    do
    {
        uDelay(100);                        /* Wait read complete */
        DM9000_IN_REG( 0x0b, tmp1 );
    }while( tmp1 & 0x01 );
    DM9000_OUT_REG( 0x0b, 0x00 );        /* Clear phyxcer write command */
}




/****************************************************** 
 *Delay N us
 */
static void uDelay( int us )
{
    taskDelay(us/10);
}

LOCAL void s3cExtIntPinEnable (void)
{
	  rpGPFCON = (rpGPFCON & ~(3)) | 2;	
   	rpGPFUP |= 1;  	
	  rpINTMSK = rpINTMSK & (~1); 
}

/***********************************************************
 *
 */
static void dm9000Chack(void)
	{
	if(1)
		{
		UCHAR data;
		UINT vpid;
		DM9000_IN_REG( 0x28, data);
		vpid=data;
		DM9000_IN_REG( 0x29, data);
		vpid |= (data<<8);
		DM9000_IN_REG( 0x2a, data);
		vpid |= (data<<16);
		DM9000_IN_REG( 0x2b, data);
		vpid |= (data<<24);
#ifdef DM_DEBUG_PRINT
		logMsg("dm9000Chack: DM9000PID: 0x%8x\n",vpid,2,3,4,5,6);
#endif
		}
	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线播| 欧美日韩一区二区三区在线看| 日韩理论片一区二区| 91麻豆精品国产91久久久久| 国产成人8x视频一区二区| 亚洲成人手机在线| 国产日韩欧美麻豆| 91精品在线免费| 色综合激情五月| 国产一二精品视频| 天堂午夜影视日韩欧美一区二区| 国产精品―色哟哟| 久久综合精品国产一区二区三区| 欧美日韩高清在线| 色综合一区二区| 成人国产精品免费观看视频| 久久er精品视频| 亚洲男同1069视频| 欧美久久婷婷综合色| 国产视频一区二区三区在线观看| 国产精品一二三四| 56国语精品自产拍在线观看| k8久久久一区二区三区| 久久99精品视频| 婷婷成人激情在线网| 亚洲色图制服诱惑| 欧美国产一区二区| 久久久久久**毛片大全| 日韩一级免费观看| 欧美日韩精品一区二区三区四区| 色综合久久中文字幕| 成人精品小蝌蚪| 盗摄精品av一区二区三区| 国产综合成人久久大片91| 青青草91视频| 男男gaygay亚洲| 日韩国产精品久久久| 三级欧美在线一区| 日韩制服丝袜av| 日韩国产一区二| 奇米精品一区二区三区在线观看一| 国产综合久久久久久久久久久久| 亚洲精品视频观看| 国产精品久久久久久久久久久免费看| 久久先锋资源网| 久久久久久一级片| 欧美精品一区在线观看| 欧美成人性福生活免费看| 日韩欧美亚洲国产精品字幕久久久| 91精品国产综合久久香蕉麻豆| 欧美人动与zoxxxx乱| 欧美日韩夫妻久久| 欧美一级理论片| 精品日韩欧美一区二区| 欧美精品一区在线观看| 久久久精品黄色| 国产精品每日更新| 亚洲色图视频网| 亚洲成人综合网站| 久久精品国产免费| 国产成人综合在线播放| jiyouzz国产精品久久| 91视频在线观看| 欧美日韩视频在线观看一区二区三区| 欧美精品 国产精品| 精品少妇一区二区三区在线播放| 久久影音资源网| 亚洲欧美一区二区不卡| 亚洲国产精品欧美一二99| 蜜臀久久99精品久久久画质超高清 | 石原莉奈一区二区三区在线观看| 日日欢夜夜爽一区| 国产一区二三区好的| 国产成a人亚洲精| 色婷婷国产精品| 欧美一区二区三区免费大片| 国产无一区二区| 亚洲国产精品久久久久婷婷884 | 九色|91porny| 99精品视频在线观看免费| 欧美综合欧美视频| 欧美电影免费观看高清完整版在线 | 亚洲一区二区美女| 精品一区二区三区久久| 99国产精品久久久久久久久久| 欧美日韩第一区日日骚| 久久久久久久性| 亚洲综合免费观看高清完整版| 久久99国产精品久久| 91在线视频免费观看| 欧美一级黄色片| 亚洲精品亚洲人成人网在线播放| 久久99国产精品尤物| 日本伦理一区二区| 精品嫩草影院久久| 亚洲综合自拍偷拍| 风间由美一区二区av101| 欧美日韩电影在线播放| 国产精品成人一区二区三区夜夜夜| 性做久久久久久久免费看| 成人av在线电影| 欧美一级午夜免费电影| 亚洲欧美成人一区二区三区| 激情深爱一区二区| 在线一区二区视频| 国产无一区二区| 久色婷婷小香蕉久久| 欧美日韩在线播放三区四区| 国产精品久久久久久久午夜片| 日韩福利电影在线| 色噜噜狠狠色综合中国| 国产视频一区二区在线观看| 久久99久久精品| 欧美挠脚心视频网站| 亚洲免费观看高清完整版在线观看| 国产酒店精品激情| 91精品欧美久久久久久动漫 | 色综合av在线| 国产精品久久久一区麻豆最新章节| 美女精品一区二区| 欧美日韩国产综合草草| 亚洲精品日韩综合观看成人91| 懂色一区二区三区免费观看| 2017欧美狠狠色| 久久狠狠亚洲综合| 日韩免费观看高清完整版| 天堂蜜桃91精品| 4438x成人网最大色成网站| 亚洲成人av电影在线| 色噜噜夜夜夜综合网| 亚洲激情欧美激情| 色哟哟一区二区在线观看| 国产精品久久久久久久久果冻传媒 | 天堂在线一区二区| 欧美日韩精品一区二区| 香蕉av福利精品导航| 欧洲一区在线电影| 国产精品久久久久久久久果冻传媒| 欧美一级欧美三级| 国产一区二区三区在线观看免费视频| 色综合视频一区二区三区高清| 91精品国产aⅴ一区二区| 五月天亚洲精品| 91精品婷婷国产综合久久| 偷窥少妇高潮呻吟av久久免费| 在线免费一区三区| 亚洲综合网站在线观看| 欧美日韩免费不卡视频一区二区三区| 亚洲国产中文字幕在线视频综合| 欧美视频在线一区二区三区| 亚洲午夜久久久久久久久电影网| 欧美三级中文字| 免费日本视频一区| 精品1区2区在线观看| 国产精品系列在线观看| 国产精品国产三级国产专播品爱网 | 国内久久婷婷综合| 亚洲国产精品v| 在线视频你懂得一区| 日韩精品国产精品| 久久免费精品国产久精品久久久久| 国产成人午夜片在线观看高清观看| 国产精品久久久久久久久快鸭| 色94色欧美sute亚洲线路一久| 国产在线精品一区二区三区不卡| 欧美三区在线观看| 日本亚洲免费观看| 久久人人爽爽爽人久久久| 成人三级伦理片| 午夜激情综合网| 精品久久人人做人人爰| 9i在线看片成人免费| 亚洲第一狼人社区| 337p粉嫩大胆噜噜噜噜噜91av | 国产成人亚洲精品青草天美| 日韩一区在线看| 日韩午夜三级在线| 成人午夜电影久久影院| 亚洲成a人片在线观看中文| 欧美岛国在线观看| 91免费国产在线| 国内精品久久久久影院色| 亚洲美女视频在线| 久久综合久久鬼色| 在线视频欧美精品| 国产激情精品久久久第一区二区 | 国产精品123区| 天天操天天干天天综合网| 久久蜜桃香蕉精品一区二区三区| 色噜噜狠狠色综合中国| 精品亚洲免费视频| 一区二区三区欧美视频| www精品美女久久久tv| 欧美性大战久久久久久久| 国产精品1区二区.| 三级影片在线观看欧美日韩一区二区| 自拍偷拍欧美激情| 2024国产精品| 欧美一区二区福利在线| 91丨九色丨尤物|