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

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

?? dm9161ae.c

?? 關(guān)于DM9161E在SEP4020上的應(yīng)用
?? C
字號(hào):
//#include "uart_defs.h"
#include "DM9161AE.h"
#include "sep4020.h"
#include "def.h"
#include "hardware_intc.h"
/***************************************************************************************
* 函數(shù)名:		delay
* 功能說(shuō)明:	錯(cuò)誤顯示延時(shí)函數(shù)
* NOTE:         
****************************************************************************************/
VOID delay(UINT32 num)
{
	UINT32 i;
	for(i = 0;i < num;i++);
}

void DM9161AE_DlyAutoNegAck() 
{
	UINT32 i;
	for(i = 0;i < 500000;i++);
}                                              
               
                   	 				 	    	 	 	 		    	     	 	 	 		 	  	  	  	     	 	      	   		 	 	 	   		   			 	     			  			 		   	 			       	  	 		  	 	  	 		 		   		  	  			 	  	 		 	 	 			 	 		 		 	 		 	   		 	 	 	   		     			  			 		  	 		 	  			 	 	 	 	  		  	   		   	   	 				 		 			 			  			 		   		 		 				 		 	    		   	  		 
void phy_soft_reset()
{
	write_reg(MAC_MII_ADDRESS, 0x00);
	write_reg(MAC_MII_TXDATA, 0x8000);
	write_reg(MAC_MII_CMD, 0x04);
}


void phy_hard_reset()
{
	UINT32 i;
	*(RP)GPIO_PORTH_SEL |= 0X40;
    *(RP)GPIO_PORTH_DATA |= 0X40;
    *(RP)GPIO_PORTH_DIR &= ~0X40;
    
    for(i=0;i<10000;i++);
    *(RP)GPIO_PORTH_SEL |= 0X40;
    *(RP)GPIO_PORTH_DATA &= ~0X40;
    *(RP)GPIO_PORTH_DIR &= ~0X40;
    
    for(i=0;i<10000;i++);
    *(RP)GPIO_PORTH_SEL |= 0X40;
    *(RP)GPIO_PORTH_DATA |= 0X40;
    *(RP)GPIO_PORTH_DIR &= ~0X40;
}

/*void phy_hard_reset()
{
	UINT32 i;
	*(RP)GPIO_PORTA_SEL |= 0X200;
    *(RP)GPIO_PORTA_DATA |= 0X200;
    *(RP)GPIO_PORTA_DIR &= ~0X200;
    
    for(i=0;i<10000;i++);
    *(RP)GPIO_PORTA_SEL |= 0X200;
    *(RP)GPIO_PORTA_DATA &= ~0X200;
    *(RP)GPIO_PORTA_DIR &= ~0X200;
    
    for(i=0;i<100000;i++);
    *(RP)GPIO_PORTA_SEL |= 0X200;
    *(RP)GPIO_PORTA_DATA |= 0X200;
    *(RP)GPIO_PORTA_DIR &= ~0X200;
}
*/
//************** write MII reg **************//
//*******************************************//

void NetNIC_PhyRegWr(U16 Phy_addr, U16 address, U16 data)
{

	U32 mii_status;

	write_reg(MAC_MII_ADDRESS, (U32)(address) | Phy_addr);
	write_reg(MAC_MII_TXDATA, (U32)data);
	write_reg(MAC_MII_CMD, 0x4);
	delay(8000);
	while(1) {
		mii_status = read_reg(MAC_MII_STATUS);
		if ((mii_status & 0x2) == 0) break;
		}
	
	return;	
}

//*************** read MII reg ***************//
//********************************************//

U16 NetNIC_PhyRegRd(U16 Phy_addr, U16 address)
{
	U16 mii_rxdata;
	U32 mii_status;
	
	write_reg(MAC_MII_ADDRESS, (U32)(address) | Phy_addr);
	write_reg(MAC_MII_CMD, 0x2);
	delay(4000);
	while(1) {
		mii_status = read_reg(MAC_MII_STATUS);
		if ((mii_status & 0x2) == 0) break;
		}
	
	mii_rxdata = (U16)read_reg(MAC_MII_RXDATA);
	return(mii_rxdata);
}

