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

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

?? mac.c

?? 很多的經(jīng)典的嵌入式例子 自己去看吧
?? 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一区二区三区免费野_久草精品视频
av网站一区二区三区| 色天天综合久久久久综合片| 色国产综合视频| 欧美极品少妇xxxxⅹ高跟鞋 | 91久久精品一区二区| 中文字幕av免费专区久久| 精品亚洲porn| 日韩三级视频在线看| 亚洲一区二区三区自拍| 91久久一区二区| 久久久久久久久伊人| 亚洲欧美色综合| 久久99精品国产.久久久久久| 欧美日韩国产在线观看| 亚洲成人手机在线| 精品久久久久av影院| 国产在线一区观看| 国产精品久久久久久户外露出 | 日韩主播视频在线| 欧美成人国产一区二区| 极品美女销魂一区二区三区| 国产日产欧产精品推荐色| 91麻豆国产福利在线观看| 亚洲欧美另类久久久精品| 日本道精品一区二区三区 | 日韩区在线观看| 白白色亚洲国产精品| 一区二区欧美视频| 精品日韩成人av| 一本久久精品一区二区| 亚洲夂夂婷婷色拍ww47| 欧美精品久久一区二区三区| 久久精品噜噜噜成人av农村| 91精品国产综合久久久久久久 | 欧美极品另类videosde| 91丨九色丨尤物| 久久精品国产99国产精品| 国产精品久久久久久久久免费丝袜 | 久久伊人中文字幕| 在线综合+亚洲+欧美中文字幕| 久久se精品一区精品二区| 亚洲一区二区三区小说| 中文在线资源观看网站视频免费不卡| 在线一区二区三区做爰视频网站| 日韩黄色片在线观看| 亚洲免费观看高清完整版在线观看 | 亚洲福利视频导航| 日韩一区二区三区在线观看| 久久精品免费看| 精品国产污网站| 在线免费观看日本欧美| 国产在线看一区| 狂野欧美性猛交blacked| 免费看欧美女人艹b| 亚洲成人av一区二区| 亚洲成人一二三| 偷拍与自拍一区| 亚洲 欧美综合在线网络| 亚洲国产欧美一区二区三区丁香婷| 亚洲人妖av一区二区| 亚洲一区二区三区免费视频| 亚洲欧美日韩国产中文在线| 国产欧美一区二区在线观看| 欧美精品国产精品| 欧美精品久久久久久久久老牛影院| 从欧美一区二区三区| 国产精品一级二级三级| 国产成人精品免费| 国产一区二区三区在线观看免费| 久久99日本精品| 麻豆国产一区二区| 丁香一区二区三区| 色综合婷婷久久| 欧美日韩大陆一区二区| 欧美日韩亚洲综合| 日韩一级高清毛片| 国产婷婷色一区二区三区四区 | 亚洲一级电影视频| 久久99国产精品麻豆| 久久精品99国产精品日本| 捆绑调教美女网站视频一区| 国产经典欧美精品| 91蝌蚪porny九色| 日韩精品一区在线| 国产精品麻豆网站| 免费看日韩精品| 国产成人免费视| 在线视频一区二区免费| 日韩免费看网站| 国产精品乱人伦一区二区| 日韩精品1区2区3区| 国产综合久久久久影院| 粉嫩高潮美女一区二区三区| 色婷婷亚洲精品| 久久日一线二线三线suv| 亚洲一区在线观看免费观看电影高清 | 欧亚洲嫩模精品一区三区| 亚洲欧美综合另类在线卡通| 日本视频一区二区三区| 欧美色综合影院| 夜夜亚洲天天久久| 欧美主播一区二区三区| 国产精品高潮呻吟| 色综合久久六月婷婷中文字幕| 欧美tickling网站挠脚心| 日本不卡在线视频| 欧美中文字幕不卡| 亚洲日本丝袜连裤袜办公室| 国产成人av电影免费在线观看| 欧美一级爆毛片| 久久疯狂做爰流白浆xx| 欧美色成人综合| 午夜精品一区二区三区免费视频| 欧美色综合久久| 日韩电影在线一区| 久久综合五月天婷婷伊人| 日本麻豆一区二区三区视频| 在线观看日韩高清av| 亚洲人成人一区二区在线观看| 黄色成人免费在线| 精品国产乱码久久| 国产一区二区在线观看免费| 国产精品久线在线观看| 在线看不卡av| 亚洲综合成人网| 欧美大片在线观看一区二区| 国产在线观看一区二区| 1000精品久久久久久久久| 欧美日韩国产免费一区二区| 国产一区在线精品| 亚洲欧美韩国综合色| 日韩久久免费av| 一本色道综合亚洲| 麻豆成人久久精品二区三区红 | 久久久精品综合| 91精品国产综合久久精品性色| 狠狠色综合色综合网络| 性做久久久久久久久| 亚洲免费在线电影| 国产精品美女视频| 久久久不卡网国产精品一区| 日本一区二区成人| 国产亚洲欧美一区在线观看| 91精品国产综合久久久蜜臀图片 | 亚洲成人激情社区| 日韩码欧中文字| 精品动漫一区二区三区在线观看| 欧美自拍丝袜亚洲| www.亚洲在线| 99免费精品在线观看| 精品中文av资源站在线观看| 午夜精品爽啪视频| 奇米色777欧美一区二区| 日韩精品一二区| 久久国产精品色| 国产精品一区二区免费不卡| 国产综合一区二区| 丁香六月综合激情| 日本二三区不卡| 7799精品视频| 欧美一级午夜免费电影| 日韩视频123| 国产亚洲欧美一级| 亚洲人成亚洲人成在线观看图片| 国产欧美精品一区二区三区四区| 日韩一区有码在线| 亚洲成人黄色小说| 国产一区二区三区四区五区入口| 久久国产精品区| 国产成人一级电影| 欧美三级乱人伦电影| 日韩视频在线永久播放| 国产精品入口麻豆原神| 一级女性全黄久久生活片免费| 一卡二卡三卡日韩欧美| 黄一区二区三区| 在线免费亚洲电影| 日韩精品最新网址| 玉米视频成人免费看| 国产美女在线精品| 日韩一级片在线观看| 亚洲视频综合在线| 精品一区二区三区视频在线观看| 欧美性大战久久久久久久| 国产日韩v精品一区二区| 美女视频黄频大全不卡视频在线播放| 99re在线视频这里只有精品| 精品国产免费人成电影在线观看四季| 亚洲综合久久久久| 91麻豆精品视频| 国产校园另类小说区| 夜夜精品浪潮av一区二区三区| 国产精品一卡二卡在线观看| 精品国产成人系列| 美女视频网站黄色亚洲| 91国内精品野花午夜精品| 国产日韩亚洲欧美综合| 蜜臀久久99精品久久久画质超高清| 欧美在线视频全部完| 欧美经典一区二区|