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

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

?? mac.c

?? 一個實例接受
?? C
?? 第 1 頁 / 共 3 頁
字號:


// Initialize MAC Controller
void MacInitialize(int num)
{
 //UART_printf("MacInitialize()\n");
 if (num==0)
   {
    // MAC interrupt vector setup.
    SetIntISR(EMCTXINT0, MAC0_Tx_isr) ;
    SetIntISR(EMCRXINT0, MAC0_Rx_isr) ;

    // Set the Tx and Rx Frame Descriptor
    TxFDInitialize(num) ;
    RxFDInitialize(num) ;

    // Set the CAM Control register and the MAC address value
    FillCamEntry(0, 0, gCam0M_0, gCam0L_0);
    CAMCMR_0 = gCAMCMR ;

    // Enable MAC Tx and Rx interrupt.
    Enable_Int(EMCTXINT0);
    Enable_Int(EMCRXINT0);

    // Configure the MAC control registers.
    ReadyMac(num) ;
   }
 else if (num==1)
   {
    // MAC interrupt vector setup.
    SetIntISR(EMCTXINT1, MAC1_Tx_isr) ;
    SetIntISR(EMCRXINT1, MAC1_Rx_isr) ;

    // Set the Tx and Rx Frame Descriptor
    TxFDInitialize(num) ;
    RxFDInitialize(num) ;

    // Set the CAM Control register and the MAC address value
    FillCamEntry(1, 0, gCam0M_1, gCam0L_1);
    CAMCMR_1 = gCAMCMR ;

    // Enable MAC Tx and Rx interrupt.
    Enable_Int(EMCTXINT1);
    Enable_Int(EMCRXINT1);
    
    // Configure the MAC control registers.
    ReadyMac(num) ;
   }
}


// Initialize Tx frame descriptor area-buffers.
void TxFDInitialize(int num)
{
 sFrameDescriptor *pFrameDescriptor;
 sFrameDescriptor *pStartFrameDescriptor;
 sFrameDescriptor *pLastFrameDescriptor = NULL;
 U32 FrameDataAddr;
 U32 i;

 if (num==0)
   {
    // Get Frame descriptor's base address.
    TXDLSA_0 = (U32)TxFDBaseAddr0;
    gWTxFDPtr[0] = gCTxFDPtr[0] = TXDLSA_0;

    // Get Transmit buffer base address.
    FrameDataAddr = (U32)TxFBABaseAddr0;

    // Generate linked list.
    pFrameDescriptor = (sFrameDescriptor *) gCTxFDPtr[0];
    pStartFrameDescriptor = pFrameDescriptor;

    for(i=0; i < MaxTxFrameDescriptors; i++)
    {
     if (pLastFrameDescriptor == NULL)
       pLastFrameDescriptor = pFrameDescriptor;
     else
       pLastFrameDescriptor->NextFrameDescriptor = (U32)pFrameDescriptor;

     pFrameDescriptor->Status1 = 0;
     pFrameDescriptor->FrameDataPtr = (U32)FrameDataAddr;
     pFrameDescriptor->Status2 = (U32)0x0;
     pFrameDescriptor->NextFrameDescriptor = NULL;

     pLastFrameDescriptor = pFrameDescriptor;
     pFrameDescriptor++;
     FrameDataAddr += sizeof(sMACFrame);
    }

    // Make Frame descriptor to ring buffer type.
    pFrameDescriptor--;
    pFrameDescriptor->NextFrameDescriptor = (U32)pStartFrameDescriptor;
   }
 else if (num==1)
   {
    // Get Frame descriptor's base address.
    TXDLSA_1 = (U32)TxFDBaseAddr1;
    gWTxFDPtr[1] = gCTxFDPtr[1] = TXDLSA_1;

    // Get Transmit buffer base address.
    FrameDataAddr = (U32)TxFBABaseAddr1;

    // Generate linked list.
    pFrameDescriptor = (sFrameDescriptor *) gCTxFDPtr[1];
    pStartFrameDescriptor = pFrameDescriptor;

    for(i=0; i < MaxTxFrameDescriptors; i++)
    {
     if (pLastFrameDescriptor == NULL)
       pLastFrameDescriptor = pFrameDescriptor;
     else
       pLastFrameDescriptor->NextFrameDescriptor = (U32)pFrameDescriptor;

     pFrameDescriptor->Status1 = 0;
     pFrameDescriptor->FrameDataPtr = (U32)FrameDataAddr;
     pFrameDescriptor->Status2 = (U32)0x0;
     pFrameDescriptor->NextFrameDescriptor = NULL;

     pLastFrameDescriptor = pFrameDescriptor;
     pFrameDescriptor++;
     FrameDataAddr += sizeof(sMACFrame);
    }

    // Make Frame descriptor to ring buffer type.
    pFrameDescriptor--;
    pFrameDescriptor->NextFrameDescriptor = (U32)pStartFrameDescriptor;
   }
}