/*
*********************************************************************************************************
*                                         NetNIC_PhyInit()
*
* Description : Initialize phyter (ethernet link controller)
*               This instance configures the Davicom DM9161AE PHY
*
* Argument(s) : none.
*
* Return(s)   : 1 for OK, 0 for error
*
* Caller(s)   : AT91SAM7X256_EMAC_Init
*
* Note(s)     : Assumes the MDI port as already been enabled for the PHY.
*             : This is performed in net_nic.c, AT91SAM7X256_EMAC_Init().
*********************************************************************************************************
*/

STATUS  NetNIC_PhyInit ()
{
    UINT16 reg_val;
	STATUS status;

    reg_val     = 0;                                                 /* Init reg_val & void it to prevent a compiler     */
    (void)reg_val;                                                   /* warning since its not referenced in MII Mode     */


	phy_hard_reset();		

#ifndef RMII
    reg_val     =  NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMCR);  /* Read the Basic Mode Control Register (twice)     */

  
    reg_val     =  NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMCR);  /* Read the Basic Mode Control Register (twice)     */

 
    reg_val     &= ~BMCR_ISOLATE;                                    /* Mask off 'Disconnect from MII bit (BMCR_ISOLATE) */
    NetNIC_PhyRegWr(AT91C_PHY_ADDR, DM9161AE_BMCR, reg_val);        /* Put the PHY into MII mode                        */

   
#endif

    status = NetNIC_PhyAutoNeg();                                 /* Perform auto-negotiation                         */

    return status;                                                               /* This is done because the AutoNegotiation Error   */
}                                                                    /* is not fatal and does not return upon discovery  */
                     
/*
*********************************************************************************************************
*                                        NetNIC_PhyAutoNeg()
*
* Description : Do link auto-negotiation
*
* Argument(s) : none.
*
* Return(s)   : 1 = no error, 0 = error
*
* Caller(s)   : NetNIC_PhyInit.
*
* Note(s)     : none.
*********************************************************************************************************
*/
STATUS  NetNIC_PhyAutoNeg ()
{
    UINT16   i;
    UINT16   reg_val;
    BOOLEAN	 link;


    i               = DM9161AE_INIT_AUTO_NEG_RETRIES;                   /* Set the # of retries before declaring a timeout  */
    link            = NetNIC_PhyLinkState();                        /* Get the current link state. 1=linked, 0=no link  */

    if (link == DEF_OFF) {
        reg_val     = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMCR);  /* Get current control register value               */
        reg_val    |= DEF_BIT_09;                                       /* Set the auto-negotiation start bit               */

        NetNIC_PhyRegWr(AT91C_PHY_ADDR, DM9161AE_BMCR, reg_val);       /* Initiate auto-negotiation                        */

        do {                                                            /* Do while auto-neg incomplete, or retries expired */
            DM9161AE_DlyAutoNegAck();                                   /* Wait for a while auto-neg to proceed (net_bsp.c) */
            reg_val = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);  /* Read the Basic Mode Status Register              */
            reg_val = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);  /* Read the Basic Mode Status Register              */
            i--;
        } while (((reg_val & BMSR_LSTATUS) == 0) && (i > 0));           /* While link not established and retries remain    */
    }

    if (i == 0) {                                                       /* If we are out of retries...                      */
        return NET_PHY_ERR_AUTONEG_TIMEOUT;                      /* Return a timeout error                           */
    } else {
        return NET_PHY_ERR_NONE;                                 /* Link up and retries remain                       */
    }
}


/*
*********************************************************************************************************
*                                    NetNIC_PhyAutoNegState()
*
* Description : Returns state of auto-negotiation
*               This instance probe the Davicom DM9161AE '3.3V Dual-Speed Fast Ethernet Transceiver'
*
* Argument(s) : none.
*
* Return(s)   : State of auto-negociation (DEF_OFF = not completed, DEF_ON = completed).
*
* Caller(s)   : NetNIC_PhyInit.
*
* Note(s)     : If any error is encountered while reading the PHY, this function
*               will return Auto Negotiation State = DEF_OFF (incomplete).
*********************************************************************************************************
*/

