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

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

?? mac.c

?? 很多的經(jīng)典的嵌入式例子 自己去看吧
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):

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

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

     // Clear Framedata pointer already used.
     pTxFDptr->Status2 &= (U32)0x0000FFFF; //CMN

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

    MacTxDoneFlagForLoopBackCheck[1] = 1 ;
   }
   
}


// Interrupt Service Routine for MAC0 Rx
void MAC0_Rx_isr(void)
{
 sFrameDescriptor *pRxFDptr ;
 U32 RxStatus, FrameLength ;
 U32 CRxPtr;
 U8 *pFrameData ;
 U32 RdValue;

 RdValue=MISTA_0;
 
 if (RdValue & 0x04)
     gsMacRxStatus[0].RXOV++;
     
 if (RdValue & 0x02)
     gsMacRxStatus[0].CRCE++;     
     
 if (RdValue & 0x400)
     gsMacRxStatus[0].RDU++;           
 
 
//#ifdef RxInt_Msg 
// UART_printf("MAC0_Rx_isr(%x), ",RdValue) ;
//#endif 
 
 if (RdValue & MISTA_RxBErr)
   {
#ifdef RxInt_Msg 
 UART_printf("RxBErr(%x), ",RdValue) ;
#endif 
    FIFOTHD_0|=SWR;
    LanInitialize(0);
    MacRxDoneFlagForLoopBackCheck[0] = 1 ;
    gsMacRxStatus[0].RxBErr++ ;  
   }
 else
   { 
    // Get current frame descriptor
    CRxPtr = CRXDSA_0 ;

    do
    {
     // Get Rx Frame Descriptor
     pRxFDptr = (sFrameDescriptor *)gCRxFDPtr[0];

     if ((pRxFDptr->Status1|RXfOwnership_CPU)==RXfOwnership_CPU) // ownership=CPU
       {
        RxStatus = (pRxFDptr->Status1 >> 16) & 0xffff;
#ifdef RxInt_Msg        
 UART_printf("Rx_Status=%x,",RxStatus) ;
#endif 

#if 1
        pFrameData = (U8 *)pRxFDptr->FrameDataPtr ;
        if (EXTERNAL_LOOPBACK_PORT == 0)
        {
            RxPktSeq = *((volatile U32 *) (pFrameData + 16));
            if (RxPktSeq != RxPktSeqWanted)
            {               
               *((volatile unsigned int *) 0xFFF03210) = 0x43;
               RxPktSeqErr++;
               RxPktSeqWanted = RxPktSeq+1;
            }
            else
               RxPktSeqWanted++;
        }
#endif
        // If Rx frame is good, then process received frame
        if(RxStatus & RXFD_RXGD)
        {
         FrameLength = pRxFDptr->Status1 & 0xffff ;
         pFrameData = (U8 *)pRxFDptr->FrameDataPtr ;
         gsMacRxStatus[0].RXGD++ ;
         gsMacRxStatus[0].RxBytes += FrameLength; //CMN
       
         pRxFDptr->FrameDataPtr = (U32)RxFrameBuffer0;
         RxFrameBuffer0 += (U32)(sizeof(sMACFrame)) ;
         if ( RxFrameBuffer0 >= (U32)RxFBALimitAddr0)
           RxFrameBuffer0 = (U32)RxFBABaseAddr0 ;
         
         // Send to another port
         if (EXTERNAL_LOOPBACK_PORT == 1)
             SendPacket(1,pFrameData,FrameLength);
        }
        else        
         gRxErrPacketCnt[0]++; 

         // Save Error status
         if (RxStatus & RXFD_RP)   gsMacRxStatus[0].RP++ ;
         if (RxStatus & RXFD_ALIE) gsMacRxStatus[0].ALIE++ ;
         if (RxStatus & RXFD_PTLE) gsMacRxStatus[0].PTLE++ ;         
       }
     else
       break;

     // Change ownership to DMA for next use
     pRxFDptr->Status1 |= RXfOwnership_DMA;

     // Get Next Frame Descriptor pointer to process
     gCRxFDPtr[0] = (U32)(pRxFDptr->NextFrameDescriptor) ;
    } while ((CRxPtr = CRXDSA_0) != gCRxFDPtr[0]);
#ifdef RxInt_Msg        
    UART_printf("\n") ;
#endif 

    MacRxDoneFlagForLoopBackCheck[0] = 1 ; // only used for loopback test

    RSDR_0 = 0;
   }  

 MISTA_0=RdValue&0x0000ffff; //CMN
}