// Initialize Rx frame descriptor area-buffers.
void RxFDInitialize(int num)
{
 sFrameDescriptor *pFrameDescriptor;
 sFrameDescriptor *pStartFrameDescriptor;
 sFrameDescriptor *pLastFrameDescriptor = NULL;
 U32 FrameDataAddr;
 U32 i;

 if (num==0)
   {
    // Get Frame descriptor's base address.
    RXDLSA_0 = (U32)RxFDBaseAddr0;
    gCRxFDPtr[0] = RXDLSA_0;

    // Get Transmit buffer base address.
    FrameDataAddr = (U32)RxFBABaseAddr0;

    // Generate linked list.
    pFrameDescriptor = (sFrameDescriptor *) gCRxFDPtr[0];
    pStartFrameDescriptor = pFrameDescriptor;

    for(i=0; i < MaxRxFrameDescriptors; i++)
    {
     if (pLastFrameDescriptor == NULL)
       pLastFrameDescriptor = pFrameDescriptor;
     else
       pLastFrameDescriptor->NextFrameDescriptor = (U32)pFrameDescriptor;

     pFrameDescriptor->Status1 = RXfOwnership_DMA;
     pFrameDescriptor->FrameDataPtr = (U32)FrameDataAddr;
     pFrameDescriptor->Status2 = (U32)0x0;
     pFrameDescriptor->NextFrameDescriptor = NULL;

     pLastFrameDescriptor = pFrameDescriptor;
     pFrameDescriptor++;
     FrameDataAddr += sizeof(sMACFrame);
    }

    // Make Frame descriptor to ring buffer type.
    pFrameDescriptor--;
    pFrameDescriptor->NextFrameDescriptor = (U32)pStartFrameDescriptor;
   }
 else if (num==1)
   {
    // Get Frame descriptor's base address.
    RXDLSA_1 = (U32)RxFDBaseAddr1;
    gCRxFDPtr[1] = RXDLSA_1;

    // Get Transmit buffer base address.
    FrameDataAddr = (U32)RxFBABaseAddr1;

    // Generate linked list.
    pFrameDescriptor = (sFrameDescriptor *) gCRxFDPtr[1];
    pStartFrameDescriptor = pFrameDescriptor;

    for(i=0; i < MaxRxFrameDescriptors; i++)
    {
     if (pLastFrameDescriptor == NULL)
       pLastFrameDescriptor = pFrameDescriptor;
     else
       pLastFrameDescriptor->NextFrameDescriptor = (U32)pFrameDescriptor;

     pFrameDescriptor->Status1 = RXfOwnership_DMA;
     pFrameDescriptor->FrameDataPtr = (U32)FrameDataAddr;
     pFrameDescriptor->Status2 = (U32)0x0;
     pFrameDescriptor->NextFrameDescriptor = NULL;

     pLastFrameDescriptor = pFrameDescriptor;
     pFrameDescriptor++;
     FrameDataAddr += sizeof(sMACFrame);
    }

    // Make Frame descriptor to ring buffer type.
    pFrameDescriptor--;
    pFrameDescriptor->NextFrameDescriptor = (U32)pStartFrameDescriptor;
   }
}



