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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ne64driver.c

?? 用于以太網開發
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*****************************************************************************
 *                      (c) Freescale  Inc. 2004 All rights reserved
 *
 * File Name     : ne64driver.c
 *
 * PURPOSE: NE64 Ethernet API
 *
 * DESCRIPTION: Defines higher level routines for the EMAC module
 *
 * Version : 3.0
 * Date    : 06/07/04
 *
 *****************************************************************************/
#include "MOTTYPES.h"
#include "address.h"
#include "ne64config.h"
#include "ne64driver.h"
#include "ne64debug.h"          /* diagnostics - enabled when SCI_DEBUG defined */
#include "IO_Map.h"

/* CALLBACK function from EMAC ISR */
extern UINT16 NE64Receive (void *PktBuffer, UINT16 len, UINT16 flags);

/* These structures/unions should NOT be exported! */
typedef union uMCHASHUnion
  {
  tU16 Word[4];         /* Multicast Hash Table bits 63 to 0 */
  tU08 Byte[8];
  }tMCHASHStr;

typedef union uMACADUnion
{
  tU16 Word[3];         /* MAC Address bits 47 to 0 */
  tU08 Byte[6];
} tMACADStr;

typedef struct
  {
   tU08 da[6]; /**< destination address */
   tU08 sa[6]; /**< source address */
   tU16 ft;    /**< frame type */
  }tFRHEAD;
  
typedef tFRHEAD * pFRHEAD;



#define RAM_START 0x2000    /**< RAM block starting address */

#if WORD_ACCESS
  tREG16 emacFIFOa[EMAC_RX_SZ/2] @ RAM_START;                     /**< Emac RX buffer A definition */
  tREG16 emacFIFOb[EMAC_RX_SZ/2] @ (RAM_START + EMAC_RX_SZ);      /**< Emac RX buffer B definition */
  tREG16 emacFIFOtx[EMAC_TX_SZ/2] @ (RAM_START + 2*EMAC_RX_SZ);   /**< Emac TX buffer definition */
#else
  tU08 emacFIFOa[EMAC_RX_SZ] @ RAM_START;                         /**< Emac RX buffer A definition */
  tU08 emacFIFOb[EMAC_RX_SZ] @ (RAM_START + EMAC_RX_SZ);          /**< Emac RX buffer B definition */
  tU08 emacFIFOtx[EMAC_TX_SZ] @ (RAM_START + 2*EMAC_RX_SZ);       /**< Emac TX buffer definition */
#endif


//extern section
  extern   tU08    activebuffer;
  extern   tU08    gotlink;

#if WORD_ACCESS
  extern   tREG16    *rxa_pointer;
  extern   tREG16    *rxb_pointer;
  extern   tREG16    *tx_pointer;
#else
  extern   tU08    *rxa_pointer;
  extern   tU08    *rxb_pointer;
  extern   tU08    *tx_pointer;
#endif		//WORD_ACCESS
#if USE_SWLED
extern tU16 LEDcounter;
#endif	 //USE_SWLED


tU16 gotxflowc;			/**<Global Variable For Determination of
                                      * Flow Control Packets are sent in Full Duplex
                                      * defined in "main.c" */

tU08	gotlink;   						/**<Global Variable For Determination if
                                      * link is active (1=active)
                                      * defined in "main.c" */
                                      

                                     //Intialize Ethernet Module