// Interrupt Service Routine for MAC1 Rx
void MAC1_Rx_isr(void)
{
 sFrameDescriptor *pRxFDptr ;
 U32 RxStatus, FrameLength ;
 U32 CRxPtr;
 U8 *pFrameData ;
 U32 RdValue;

 RdValue=MISTA_1;

 if (RdValue & 0x04)
     gsMacRxStatus[1].RXOV++;
     
 if (RdValue & 0x02)
     gsMacRxStatus[1].CRCE++;     
     
 if (RdValue & 0x400)
     gsMacRxStatus[1].RDU++;     
     
 
 //MISTA_1=RdValue&0x0000ffff;
 
#ifdef RxInt_Msg 
//if ((RdValue&0x0000ffff)!=0x211)
 UART_printf("MAC1_Rx_isr(%x), ",RdValue) ;
#endif 
 
 if (RdValue & MISTA_RxBErr)
   {
#ifdef RxInt_Msg 
 UART_printf("RxBErr(%x), ",RdValue) ;
#endif 
    FIFOTHD_1|=SWR;
    LanInitialize(1);
    MacRxDoneFlagForLoopBackCheck[1] = 1 ;
    gsMacRxStatus[1].RxBErr++ ; //CMN [2002/11/01]

   }
 else
   { 
    // Get current frame descriptor
    CRxPtr = CRXDSA_1 ;

    do
    {
     // Get Rx Frame Descriptor
     pRxFDptr = (sFrameDescriptor *)gCRxFDPtr[1];

     if ((pRxFDptr->Status1|RXfOwnership_CPU)==RXfOwnership_CPU) // ownership=CPU
       {
        RxStatus = (pRxFDptr->Status1 >> 16) & 0xffff;
#ifdef RxInt_Msg        
 UART_printf("Rx_Status=%x,",RxStatus) ;
#endif 

#if 1
        pFrameData = (U8 *)pRxFDptr->FrameDataPtr ;
        if (EXTERNAL_LOOPBACK_PORT == 1)
        {
            RxPktSeq = *((volatile U32 *) (pFrameData + 16));
            if (RxPktSeq != RxPktSeqWanted)
            {               
               RxPktSeqErr++;
               RxPktSeqWanted = RxPktSeq+1;
            }
            else
               RxPktSeqWanted++;
        }
#endif
        // If Rx frame is good, then process received frame
        if(RxStatus & RXFD_RXGD)
        {
         FrameLength = pRxFDptr->Status1 & 0xffff ;    
         pFrameData = (U8 *)pRxFDptr->FrameDataPtr ;
         gsMacRxStatus[1].RXGD++ ;
         gsMacRxStatus[1].RxBytes += FrameLength; //CMN

         pRxFDptr->FrameDataPtr = (U32)RxFrameBuffer1;
         RxFrameBuffer1 += (U32)(sizeof(sMACFrame)) ;
         if ( RxFrameBuffer1 >= (U32)RxFBALimitAddr1)
           RxFrameBuffer1 = (U32)RxFBABaseAddr1 ;
         
         // Send to another port
         if (EXTERNAL_LOOPBACK_PORT == 0)
         {
             /*
             *(pFrameData+0)=0x03; //marked by CMN
             *(pFrameData+5)=0x66; //marked by CMN
             */
             SendPacket(0,pFrameData,FrameLength);
         }
        }
        else
         // If Rx frame has error, then process error frame
         gRxErrPacketCnt[1]++ ; 

         // Save Error status
         if (RxStatus & RXFD_RP)   gsMacRxStatus[1].RP++ ;
         if (RxStatus & RXFD_ALIE) gsMacRxStatus[1].ALIE++ ;
         if (RxStatus & RXFD_PTLE) gsMacRxStatus[1].PTLE++ ;
        
       }
     else
       break;

     // Change ownership to DMA for next use
     pRxFDptr->Status1 |= RXfOwnership_DMA;

     // Get Next Frame Descriptor pointer to process
     gCRxFDPtr[1] = (U32)(pRxFDptr->NextFrameDescriptor) ;      
     
    } while ((CRxPtr = CRXDSA_1) != gCRxFDPtr[1]);
#ifdef RxInt_Msg        
 UART_printf("\n") ;
#endif 

    MacRxDoneFlagForLoopBackCheck[1] = 1 ; // only used for loopback test

    RSDR_1 = 0;
   }
   
 MISTA_1=RdValue&0x0000ffff; //CMN
}