// set Registers related with MAC.
void ReadyMac(int num)
{
 if (num==0)
   {
     if (EXTERNAL_LOOPBACK_PORT == 0)
     {
         MIEN_0 = gMIEN | EnTDU | EnTXEMP | EnRXOV | EnCRCE | EnRDU;
         MCMDR_0 = MCMDR_RXON | MCMDR_EnMDC | MCMDR_FDUP | MCMDR_ALP | MCMDR_ARP;
     }
     else
     {
         MIEN_0 = gMIEN ;
        //MCMDR_0 = gMCMDR ;
    
        //CMN
        MCMDR_0 = MCMDR_RXON | MCMDR_EnMDC | MCMDR_FDUP | MCMDR_SPCRC; 
     }
   }
 else if (num==1)
   {
    
     if (EXTERNAL_LOOPBACK_PORT == 1)
     {
         MIEN_1 = gMIEN | EnTDU | EnTXEMP | EnRXOV | EnCRCE | EnRDU;
         //MCMDR_0 = gMCMDR ;
    
         //CMN
         //Collect ANY packet (Runt, Long and CRC error) !!!
         MCMDR_1 = MCMDR_RXON | MCMDR_EnMDC | MCMDR_FDUP | MCMDR_ALP | MCMDR_ARP;
      }
      else
      {
         MIEN_1 = gMIEN ;        
         MCMDR_1 = MCMDR_RXON | MCMDR_EnMDC | MCMDR_FDUP | MCMDR_SPCRC; 
      }
      
   }
}


// MAC Transfer Start for interactive mode
void MacTxGo(int num)
{
 if (num==0)
   {
    if (!(MCMDR_0&MCMDR_TXON))
      MCMDR_0 |= MCMDR_TXON ;
       
    TSDR_0 = 0;  
   } 
 else if (num==1)
   {
    if (!(MCMDR_1&MCMDR_TXON))
      MCMDR_1 |= MCMDR_TXON ;

    TSDR_1 = 0;  
   } 
}


// Mac Rx Off and disable all interrupts
void MacRxOff(int num)
{
 if (num==0)
   MCMDR_0 &= ~MCMDR_RXON ;
 else
   MCMDR_1 &= ~MCMDR_RXON ;
}


//CMN
void CheckTxFDStatus(int port, sFrameDescriptor *pTxFDptr)
{
   U32 Status;
   
   Status = (pTxFDptr->Status2 >> 16) & 0xffff;

   if (Status & TXFD_TXCP)
   {
       gsMacTxStatus[port].TXCP++ ;  
       gsMacTxStatus[port].TxBytes += pTxFDptr->Status2 & 0xFFFF;
       
       TxPktSeq = *((volatile U32 *) (pTxFDptr->FrameDataPtr + 16));
       if (TxPktSeq != TxPktSeqWanted)
       {
           *((volatile unsigned int *) 0xFFF03210) = 0x43;
           TxPktSeqErr++;
           TxPktSeqWanted = TxPktSeq+1;
       }
       else
           TxPktSeqWanted++;
       
   }
   else 
        gTxErrPacketCnt[port]++;
       
   // Save Error status
   if (Status & TXFD_TXABT) gsMacTxStatus[port].TXABT++ ;
   if (Status & TXFD_DEF)   gsMacTxStatus[port].DEF++ ;
   if (Status & TXFD_PAU)   gsMacTxStatus[port].PAU++ ;
   if (Status & TXFD_EXDEF) gsMacTxStatus[port].EXDEF++ ;
   if (Status & TXFD_NCS)   gsMacTxStatus[port].NCS++ ;
   if (Status & TXFD_SQE)   gsMacTxStatus[port].SQE++ ;
   if (Status & TXFD_LC)    gsMacTxStatus[port].LC++ ;
   if (Status & TXFD_TXHA)  gsMacTxStatus[port].TXHA++ ;
 
   pTxFDptr->Status2 &= (U32) 0x0000FFFF;
   gCTxFDPtr[port] = (U32)pTxFDptr->NextFrameDescriptor ;

}