BOOLEAN  NetNIC_PhyAutoNegState ()
{
    UINT32  reg_val;


    reg_val = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);
    reg_val = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);

    if ((reg_val & BMSR_ANEGCOMPLETE) == BMSR_ANEGCOMPLETE) {   /* DM9161AE register 0x01: Basic Status Register #1      */
        return (DEF_ON);                                        /* BIT 5 Signal the result of the auto negotiation       */
    } else {                                                    /* 1 = complete, 0 = incomplete                          */
        return (DEF_OFF);
    }
}

/*
*********************************************************************************************************
*                                     NetNIC_PhyLinkState()
*
* Description : Returns state of ethernet link
*               This instance probe the Davicom DM9161AE '3.3V Dual-Speed Fast Ethernet Transceiver'
*
* Argument(s) : none.
*
* Return(s)   : State of ethernet link (DEF_OFF = link down, DEF_ON = link up).
*
* Caller(s)   : NetNIC_PhyISR_Handler.
*
* Note(s)     : If any error is encountered while reading the PHY, this function
*               will return link state = DEF_OFF.
*********************************************************************************************************
*/

BOOLEAN  NetNIC_PhyLinkState ()
{
    UINT16  reg_val;
                                                                /* DM9161AE register 0x01: Basic Status Register #1      */
                                                                /* BIT 2 , Link Status, 1 = linked, 0 = not linked.      */
    reg_val      = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);
    reg_val      = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);

    reg_val     &= BMSR_LSTATUS;

    if (reg_val == BMSR_LSTATUS) {
        return (DEF_ON);
    } else {
        return (DEF_OFF);
    }
}



/*
*********************************************************************************************************
*                                     NetPHY_GetLinkSpeed()
*
* Description : Returns the speed of the current Ethernet link
*               This probes the Davicom DM9161AE '3.3V Dual-Speed Fast Ethernet Transceiver'
*
* Argument(s) : none.
*
* Return(s)   : 0 = No Link, 10 = 10mbps, 100 = 100mbps
*
* Caller(s)   : AT91SAM7X256_EMAC_Init()
*
* Note(s)     : none.
*********************************************************************************************************
*/

UINT32 NetPHY_GetLinkSpeed ()
{
	UINT32 bmsr;
    UINT32 bmcr;
    UINT32 lpa;


    bmsr = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);     /* Get Link Status from PHY status reg. Requires 2 reads */
	bmsr = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);     /* Get Link Status from PHY status reg. Requires 2 reads */

    if ((bmsr & BMSR_LSTATUS) == 0) {
        return (NET_PHY_SPD_0);                                 /* No link                                               */
    }

	bmcr = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);     /* Read the PHY Control Register                         */
	
    if ((bmcr & BMCR_ANENABLE) == BMCR_ANENABLE) {		        /* If AutoNegotiation is enabled                         */
        if ((bmsr & BMSR_ANEGCOMPLETE) == 0) {                  /* If AutoNegotiation is not complete                    */
			return (NET_PHY_SPD_0);       					    /* AutoNegotitation in progress                          */
        }

		lpa = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_ANLPAR);   /* Read the Link Partner Ability Register                */

        if (((lpa & LPA_100FULL) == LPA_100FULL) || ((lpa & LPA_100HALF) == LPA_100HALF)) {
			return (NET_PHY_SPD_100);
        } else {
			return (NET_PHY_SPD_10);
        }
	} else {                                                    /* Auto-negotiation not enabled, get speed from BMCR     */
        if ((bmcr & BMCR_SPEED100) == BMCR_SPEED100) {
            return (NET_PHY_SPD_100);
        } else {
            return (NET_PHY_SPD_10);
        }
	}
}


/*
*********************************************************************************************************
*                                     NetPHY_GetDuplex()
*
* Description : Returns the duplex mode of the current Ethernet link
*               This probes the Davicom DM9161AE '3.3V Dual-Speed Fast Ethernet Transceiver'
*
* Argument(s) : none.
*
* Return(s)   : 0 = Unknown (Auto-Neg in progress), 1 = Half Duplex, 2 = Full Duplex
*
* Caller(s)   : AT91SAM7X256_EMAC_Init()
*
* Note(s)     : none.
*********************************************************************************************************
*/