// Send ethernet frame function
int SendPacket(int num, U8 *Data,int Size)
{
 sFrameDescriptor *psTxFD;
 int              FrameLength ;
 U32              *pTXFDStatus1;

 if (num==0)
   {      
    // Get Tx frame descriptor & data pointer
    psTxFD = (sFrameDescriptor *)gWTxFDPtr[0] ;

    pTXFDStatus1 = (U32 *)&psTxFD->Status1;
    FrameLength = Size ;

    // Check DMA ownership
    if ( (*pTXFDStatus1 & TXfOwnership_DMA) ) return 0 ;

    //CMN
    if (psTxFD->Status2 & 0xFFFF0000)  
    {
        CheckTxFDStatus(0, psTxFD);   //The descriptor hasn't been processed yet.
        DoChk++;
    }
    
    psTxFD->FrameDataPtr = (U32)Data;

#if 1
    if (EXTERNAL_LOOPBACK_PORT == 0)
        *((volatile U32 *) (Data + 16)) = PktSeq++;
#endif

    // Set TX Frame flag & Length Field
    psTxFD->Status1 |= (PaddingMode | CRCMode | MACTxIntEn);
    psTxFD->Status2 = (U32)(FrameLength & 0xffff);

    // Cheange ownership to DMA
    psTxFD->Status1 |= TXfOwnership_DMA;

    // Enable MAC Tx control register
    MacTxGo(0);
    
    // Change the Tx frame descriptor for next use
    gWTxFDPtr[0] = (U32)(psTxFD->NextFrameDescriptor);
   }
 else if (num==1)
   {
    // Get Tx frame descriptor & data pointer
    psTxFD = (sFrameDescriptor *)gWTxFDPtr[1] ;

    pTXFDStatus1 = (U32 *)&psTxFD->Status1;
    FrameLength = Size ;

    // Check DMA ownership
    if ( (*pTXFDStatus1 & TXfOwnership_DMA) ) return 0 ;

    //CMN
    if (psTxFD->Status2 & 0xFFFF0000)  
    {
        CheckTxFDStatus(1, psTxFD);   //The descriptor hasn't been processed yet.
        DoChk++;
    }


    psTxFD->FrameDataPtr = (U32)Data;

#if 1
    if (EXTERNAL_LOOPBACK_PORT == 1)
        *((volatile U32 *) (Data + 16)) = PktSeq++;
#endif
    // Set TX Frame flag & Length Field
    psTxFD->Status1 |= (PaddingMode | CRCMode | MACTxIntEn);  
    psTxFD->Status2 = (U32)(FrameLength & 0xffff);

    // Cheange ownership to DMA
    psTxFD->Status1 |= TXfOwnership_DMA;

    // Enable MAC Tx control register
    MacTxGo(1);

    // Change the Tx frame descriptor for next use
    gWTxFDPtr[1] = (U32)(psTxFD->NextFrameDescriptor);
   }
 return 1 ;
}