//===============================================
void EtherInit (void)
{

  //Variable
  tU16 myctr; 								//generic counter variable
  tU16 mymrdata, mymwdata;    //temp variable for MII read/write data
  tU16 angotduplex, 					//Auto negotiation control variable
       etypecontrol, 				  //Ethertype filter control variable
       addressfiltercontrol;	//address filter control variable


  //No link present
  gotlink = 0;

  //=========================
  //PHY Inits	 - enable EPHY module	and EPHY Interrupt
  //=========================

  //Write PHY address before EPHYEN is set; this will latch EPHY register 14 on reset
  //address PHY 0 (default address of internal PHY); PHYADD0 | PHYADD1 | PHYADD2 | PHYADD3| PHYADD4
  EPHYCTL1 = PHY_ADDRESS;	 //Modify in "ne64config.h"

  //Enable EPHY module with PHY clocks disabled
  //Do not trun on PHY clocks untill both EMAC and EPHY are completely setup (see Below)
  EPHYCTL0 = EPHYCTL0_DIS100_MASK | EPHYCTL0_DIS10_MASK;
#if  AUTO_NEG
  //Enable auto_neg at start-up
  EPHYCTL0 = EPHYCTL0 & (~EPHYCTL0_ANDIS_MASK);
#else				//ELSE AUTO_NEG
  //Disable auto_neg at start-up
  EPHYCTL0 = EPHYCTL0 | EPHYCTL0_ANDIS_MASK;
#endif	    //AUTO_NEG

  //Enable EPHY module
  EPHYCTL0 = EPHYCTL0_EPHYEN_MASK | EPHYCTL0;      //Enable PHY

  //Enable EPHY LEDs and Interrupts
#if USE_SWLED  

  EPHYCTL0 = EPHYCTL0 | (EPHYCTL0_EPHYIEN_MASK );
#if   ACTLED
  DDRL_DDRL0 = 1;
  PTL_PTL0 = 1; //turn off LED
#endif
#if   LNKLED
  DDRL_DDRL1 = 1;
  PTL_PTL1 = 1; //turn off LED
#endif
#if   SPDLED
  DDRL_DDRL2 = 1;
  PTL_PTL3 = 1; //turn off LED
#endif
#if   DUPLED
  DDRL_DDRL3 = 1;
  PTL_PTL3 = 1; //turn off LED
#endif
#if   COLLED
  DDRL_DDRL4 = 1;
  PTL_PTL4 = 1; //turn off LED
#endif

#else
  EPHYCTL0 = EPHYCTL0 | (EPHYCTL0_LEDEN_MASK | EPHYCTL0_EPHYIEN_MASK );
#endif

  //DELAY, Delay staret-up
  for (myctr=18000; myctr >0; myctr--);


  //=========================
  //EMAC Inits
  //========================

  //We do not duplex yet since auto_neg is not complete so use half as default
  angotduplex = 0; 				 //Auto negotiation control variable

  //Configure RX mode based on EtherInit() define settings
  addressfiltercontrol = 0;		 //address filter control variable
#if (BRODC_REJ)
    addressfiltercontrol = addressfiltercontrol | BCREJ;
#endif
#if (CON_MULTIC)
    addressfiltercontrol = addressfiltercontrol | CONMC;
#endif
#if (PROM_MODE)
    addressfiltercontrol = addressfiltercontrol | PROM;
#endif

  //Configure Ethertype based on EtherInit() define settings
  etypecontrol = 0;				 //Ethertype filter control variable
#if (ETYPE_PET)
    etypecontrol = etypecontrol | T_PET;
#endif
#if (ETYPE_EMW)
    etypecontrol = etypecontrol | T_EMW;
#endif
#if (ETYPE_IPV6)
    etypecontrol = etypecontrol | T_IPV6;
#endif
#if (ETYPE_ARP)
    etypecontrol = etypecontrol | T_ARP;
#endif
#if (ETYPE_IPV4)
    etypecontrol = etypecontrol | T_IPV4;
#endif
#if (ETYPE_IEEE)
    etypecontrol = etypecontrol | T_IEEE;
#endif
#if (ETYPE_ALL)
    etypecontrol = etypecontrol & T_ALL;
#endif

  //Initialize EMAC including MII management Interface
  EtherOpen(MII_MDCSEL(BUS_CLOCK),
            BUFMAP,                   // defined in 'emacfifocfg.h'
            RX_MAX_FL,                // RX max packet lenght
            (void *)hard_addr,        // defined in 'address.h'
            etypecontrol,                // program ethertype fixed filter target */
            ETYPE_PRG,                // program prgramable ethertype value related to T_PET */
#if XFLOWC	 //this should be only enabled in auto negotiation if pause resolution confirms this (full duplex only)
            RFCE | addressfiltercontrol,
#else             //ELSE XFLOWC
            addressfiltercontrol,
#endif						//XFLOWC

#if  AUTO_NEG
            //Configure Net Control: Duplex, external PHY, loopback, wait
            angotduplex		        //Half Duplex operation default until auto_neg is complete
#else			//ELSE AUTO_NEG (manual speed duplex settings)
#if FULL_DUPLEX
            NETCT_FDX           // full duplex operation */
#else     //ELSE FULL_DUPLEX
            angotduplex           //Half Duplex operation */
#endif	  //FULL_DUPLEX
#endif		//AUTO_NEG
            );

  //Enable Select EMAC interrrupt: 
  IMASK = IMASK_TXCIE_MASK | IMASK_ECIE_MASK | IMASK_LCIE_MASK;
#if (!RX_POLL_MODE)    //USE RX INTERRUPTS
  IMASK = IMASK | IMASK_RXACIE_MASK |  IMASK_RXBCIE_MASK;
#endif  // RX_POLL_MODE
  IMASK = IMASK | IMASK_RXAOIE_MASK|IMASK_RXBOIE_MASK | IMASK_RXEIE_MASK;				//Buffer Overruns & RX error
  IMASK = IMASK | IMASK_BREIE_MASK;             //Babbling Error		
  IMASK = IMASK | IMASK_RFCIE_MASK;							//RX flow Control								  


  //Transmit pause initialization: set bit and pause time  duration
#if XFLOWC

#if AUTO_NEG
//   EtherPause(1,PAUSE_TIME);			 // PAUSE_TIME defined in "ne64config.h"
#endif	  //AUTO_NEG

#if FULL_DUPLEX
   gotxflowc = 1;
//   EtherPause(1,PAUSE_TIME);
#endif	  //FULL_DUPLEX

#endif		//XFLOWC

//===============================================
// Configure PHY through EMAC MII Serial Management now that MII clock is set (address PHY is 0x00)
//===============================================
   //READ  PHY_REG_IDX: PHY idenfitication which is composed from OUI and make/model/revision of PHY
#if READ_PHY_ID
   //read PHY_REG_ID1
   while ( !(MIIread(PHY_ADDRESS, PHY_REG_ID1 , &mymrdata)) );

   //read PHY_REG_ID2 - should be:
   while ( !(MIIread(PHY_ADDRESS, PHY_REG_ID2 , &mymrdata))  );

   //read PHY_REG_ADDR - should be: 0x00
   while ( !(MIIread(PHY_ADDRESS, PHY_REG_ADDR , &mymrdata)) );
#endif


//Read PHY_REG_ANAR then configure the PHY Link abilities for auto_negoigation
#if AUTO_NEG
   while ( !(MIIread(PHY_ADDRESS, PHY_REG_ANAR, &mymrdata)) );

//Configure Flow Control PHY Link abilities advertisement
    mymwdata = mymrdata;
#if XFLOWC
   mymwdata = mymwdata | PHY_R4_FC;
#endif //#if XFLOWC

//Configure Speed and Duplex PHY Link abilities advertisement
#if (~FULL10  & 1)
    mymwdata = mymwdata & ~PHY_R4_10F;
#endif
#if (~HALF10  & 1)
    mymwdata = mymwdata & ~PHY_R4_10H;
#endif
#if (~HALF100 & 1)  || (USE_EXTBUS)
    mymwdata = mymwdata & ~PHY_R4_100H;
#endif
#if (~FULL100  & 1)	 || (USE_EXTBUS)
    mymwdata = mymwdata & ~PHY_R4_100F;
#endif

   //Write PHY_REG_ANAR to configure PHY Link abilities advertisement
   while ( !(MIIwrite(PHY_ADDRESS, PHY_REG_ANAR, mymwdata  ))    );

#endif //#if AUTO_NEG

   //Enable PHY interrupts in Reg 16 (PHY Interrupt Control Register)
	 //Set PHY Interrupt Control Register
   mymwdata = PHY_R16_ACKIE | PHY_R16_PRIE | PHY_R16_LCIE | PHY_R16_ANIE;
   mymwdata = mymwdata | PHY_R16_PDFIE | PHY_R16_RFIE | PHY_R16_JABIE;
   while ( ! (MIIwrite(PHY_ADDRESS, PHY_REG_IR, mymwdata))   );

//===============================================
// Start up EPHY clocks (PLLs)
//===============================================

   //Read PHY Control Register 0
   while ( !(MIIread(PHY_ADDRESS, PHY_REG_CR, &mymrdata)) );


//Start up EPHY in auto negotiation
#if  AUTO_NEG

	 //Start PHY PLLs
     EPHYCTL0 = EPHYCTL0  & ~(EPHYCTL0_DIS100_MASK | EPHYCTL0_DIS10_MASK); //Let PHY PLLs be determined by PHY

//Start up EPHY without auto negotiation (CONFIGURE MANUALLY- SPEED AND DUPLEX)
#else	 //NO AUTO_NEG

//Set Duplex MANUALLY
#if FULL_DUPLEX
   mymwdata = mymrdata | PHY_R0_DPLX;		  //Set Full Duplex
#else                   //ELSE FULL_DUPLEX
   mymwdata = mymrdata & ~PHY_R0_DPLX;    //Set Half Duplex
#endif	                //FULL_DUPLEX

//Set Speed MANUALLY
#if SPEED100
#if USE_EXTBUS	 //OVERRIDE USER: Set SPEED10 since with Extbus&Ethernet speed limit is 10 Mbps
   mymwdata = mymwdata & ~PHY_R0_DR;
   //add warning		
#else
   mymwdata = mymwdata | PHY_R0_DR;		//Set SPEED100
#endif   
#else                   //ELSE SPEED100
   mymwdata = mymwdata & ~PHY_R0_DR;		//Set SPEED10
#endif	                //SPEED100

   //Write Config Register to set manually configure speed and duplex
   while ( !(MIIwrite(PHY_ADDRESS, PHY_REG_CR, mymwdata ))    );

	 //Start EPHY PLLs
   EPHYCTL0 = EPHYCTL0  & ~(EPHYCTL0_DIS100_MASK | EPHYCTL0_DIS10_MASK); //Let PHY PLLs be determined by PHY


#endif			      //AUTO_NEG

}

  
//===============================================
tU08 MIIwrite(tU08 _mpadr, tU08 _mradr, tU16 _mwdata) {
 
  tU16 temprdata;

  _DEBUGNL;_DEBUGT("-MIIWRITE-");
  if (MCMST_BUSY)
  {
   _DEBUGT("-MII_BUSY ");
   return 0; /* MII busy -> return with error  */
  }
  MPADR=_mpadr;
  MRADR=_mradr;
  MWDATA=_mwdata;
  MCMST_OP=MII_WRITE;

  //Wait for MII write
  while (!IEVENT_MMCIF); /* wait for transfer completed */
  IEVENT = IEVENT_MMCIF_MASK; /* Clear the flag in Emac */
  
  while ( ! (MIIread(PHY_ADDRESS, PHY_REG_IR, &temprdata))   );
    
  return 0xff; /* operation completed OK */
}