// Interrupt Service Routine for MAC0 Tx
void MAC0_Tx_isr(void)
{   
 sFrameDescriptor *pTxFDptr;
 U32 *pFrameDataPtr ;
 U32 Status, RdValue;
 U32 CTxPtr ;
   
 RdValue=MISTA_0;
 
 
 if (RdValue & 0x00800000)
     gsMacTxStatus[0].TDU++;
     
 if (RdValue & 0x00020000)
     gsMacTxStatus[0].EMP++;
  
 MISTA_0=RdValue&0xffff0000;
 
#ifdef TxInt_Msg
 UART_printf("MAC0_Tx_isr(%x)\n",RdValue) ;
#endif 

 if (RdValue & MISTA_TxBErr)
   {
    FIFOTHD_0|=SWR;
    LanInitialize(0);
    MacRxDoneFlagForLoopBackCheck[0] = 1 ;
    gsMacTxStatus[0].TxBErr++ ; //CMN
   }
 else
   {  
    CTxPtr = CTXDSA_0 ;

    while ( gCTxFDPtr[0] != CTxPtr )
    {
     pTxFDptr = (sFrameDescriptor *) gCTxFDPtr[0];

     // Check CPU ownership, if Owner is DMA then break
     pFrameDataPtr = (U32 *)&pTxFDptr->Status1;
     if ( (*pFrameDataPtr & TXfOwnership_DMA) )
       break ;

     Status = (pTxFDptr->Status2 >> 16) & 0xffff;

     if (Status & TXFD_TXCP)
     {
       gsMacTxStatus[0].TXCP++ ;  
       gsMacTxStatus[0].TxBytes += pTxFDptr->Status2 & 0xFFFF; //CMN
       
#if 1
       if (EXTERNAL_LOOPBACK_PORT == 0)
       {
           TxPktSeq = *((volatile U32 *) (pTxFDptr->FrameDataPtr + 16));
           if (TxPktSeq != TxPktSeqWanted)
           {           
               TxPktSeqErr++;
               TxPktSeqWanted = TxPktSeq+1;
           }
           else
               TxPktSeqWanted++;
       }
#endif       
     }
     else
        gTxErrPacketCnt[0]++;
       
      // Save Error status
      if (Status & TXFD_TXABT) gsMacTxStatus[0].TXABT++ ;
      if (Status & TXFD_DEF)   gsMacTxStatus[0].DEF++ ;
      if (Status & TXFD_PAU)   gsMacTxStatus[0].PAU++ ;
      if (Status & TXFD_EXDEF) gsMacTxStatus[0].EXDEF++ ;
      if (Status & TXFD_NCS)   gsMacTxStatus[0].NCS++ ;
      if (Status & TXFD_SQE)   gsMacTxStatus[0].SQE++ ;
      if (Status & TXFD_LC)    gsMacTxStatus[0].LC++ ;
      if (Status & TXFD_TXHA)  gsMacTxStatus[0].TXHA++ ;
       
     // Clear Framedata pointer already used.
     pTxFDptr->Status2 &= (U32) 0x0000FFFF;

     gCTxFDPtr[0] = (U32)pTxFDptr->NextFrameDescriptor ;
    }
  
    MacTxDoneFlagForLoopBackCheck[0] = 1 ;
   }
}