// Main function for MAC Block test
int MacTest(void)
{	
 volatile unsigned int loop=0;  
 volatile U32 btime, total_time;
 
 TimerInitialize(TIMER_CHANNEL);

 LanInitialize(0);
 LanInitialize(1);
 
 btime = cur_ticks;
 
 while(1) 
 {
   if ((cur_ticks - btime) >= 100)
   {
       total_time = cur_ticks - btime;
       btime = cur_ticks;
       ShowTxRxStatusWithTime();       
   }
 }

 return 1;
}


int main()
{
  unsigned int oldvect, temp;
  
  UART_Initialize(115200);
  UART_printf("\n\nW90N740 DIAG Program 1.0 - MAC\n\n");

  /* clear CPSR I bit */
  __asm
  {
      MRS    temp, CPSR
      AND    temp, temp, 0x7F
      MSR    CPSR_c, temp
  }

  /* replace IRQ exception entry */
  oldvect = *(volatile unsigned int *)0x38;
  *(volatile unsigned int *)0x38 = (unsigned int) IRQ_IntHandler;
 
  /*
  AIC_SCR_EMCTX0 = 0x41;
  AIC_SCR_EMCRX0 = 0x41;
  AIC_SCR_EMCTX1 = 0x41;
  AIC_SCR_EMCRX1 = 0x41;
  */
    
  memset((U8 *)0x80400000,0,1024*1024) ; // clear buffer
  MacTest();
  return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费视频| 国产精品一区二区免费不卡 | 91网站视频在线观看| 国模一区二区三区白浆| 蜜桃精品视频在线观看| 青青草97国产精品免费观看无弹窗版| 亚洲一区二区三区四区五区中文 | 婷婷成人激情在线网| 亚洲丰满少妇videoshd| 亚洲精品成a人| 亚洲国产日韩a在线播放| 亚洲国产视频a| 日韩电影网1区2区| 乱中年女人伦av一区二区| 极品少妇xxxx精品少妇| 国产精品影视在线观看| aa级大片欧美| 在线观看国产91| 欧美日韩大陆在线| 91精品国产aⅴ一区二区| 日韩一区二区三区免费观看| 精品剧情v国产在线观看在线| 亚洲精品在线观看网站| 国产精品毛片a∨一区二区三区 | 国产乱国产乱300精品| 成人午夜激情在线| 色哦色哦哦色天天综合| 欧美日韩精品三区| www亚洲一区| 中文字幕不卡的av| 亚洲影院久久精品| 免费高清在线一区| 国产成人精品网址| 在线观看91精品国产入口| 欧美一区二区在线看| 久久亚洲一区二区三区明星换脸 | 国产真实乱子伦精品视频| 国产成人av影院| 欧美性猛片xxxx免费看久爱| 91精品国产免费久久综合| 亚洲国产精品成人久久综合一区| 国产精品超碰97尤物18| 午夜视频在线观看一区二区| 国产在线精品视频| 色婷婷亚洲一区二区三区| 在线播放视频一区| 国产精品久久免费看| 亚洲成人一区二区| 国产99久久久国产精品潘金网站| 欧美在线看片a免费观看| 精品久久一区二区三区| 亚洲激情五月婷婷| 国产九色sp调教91| 欧美三级日本三级少妇99| 精品国产电影一区二区| 亚洲欧美欧美一区二区三区| 麻豆国产91在线播放| 99久久99久久综合| 日韩女优电影在线观看| 亚洲欧美激情插| 九九视频精品免费| 91成人免费在线| 久久久一区二区三区捆绑**| 亚洲高清视频的网址| 国产成人精品免费看| 欧美一区二区三区成人| 亚洲免费视频成人| 高清国产一区二区三区| 日韩免费视频线观看| 亚洲一区二区三区四区在线观看| 国产成人精品免费一区二区| 日韩小视频在线观看专区| 综合av第一页| 国产成人在线视频网站| 日韩情涩欧美日韩视频| 亚洲成人动漫一区| 91丨porny丨在线| 中文字幕不卡的av| 国产一区二区在线观看免费| 欧美猛男男办公室激情| 亚洲男人天堂av| 成人avav影音| 国产欧美视频一区二区三区| 看电视剧不卡顿的网站| 欧美探花视频资源| 亚洲精品伦理在线| av亚洲精华国产精华| 久久青草国产手机看片福利盒子| 青青草一区二区三区| 欧美日韩精品一区二区三区四区 | 亚洲女人的天堂| jvid福利写真一区二区三区| 精品成人佐山爱一区二区| 欧美a一区二区| 欧美欧美欧美欧美| 日韩精品一二三四| 欧美精品在线视频| 天天免费综合色| 3atv一区二区三区| 午夜精品在线视频一区| 欧美另类变人与禽xxxxx| 亚洲第一福利视频在线| 欧美日韩成人一区二区| 亚洲国产成人av| 欧美日韩免费在线视频| 亚洲成人av在线电影| 欧美日本在线观看| 日韩av一区二| 精品黑人一区二区三区久久| 精品一区二区三区影院在线午夜| 精品国产精品一区二区夜夜嗨 | 欧美变态凌虐bdsm| 久久成人久久鬼色| 国产日韩亚洲欧美综合| 成人精品国产福利| 亚洲视频你懂的| 欧美三级日韩在线| 奇米一区二区三区av| 精品女同一区二区| 国产成人午夜高潮毛片| 亚洲欧洲av在线| 欧美三级韩国三级日本三斤| 日韩高清不卡在线| 欧美成人a视频| 成人自拍视频在线观看| 一区二区三区在线视频免费 | 亚洲品质自拍视频网站| 欧美怡红院视频| 视频一区在线播放| 久久综合狠狠综合久久综合88| 国产福利一区二区| 亚洲乱码国产乱码精品精的特点 | 欧美日韩国产综合一区二区| 视频一区国产视频| 欧美精品一区二区高清在线观看| 国产成人在线色| 亚洲综合丁香婷婷六月香| 91精品国产综合久久久久| 国产一区二区h| 亚洲精品日韩一| 日韩欧美中文一区| 99re热这里只有精品视频| 三级成人在线视频| 国产欧美一区二区在线观看| 91久久精品一区二区三区| 日本欧美一区二区| 国产精品国产a级| 7777精品伊人久久久大香线蕉最新版| 国产一区二区中文字幕| 亚洲精选在线视频| 精品国产一区二区三区久久影院 | 日韩欧美一区电影| 99久精品国产| 美女免费视频一区| 亚洲男人的天堂一区二区| 欧美一二三区在线观看| 99麻豆久久久国产精品免费优播| 午夜欧美在线一二页| 国产精品人妖ts系列视频| 91麻豆精品久久久久蜜臀| 成人丝袜高跟foot| 毛片av一区二区三区| 亚洲人快播电影网| 久久中文娱乐网| 欧美日韩在线不卡| 91尤物视频在线观看| 久久草av在线| 三级在线观看一区二区| 中文字幕一区二区三区在线不卡 | 欧美精品一区视频| 欧美日韩在线播放| 91蜜桃婷婷狠狠久久综合9色| 麻豆视频观看网址久久| 一区二区国产视频| 自拍偷拍国产精品| 欧美v日韩v国产v| 欧美日韩一区二区三区在线| 成人av电影观看| 国产精品一区二区无线| 免费成人在线影院| 亚洲国产成人高清精品| 国产精品欧美经典| 久久久久亚洲蜜桃| 欧美成人乱码一区二区三区| 欧美欧美欧美欧美| 欧美日韩在线观看一区二区 | 国产**成人网毛片九色| 久久er精品视频| 日本欧美一区二区在线观看| 亚洲韩国一区二区三区| 亚洲视频网在线直播| 国产精品第五页| 久久久777精品电影网影网| 日韩欧美电影在线| 日韩欧美成人激情| 欧美一级久久久久久久大片| 91麻豆精品国产91久久久资源速度| 色婷婷综合激情| 91福利在线免费观看| 色婷婷综合中文久久一本|