//===============================================
 tU08 MIIread(tU08 _mpadr, tU08 _mradr, tU16 * _mrdata)  {
 
  _DEBUGNL;_DEBUGT("-MIIREAD-");  
  if (MCMST_BUSY)
  {
   _DEBUGT("-MII_BUSY ");
   return 0; /* MII busy -> return with error */
  }

  MPADR=_mpadr;
  MRADR=_mradr;
  MCMST_OP=MII_READ;

  //Wait for MII read
  while (!IEVENT_MMCIF); /* wait for transfer completed */
  *_mrdata = MRDATA;
  IEVENT = IEVENT_MMCIF_MASK; /* Clear the flag in Emac */

  _DEBUGT("DATA= "); _DEBUGI(*_mrdata);	 _DEBUGNL;
  return 0xff; /* operation completed OK */
}



//===============================================
#if RX_POLL_MODE
tU16 EtherReceive(void * buffer)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精选一区二区| 精品视频1区2区| 久久久国产午夜精品| 狠狠狠色丁香婷婷综合激情| 精品99久久久久久| 丁香天五香天堂综合| 国产精品久久久久久妇女6080| 国产成人三级在线观看| 国产偷v国产偷v亚洲高清| 成人av资源在线观看| 亚洲日本成人在线观看| 欧美在线不卡一区| 免费观看成人av| 国产三级三级三级精品8ⅰ区| 成人免费黄色大片| 亚洲午夜一区二区三区| 日韩网站在线看片你懂的| 国内精品伊人久久久久av一坑| 精品粉嫩超白一线天av| 97国产精品videossex| 午夜精品免费在线| 久久影院视频免费| 成人18精品视频| 三级欧美韩日大片在线看| 久久亚洲一级片| 色乱码一区二区三区88 | 亚洲欧洲精品天堂一级| 欧美日韩aaa| 国产精品一级二级三级| 一级日本不卡的影视| 精品福利二区三区| 色综合久久综合网欧美综合网 | 日本网站在线观看一区二区三区 | 精品国产乱码久久久久久蜜臀| 国产精品一区在线观看乱码| 亚洲五月六月丁香激情| 久久久www免费人成精品| 在线亚洲免费视频| 国产成人精品亚洲日本在线桃色| 亚洲电影你懂得| 亚洲国产高清aⅴ视频| 欧美另类z0zxhd电影| av电影天堂一区二区在线| 麻豆成人久久精品二区三区红 | 精品少妇一区二区三区在线播放 | 欧美日韩在线播放| yourporn久久国产精品| 美女mm1313爽爽久久久蜜臀| 亚洲精品中文在线观看| 久久久精品免费免费| 欧美电影一区二区三区| 91九色最新地址| 成人app下载| 国产福利91精品一区二区三区| 亚洲v中文字幕| 亚洲精品视频免费观看| 国产精品欧美一区喷水| 精品免费视频一区二区| 欧美一区二视频| 欧美亚洲一区三区| 色噜噜狠狠色综合中国| 成人97人人超碰人人99| 国产白丝精品91爽爽久久| 久久99国产精品麻豆| 日韩国产欧美在线观看| 丝瓜av网站精品一区二区| 亚洲精品精品亚洲| 亚洲三级电影网站| 亚洲天天做日日做天天谢日日欢| 久久亚洲综合av| 久久久三级国产网站| 精品美女一区二区| 欧美成人bangbros| 日韩精品一区国产麻豆| 日韩欧美在线观看一区二区三区| 欧美日精品一区视频| 欧美熟乱第一页| 欧美三级资源在线| 欧美日韩国产高清一区二区三区| 欧美亚洲国产一区在线观看网站| 日本高清不卡视频| 欧美午夜精品久久久久久孕妇 | 欧美日韩精品欧美日韩精品| 在线观看欧美精品| 欧美日韩三级视频| 在线成人午夜影院| 日韩精品一区二区三区视频| 精品国产乱码久久久久久浪潮| 欧美不卡一区二区三区四区| 久久综合久久鬼色| 国产婷婷色一区二区三区| 欧美国产一区二区| 亚洲美女偷拍久久| 日韩激情av在线| 精品一区二区三区在线播放 | 天堂一区二区在线| 乱中年女人伦av一区二区| 欧美欧美欧美欧美首页| 欧美日韩国产123区| 欧美成人午夜电影| 久久综合九色综合97婷婷女人| 国产欧美一区在线| 亚洲黄色免费网站| 麻豆一区二区99久久久久| 大桥未久av一区二区三区中文| 91在线你懂得| 69堂精品视频| 国产精品女同互慰在线看| 一区二区三区四区五区视频在线观看| 亚洲成人免费观看| 国产一区91精品张津瑜| 91麻豆免费看| 精品成人在线观看| 亚洲免费观看高清完整版在线观看 | 日韩美女一区二区三区| 中文字幕不卡在线观看| 亚洲一区二区三区不卡国产欧美| 久久99国产精品免费| 91行情网站电视在线观看高清版| 欧美精品一卡二卡| 国产亚洲精品aa| 亚洲电影第三页| 成人av资源站| 精品国产99国产精品| 一区二区在线观看免费视频播放| 久99久精品视频免费观看| 一本久久a久久精品亚洲| 欧美精品一区二区三区蜜臀| 亚洲精品日韩一| 国产成人免费视频网站| 51精品国自产在线| 亚洲色图清纯唯美| 国产麻豆精品一区二区| 欧美区视频在线观看| 国产精品久久久久久久久免费樱桃 | 亚洲国产成人av好男人在线观看| 国产成人在线看| 欧美一级淫片007| 亚洲一区二区成人在线观看| 懂色av一区二区夜夜嗨| 精品国产91九色蝌蚪| 亚洲不卡一区二区三区| 色综合天天天天做夜夜夜夜做| 欧美大片顶级少妇| 午夜一区二区三区视频| 91理论电影在线观看| 久久精品人人做人人爽人人| 日本va欧美va欧美va精品| 欧美亚洲高清一区二区三区不卡| 亚洲国产精华液网站w| 九九在线精品视频| 欧美一区永久视频免费观看| 夜色激情一区二区| 91福利区一区二区三区| 黑人巨大精品欧美一区| 91精品国产综合久久久久久久久久 | 欧美在线一区二区三区| 中文字幕中文在线不卡住| 国产91精品一区二区麻豆网站 | 激情文学综合插| 日韩片之四级片| 日本不卡免费在线视频| 91麻豆精品91久久久久同性| 亚洲一区二区视频在线观看| 91免费在线视频观看| 亚洲欧美另类小说视频| av一区二区久久| 亚洲色图色小说| 欧美亚洲国产怡红院影院| 亚洲高清久久久| 欧美美女激情18p| 日韩不卡手机在线v区| 日韩一区国产二区欧美三区| 青青草精品视频| 26uuu另类欧美| 国产91精品久久久久久久网曝门| 国产精品色在线观看| av电影天堂一区二区在线| 一区二区三区免费网站| 欧美视频你懂的| 日本亚洲免费观看| 久久午夜老司机| www.av精品| 亚洲成人精品在线观看| 7777精品伊人久久久大香线蕉的 | eeuss鲁一区二区三区| √…a在线天堂一区| 色综合久久中文综合久久牛| 亚洲综合偷拍欧美一区色| 91精品国产欧美一区二区18| 国内精品伊人久久久久av影院 | 欧美网站大全在线观看| 亚洲国产精品久久久久秋霞影院| 欧美精品少妇一区二区三区 | 一区2区3区在线看| 日韩一区二区免费在线电影| 国产成人精品三级| 亚洲一区二区影院| 久久综合色综合88| 日本精品一区二区三区高清 |