// Interrupt Service Routine for MAC1 Tx
void MAC1_Tx_isr(void)
{   
 sFrameDescriptor *pTxFDptr;
 U32 *pFrameDataPtr ;
 U32 Status, RdValue;
 U32 CTxPtr ;
 
 RdValue=MISTA_1;
  
 if (RdValue & 0x00800000)
     gsMacTxStatus[1].TDU++;
     
 if (RdValue & 0x00020000)
     gsMacTxStatus[1].EMP++;
 
 MISTA_1=RdValue&0xffff0000;
 
#ifdef TxInt_Msg
 UART_printf("MAC1_Tx_isr(%x)\n",RdValue) ;
#endif 
 
 if (RdValue & MISTA_TxBErr)
   {
    FIFOTHD_1|=SWR;
    LanInitialize(1);
    MacTxDoneFlagForLoopBackCheck[1] = 1 ;
    gsMacTxStatus[1].TxBErr++;  
   } 
 else
   {
    CTxPtr = CTXDSA_1 ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
5月丁香婷婷综合| 丝袜美腿亚洲一区二区图片| 99久久精品情趣| 亚洲欧美国产毛片在线| 97成人超碰视| 亚洲成av人片一区二区梦乃| 欧美一级视频精品观看| 韩国中文字幕2020精品| 国产亚洲自拍一区| 91丝袜美腿高跟国产极品老师 | 五月婷婷综合网| 欧美一区二区三区免费视频| 国产乱人伦偷精品视频不卡 | 久久天堂av综合合色蜜桃网| 国产成人午夜精品影院观看视频 | 精品一二三四在线| 亚洲国产精品t66y| 欧美日韩精品一区二区三区蜜桃 | 久久99精品国产麻豆婷婷| 中文字幕av免费专区久久| 日本电影亚洲天堂一区| 日韩中文欧美在线| 欧美激情在线一区二区三区| 欧美日韩一本到| 国产精品一区二区果冻传媒| 亚洲国产成人tv| 久久欧美一区二区| 欧美日韩一区三区四区| 国产激情一区二区三区| 偷拍一区二区三区四区| 欧美国产一区视频在线观看| 6080国产精品一区二区| 白白色 亚洲乱淫| 免费成人小视频| 亚洲天堂2016| 亚洲精品一区二区三区香蕉 | 91视频精品在这里| 麻豆视频观看网址久久| 一区二区三区欧美在线观看| 精品国产免费一区二区三区四区 | 成人黄色av电影| 免费人成黄页网站在线一区二区 | 亚洲欧洲国产专区| 日韩欧美国产电影| 在线看国产一区| 成人国产视频在线观看| 美脚の诱脚舐め脚责91 | 97se亚洲国产综合自在线观| 国内成+人亚洲+欧美+综合在线| 亚洲午夜精品网| 亚洲免费观看高清| 国产精品午夜春色av| 欧美一卡二卡三卡| 欧美美女激情18p| 色综合咪咪久久| 97超碰欧美中文字幕| 岛国一区二区在线观看| 精品中文av资源站在线观看| 日韩国产在线一| 午夜精品在线视频一区| 一区二区三区四区不卡在线 | 亚洲第一福利视频在线| 亚洲少妇最新在线视频| 2021中文字幕一区亚洲| 精品少妇一区二区三区日产乱码 | 日本福利一区二区| 色综合天天综合在线视频| 成人av午夜电影| av一区二区三区在线| 成人福利视频在线| 成人黄色av网站在线| 成人sese在线| 97久久精品人人做人人爽50路| 成人污污视频在线观看| 成人一区二区在线观看| 成人高清视频免费观看| 97精品久久久午夜一区二区三区 | 精品久久99ma| 久久亚洲欧美国产精品乐播| 久久精品人人做人人综合 | 久久99久久久久| 九九九精品视频| 国产精品66部| eeuss鲁片一区二区三区| 99精品久久只有精品| 在线日韩国产精品| 欧美高清一级片在线| 日韩欧美中文字幕一区| 久久久高清一区二区三区| 中文字幕成人网| 亚洲免费在线视频| 亚洲成a人v欧美综合天堂下载| 丝袜美腿亚洲综合| 国产精品一二三区在线| 成人激情小说网站| 欧美日韩免费观看一区三区| 欧美mv日韩mv国产网站| 精品国产一二三区| 一区二区中文视频| 亚洲一区二区在线免费看| 婷婷国产在线综合| 国产麻豆精品视频| 色噜噜狠狠成人网p站| 欧美高清www午色夜在线视频| 久久婷婷国产综合精品青草| 国产精品久久三区| 午夜欧美2019年伦理| 国产麻豆精品视频| 欧洲激情一区二区| 欧美酷刑日本凌虐凌虐| 久久精品亚洲乱码伦伦中文| 一区二区免费视频| 免费观看91视频大全| 99综合影院在线| 日韩欧美一级精品久久| 欧美国产日韩一二三区| 日韩精品欧美精品| 99久久综合色| 日韩欧美不卡在线观看视频| 亚洲摸摸操操av| 国内精品久久久久影院色 | 色综合 综合色| 精品国产人成亚洲区| 亚洲视频一区二区在线| 久久成人18免费观看| 日本韩国一区二区三区视频| 久久综合一区二区| 日日骚欧美日韩| 成人小视频免费观看| 91精品国产高清一区二区三区蜜臀| 国产亚洲欧美日韩日本| 日韩av电影免费观看高清完整版在线观看| 国产一区二区不卡老阿姨| 69堂成人精品免费视频| 国产精品每日更新在线播放网址 | 日韩国产欧美三级| 91黄色小视频| 国产精品全国免费观看高清| 蜜臀av一级做a爰片久久| 91福利资源站| 一区视频在线播放| 国产在线精品国自产拍免费| 在线观看一区二区精品视频| 国产精品久久久久久户外露出 | 风间由美一区二区av101| 91麻豆精品国产91久久久| 国产精品久久三区| 国产mv日韩mv欧美| 久久精品一区二区三区不卡 | 99v久久综合狠狠综合久久| 久久蜜桃av一区精品变态类天堂| 日本aⅴ精品一区二区三区 | 日韩成人精品在线| 欧美色精品在线视频| 亚洲激情图片小说视频| 成人久久视频在线观看| 国产女人18毛片水真多成人如厕 | 久久久亚洲精品一区二区三区 | 国产999精品久久久久久绿帽| 日韩欧美一级特黄在线播放| 蜜桃视频在线一区| 精品国产乱码久久久久久蜜臀| 人人超碰91尤物精品国产| 欧美一区二区三区视频免费 | 亚洲国产经典视频| 成人免费视频网站在线观看| 欧美国产精品v| 成人激情小说乱人伦| 亚洲欧美综合网| 在线视频国内一区二区| 亚洲福中文字幕伊人影院| 欧洲人成人精品| 五月开心婷婷久久| 欧美成人猛片aaaaaaa| 激情成人综合网| 久久久久久久综合色一本| 国产精品18久久久久久久久| 久久精品一区二区三区四区| 福利一区二区在线观看| 1024成人网| 91行情网站电视在线观看高清版| 亚洲色图视频网| 在线免费亚洲电影| 青青草国产成人av片免费| 精品国产乱码久久久久久图片| 国产寡妇亲子伦一区二区| 国产精品久久一卡二卡| 91国在线观看| 麻豆高清免费国产一区| 久久久久久9999| 色哟哟日韩精品| 免费日韩伦理电影| 日本一二三不卡| 在线观看一区日韩| 久久99久久99| 亚洲啪啪综合av一区二区三区| 欧美美女视频在线观看| 国产一区二区视频在线| 一区二区三区美女视频| 日韩欧美在线网站|