UINT32 NetPHY_GetLinkDuplex ()
{
    UINT32 bmcr;
    UINT32 bmsr;
    UINT32 lpa;


    bmsr = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);     /* Get Link Status from PHY status reg. Requires 2 reads */
	bmsr = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);     /* Get Link Status from PHY status reg. Requires 2 reads */


    if ((bmsr & BMSR_LSTATUS) == 0) {
        return (NET_PHY_DUPLEX_UNKNOWN);                        /* No link, return 'Duplex Uknown'                       */
    }

	bmcr = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_BMSR);     /* Read the PHY Control Register                         */
	
    if ((bmcr & BMCR_ANENABLE) == BMCR_ANENABLE) {		        /* If AutoNegotiation is enabled                         */
        if ((bmsr & BMSR_ANEGCOMPLETE) == 0) {                  /* If AutoNegotiation is not complete                    */
			return (NET_PHY_DUPLEX_UNKNOWN);      			    /* AutoNegotitation in progress                          */
        }

		lpa = NetNIC_PhyRegRd(AT91C_PHY_ADDR, DM9161AE_ANLPAR);   /* Read the Link Partner Ability Register                */

        if (((lpa & LPA_100FULL) == LPA_100FULL) || ((lpa & LPA_10FULL) == LPA_10FULL)) {
			return (NET_PHY_DUPLEX_FULL);
        } else {
            return (NET_PHY_DUPLEX_HALF);
        }
	} else {                                                    /* Auto-negotiation not enabled, get duplex from BMCR    */
        if ((bmcr & BMCR_FULLDPLX) == BMCR_FULLDPLX) {
            return (NET_PHY_DUPLEX_FULL);
        } else {
            return (NET_PHY_DUPLEX_HALF);
        }
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线观看免费网站| 日韩精品中文字幕在线不卡尤物| 国产成人综合自拍| 中文字幕亚洲综合久久菠萝蜜| 青青草视频一区| 欧美一区二区三区在| 三级成人在线视频| 日韩区在线观看| 国产精品一二二区| 亚洲激情五月婷婷| 欧美日韩精品一区二区三区四区| 国产精品欧美精品| 一本一道综合狠狠老| 午夜a成v人精品| 精品久久久久久久一区二区蜜臀| 婷婷丁香久久五月婷婷| 成人免费在线视频| 欧美性色综合网| 成人免费在线视频| 欧美视频在线不卡| av一区二区不卡| 午夜视黄欧洲亚洲| 亚洲精品久久嫩草网站秘色| 中文字幕av一区 二区| 91黄视频在线观看| 日本欧美韩国一区三区| 久久精品一区二区| 欧美伊人久久久久久午夜久久久久| 一个色妞综合视频在线观看| av一本久道久久综合久久鬼色| 樱桃视频在线观看一区| 国产精品热久久久久夜色精品三区| 色综合一区二区| 日韩经典一区二区| 亚洲成人1区2区| 欧美经典一区二区| 国产欧美精品一区| 制服丝袜国产精品| 免费观看30秒视频久久| 亚洲国产精品一区二区久久恐怖片 | 激情综合一区二区三区| 自拍偷拍国产精品| 久久久久88色偷偷免费| 欧美色综合天天久久综合精品| 日韩黄色小视频| 视频一区二区三区在线| 日韩av网站在线观看| 日韩影院免费视频| 蜜芽一区二区三区| 欧美电影在哪看比较好| 成人免费av资源| 久国产精品韩国三级视频| 麻豆成人久久精品二区三区红| 1区2区3区欧美| 亚洲精品日韩综合观看成人91| 精品成人一区二区| 91精品国产综合久久香蕉麻豆| 福利一区在线观看| 久久av老司机精品网站导航| 亚洲尤物视频在线| 亚洲色图欧美在线| 国产欧美综合在线| 国产精品对白交换视频 | 亚洲午夜视频在线观看| 天天爽夜夜爽夜夜爽精品视频| 国产精品青草久久| 久久先锋资源网| 日韩一级大片在线观看| 久久精品人人做人人爽97| 中文字幕一区二区三区在线观看| 欧美成人精品二区三区99精品| 欧美系列日韩一区| 精品sm捆绑视频| 中文字幕永久在线不卡| 天堂资源在线中文精品| 国产在线日韩欧美| 国内精品嫩模私拍在线| 成人激情小说乱人伦| av电影天堂一区二区在线观看| 经典三级一区二区| 91网上在线视频| 色呦呦一区二区三区| 欧美另类久久久品| 亚洲国产高清不卡| 亚洲成人1区2区| 高清成人免费视频| 91精品久久久久久久久99蜜臂| 91.麻豆视频| 欧美国产一区二区| 国产精品色在线观看| 婷婷六月综合亚洲| 成人黄色小视频| va亚洲va日韩不卡在线观看| 4438成人网| 国产精品国产馆在线真实露脸| 国产精品三级久久久久三级| 丝袜美腿亚洲综合| 日韩av不卡在线观看| 99精品久久99久久久久| 久久精品国产**网站演员| 日本少妇一区二区| 99久久国产综合精品色伊| 日韩一区二区三区免费看| 亚洲你懂的在线视频| 三级久久三级久久| 91在线精品秘密一区二区| 亚洲精品一区二区在线观看| 亚洲福利一二三区| 蜜桃视频一区二区| 欧美日韩视频在线一区二区| 99re热这里只有精品免费视频| 色综合久久88色综合天天| 国产午夜久久久久| 最新国产成人在线观看| 国产东北露脸精品视频| 欧美一区二区播放| 亚洲成人精品影院| 色94色欧美sute亚洲13| 国产精品成人免费精品自在线观看| 亚洲免费在线播放| 成人激情开心网| 久久九九影视网| 国产一区二区美女诱惑| 色婷婷亚洲婷婷| 国产精品免费看片| 成人在线综合网| 国产香蕉久久精品综合网| 日本不卡免费在线视频| av不卡免费电影| 2021久久国产精品不只是精品| 日韩三级在线免费观看| 丝袜美腿亚洲综合| 欧美三级韩国三级日本三斤| 亚洲一区二区在线免费观看视频 | 欧美日韩视频不卡| 夜夜嗨av一区二区三区网页| eeuss鲁一区二区三区| 欧美美女一区二区三区| 亚洲成人在线观看视频| 欧洲日韩一区二区三区| 91精品国产综合久久久久| 亚洲电影一级黄| 欧美精选一区二区| 日本一区二区三区四区| 国产成人亚洲综合a∨猫咪| 久久丝袜美腿综合| 国产不卡在线播放| 国产精品福利一区二区| 91丨九色丨蝌蚪丨老版| 亚洲综合在线免费观看| 久久99九九99精品| 色悠悠久久综合| 亚洲成人黄色影院| 欧美成人一区二区三区| 亚洲尤物视频在线| 日韩丝袜情趣美女图片| 国产高清久久久久| 亚洲青青青在线视频| 欧美精品99久久久**| 蜜桃视频一区二区| 欧美国产精品一区二区三区| 91小视频在线观看| 视频一区中文字幕| 久久午夜电影网| 男人的j进女人的j一区| 久久久亚洲欧洲日产国码αv| 天使萌一区二区三区免费观看| 色8久久精品久久久久久蜜| 亚洲第四色夜色| 精品盗摄一区二区三区| 午夜不卡av在线| 国产天堂亚洲国产碰碰| 在线免费亚洲电影| 久久99国内精品| 亚洲精品乱码久久久久| 日韩一卡二卡三卡| 不卡视频免费播放| 免费国产亚洲视频| 欧美一区二区日韩| 成人午夜av在线| 污片在线观看一区二区| 欧美日韩aaaaa| 国产91在线看| 五月天欧美精品| 欧美精品色一区二区三区| 国产综合一区二区| 亚洲福利一区二区| 国产精品拍天天在线| 日韩一区二区三区视频| 另类欧美日韩国产在线| 亚洲欧美日本在线| 在线观看日韩一区| 国产麻豆精品久久一二三| 亚洲永久精品大片| 欧美国产亚洲另类动漫| 日韩一区二区在线免费观看| 91色视频在线| 国产黄色成人av| 日本欧美加勒比视频| 亚洲午夜视频在线观看|