⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maclib.c

📁 这是三星评估板ws310(CPU为S3c4510B)用的Bootloader.开发环境是SDT。
💻 C
📖 第 1 页 / 共 2 页
字号:
void ReadErrReport(void) 
{
	Print("\n >>>>> Error Report <<<<< ") ;
	Print("\n +- MAC Tx Err Count (Good:%d) -+ ",gsMacTxStatus.MacTxGood) ;
	Print("\r    ExColl: %d, Defered: %d, Paused: %d, Under : %d ", \
 		gsMacTxStatus.ExCollErr, gsMacTxStatus.TxDefferedErr, \
 		gsMacTxStatus.sPaused, gsMacTxStatus.UnderErr) ;
	Print("\r    Defer : %d, NoCarri: %d, SQE   : %d, LatCol: %d ", \
 		gsMacTxStatus.DeferErr, gsMacTxStatus.NCarrErr, \
 		gsMacTxStatus.sSQE, gsMacTxStatus.LateCollErr) ;
	Print("\r    TxPar : %d, TxHalt : %d ", \
 		gsMacTxStatus.TxParErr, gsMacTxStatus.sTxHalted) ;


	Print("\r +- MAC Rx Err Count -+ ") ;
	Print("\r    CtlRcd: %d, 10Stat : %d, Allign: %d, CRCErr: %d ", \
 		gsMacRxStatus.sCtlRecd, gsMacRxStatus.sRx10Stat, \
 		gsMacRxStatus.AllgnErr, gsMacRxStatus.sCRCErr ) ;
	Print("\r    OverFl: %d, LongErr: %d, RxPar : %d, RxHalt: %d ", \
 		gsMacRxStatus.OverflowErr, gsMacRxStatus.sLongErr, \
 		gsMacRxStatus.RxParErr, gsMacRxStatus.sRxHalted) ;

	Print("\r +- BDMA Tx Err Count -+ ") ;
	Print("\r    BTxNull: %d, BTxNOwn: %d, BTxEmpty: %d ", \
 		gsBdmaTxStatus.BTxNLErr, gsBdmaTxStatus.BTxNOErr, \
 		gsBdmaTxStatus.BTxEmptyErr ) ;

	Print("\r +- BDMA Rx Err Count (RxCnt:%d) -+ ",gsBdmaRxStatus.BdmaRxGood) ;
	Print("\r    BRxNull: %d, BRxNOwn: %d, BRxOvr: %d ", \
 		gsBdmaRxStatus.BRxNLErr, gsBdmaRxStatus.BRxNOErr, \
 		gsBdmaRxStatus.BRxMSOErr) ;

	Print("\r +- Missed Error Count : %d",EMISSCNT) ;

	Print("\n >>>>> Error Occured Time <<<<< ") ;
}

/*
 * Function : ClearErrReport
 * Description : Clear Error Report Area
 */
void ClearErrReport(void) 
{
	// Clear Error Report Variable 
	gsMacTxStatus.MacTxGood = 0 ;
 	gsMacTxStatus.ExCollErr = gsMacTxStatus.TxDefferedErr = 0 ;
 	gsMacTxStatus.sPaused = gsMacTxStatus.UnderErr = 0 ; 
 	gsMacTxStatus.DeferErr = gsMacTxStatus.NCarrErr = 0 ;
 	gsMacTxStatus.sSQE = gsMacTxStatus.LateCollErr = 0 ;
 	gsMacTxStatus.TxParErr = gsMacTxStatus.sTxHalted = 0 ;

 	gsMacRxStatus.sCtlRecd = gsMacRxStatus.sRx10Stat = 0 ;
 	gsMacRxStatus.AllgnErr = gsMacRxStatus.sCRCErr = 0 ;
 	gsMacRxStatus.OverflowErr = gsMacRxStatus.sLongErr = 0 ;
 	gsMacRxStatus.RxParErr = gsMacRxStatus.sRxHalted = 0 ;
 	gsBdmaTxStatus.BTxNLErr =  gsBdmaTxStatus.BTxNOErr = 0 ;
 	gsBdmaTxStatus.BTxEmptyErr = 0 ;

	gsBdmaRxStatus.BdmaRxGood = 0 ;
	gsBdmaRxStatus.BRxNLErr = gsBdmaRxStatus.BRxNOErr = 0 ;
 	gsBdmaRxStatus.BRxMSOErr = 0 ;
}


/*
 * Function : PrintRxFrame
 * Description : Print MAC Received Data
 */
void PrintRxFrame(U8 *pFramePtr, U32 FrameLength)
{
	U8 *pFrameData;
	U32 i,ColumnSize ;

  	pFrameData = (U8 *)pFramePtr ; 

	Print("\r -- Destin Address : ") ;
	for(i=0; i < 6; i++) Print("%02x ", *pFrameData++);
	Print("\r -- Source Address : ") ;
	for(i=0; i < 6; i++) Print("%02x ", *pFrameData++);
	Print("\r -- LLC Frame Length(Data+Length:%d) : ",FrameLength) ;
	for(i=0; i < 2; i++) Print("%02x ", *pFrameData++);
	Print("\r -- LLC Frame Data : ") ;
	ColumnSize  = FrameLength - 14 ;

	do {
	for(i=0; i < 16 ; i++) 
		{
		Print("%02x ", *pFrameData++);
		if (--ColumnSize == 0) break ;
		}
		Print("\r%19c",' ') ; 
	} while(ColumnSize) ; 

	Print("\r -- CRC Value      : ") ;
	for(i=0; i < 4 ; i++) Print("  ", *pFrameData++);
}

/*
 * Function : MacAddrWrite
 * Description : MAC Address Write to IIC EEPROM
 */
void MacAddrWrite(void)
{
	U8 MacAddr[6], RcvData[12] ;
	int i = 0 , j = 0 ;

	Print("\r >>> Input MAC Address (00 00 F0 11 00 00) : ") ;
	while ( (RcvData[i] = get_byte() ) != CR ) 
	{
		if ( (RcvData[i] >= '0') && (RcvData[i] <= '9') )
			RcvData[i] -= '0' ;
		else if ( (RcvData[i] >= 'A') && (RcvData[i] <= 'F') )
			RcvData[i] = RcvData[i] - 'A' + 10 ;
		else if ( (RcvData[i] >= 'a') && (RcvData[i] <= 'f') )
			RcvData[i] = RcvData[i] - 'a' + 10 ;
		i++ ;
	}

	// Make Received Character to MAC Address Format
	i = 0 ;
	MacAddr[j] = RcvData[i++] << 4 ; MacAddr[j++] += RcvData[i++] ;
	MacAddr[j] = RcvData[i++] << 4 ; MacAddr[j++] += RcvData[i++] ;
	MacAddr[j] = RcvData[i++] << 4 ; MacAddr[j++] += RcvData[i++] ;
	MacAddr[j] = RcvData[i++] << 4 ; MacAddr[j++] += RcvData[i++] ;
	MacAddr[j] = RcvData[i++] << 4 ; MacAddr[j++] += RcvData[i++] ;
	MacAddr[j] = RcvData[i++] << 4 ; MacAddr[j++] += RcvData[i++] ;

	Print("\r     Write MAC Address : ") ;
	for (i=0;i<6;i++) Print("%02x ",MacAddr[i]) ;

	IICWriteInt((U8)IIC_DEV_0,(U32)iMacAddrPtr,MacAddr, MAC_ADDR_SIZE) ;
}

/*
 * Function : MacAddrRead
 * Description : MAC Address Read from IIC EEPROM
 */
void MacAddrRead(void)
{
	U8 *MacAddr;
	int i, MacAddrSize ;
	
	MacAddrSize = MAC_ADDR_SIZE ;

	Print("\n >>> Read MAC Address : ") ;
	MacAddr=(U8 *)IICReadInt((U8)IIC_DEV_0,(U32)iMacAddrPtr,MacAddrSize) ;
	for (i=0;i<MacAddrSize;i++) Print(" %02x", MacAddr[i]) ;
}


/*
 * Function : CaptureRxFrame
 * Description : Capture Rx Frame Data
 */
void CaptureRxFrame(void)
{
	// Setup BDMA Rx Interrupt for Capturing
	// Disable  MAC Tx/Rx Interrupt and BDMA Tx Interrupt

	// Initialize User Rx Frame Buffer Area
	userframebuffer = (U32 *)userframebasept ;
	gsBdmaRxStatus.BdmaRxGood = 0 ;

	// clear user frame buffer
	memset((U8 *)userframebuffer,0, (userframelimitpt - userframebasept) ) ;

	// Reinitialize MAC/BDMA Controller
 	MacInitialize() ; 

        CAM_Reg(0) =  gCapture_Addr0 ;
        CAM_Reg(1) =  gCapture_Addr1 ;

	while(get_byte() != 'q') ;

	Print("\n\n >>> Received Frame Count is %d <<<", gsBdmaRxStatus.BdmaRxGood) ;

	// Disable MAC RX
	// Disable global interrupt mask
	MACRXCON &= ~RxEn ;
	Disable_Int(nGLOBAL_INT); 
}

/*
 * Function : ShowRecevedFrameData
 * Description : Show MAC Received Data
 */
void ShowRecevedFrameData(void)
{
	U32 *ViewAreaBase, *CurrentArea ;
	U32 FrameLength, RxStatus ;
	U32 RxSequence, RxTime , RxMin, RxSec ;
	U8 SrcAddr[6], DstAddr[6], LengthOrControlField[2] ;
	U8 *RxFrameData;
	U8 RcvData[12] ;
	U8 NextCheck ;
	char CheckViewFunction ;
 	int CheckSequence , CheckFrameLength ;
	int i,j, AddrMached=0, CheckPreamble=0 ;

	ViewAreaBase = (U32 *)userframebasept ;

   do {
	Print("\n >>> Show Received Frame Data(%d Frame) <<<",\
					gsBdmaRxStatus.BdmaRxGood) ;
	Print("\n +--------------------------------------+") ;
	Print("\r | 1. Show All Received Frame  ---- [A] |") ;
	Print("\r | 2. Show by Rx Sequence  -------- [N] |") ;
	Print("\r | 3. Show by Rx Frame Length ----- [L] |") ;
	Print("\r | 4. Show by Source Address  ----- [S] |") ;
	Print("\r | 5. Show by Destination Address - [D] |") ;
	Print("\r | 6. Show Control Frame   -------- [C] |") ;
	Print("\r | 7. Quit       ------------------ [Q] |") ;
	Print("\r +--------------------------------------+") ;
	Print("\n >> Enter View Function ?") ;
	CheckViewFunction = get_byte() ;

	if ( (CheckViewFunction == 'N') || (CheckViewFunction == 'n') )
		{
		Print("\r $$ Enter Sequence Number (Digit) : ") ;
		CheckSequence = get_number() ;
		}
	if ( (CheckViewFunction == 'L') || (CheckViewFunction == 'l') )
		{
		Print("\r $$ Enter Rx Frame Length (Digit) : ") ;
		CheckFrameLength = get_number() ;
		}
	if ( (CheckViewFunction == 'S') || (CheckViewFunction == 's') )
		{
		Print("\r $$ Enter Source Address : ") ;
		i = 0 ;
		while ( (RcvData[i] = get_byte() ) != CR ) 
			{
			if ( (RcvData[i] >= '0') && (RcvData[i] <= '9') )
				RcvData[i] -= '0' ;
			else if ( (RcvData[i] >= 'A') && (RcvData[i] <= 'F') )
				RcvData[i] = RcvData[i] - 'A' + 10 ;
			else if ( (RcvData[i] >= 'a') && (RcvData[i] <= 'f') )
				RcvData[i] = RcvData[i] - 'a' + 10 ;
			i++ ;
			}
		}
	if ( (CheckViewFunction == 'D') || (CheckViewFunction == 'd') )
		{
		Print("\r $$ Enter Destination Address : ") ;
		i = 0 ;
		while ( (RcvData[i] = get_byte() ) != CR ) 
			{
			if ( (RcvData[i] >= '0') && (RcvData[i] <= '9') )
				RcvData[i] -= '0' ;
			else if ( (RcvData[i] >= 'A') && (RcvData[i] <= 'F') )
				RcvData[i] = RcvData[i] - 'A' + 10 ;
			else if ( (RcvData[i] >= 'a') && (RcvData[i] <= 'f') )
				RcvData[i] = RcvData[i] - 'a' + 10 ;
			i++ ;
			}
		}

   CurrentArea = ViewAreaBase  ;

   while (1) {
	CheckPreamble = 0 ;
	while (1) {
		if (*CurrentArea++ == RxFrameDataPreamble) break ;
		else if (CheckPreamble++ > 8) break ;
	}

	if (CheckPreamble > 8) { CheckPreamble = 0 ; break ; } 

	// Received Frame Data Store Format
	// +------------------+
	// | Preamble         |
	// | Sequence| Time   |
	// | Status  | Length |
	// | Rx Data          |
	// +------------------+
	RxSequence = (*CurrentArea >> 16) & 0xFFFF ;
	RxTime = *CurrentArea & 0xFFFF ; CurrentArea++ ;
	RxStatus = (*CurrentArea >> 16) & 0xFFFF ;
	FrameLength = *CurrentArea & 0xFFFF ; CurrentArea++ ;

	RxMin = (RxTime >> 8) & 0xFF ;
	RxSec = RxTime & 0xFF ;

  	RxFrameData = (U8 *)CurrentArea ; 
	for(i=0; i < 6; i++) DstAddr[i] = *RxFrameData++ ;
	for(i=0; i < 6; i++) SrcAddr[i] = *RxFrameData++ ;
	for(i=0; i < 2; i++) LengthOrControlField[i] = *RxFrameData++ ;

	if ( (CheckViewFunction == 'A') || (CheckViewFunction == 'a') ) {
	   Print("\n+++ %d'th Received Frame Data(%x)",RxSequence,RxStatus);
	   Print("\r -> Received Time  : %d min %d sec ",RxMin,RxSec ) ;
	   PrintRxFrame((U8 *)CurrentArea, FrameLength) ;
	}

	else if ( (CheckViewFunction == 'N') || (CheckViewFunction == 'n') ) {
	   if (RxSequence == CheckSequence)
	   {
	   Print("\n+++ %d'th Received Frame Data(%x)",RxSequence,RxStatus) ;
	   Print("\r -> Received Time  : %d min %d sec ",RxMin,RxSec ) ;
	   PrintRxFrame((U8 *)CurrentArea, FrameLength) ;
	   break ;
	   }
	}

	else if ( (CheckViewFunction == 'L') || (CheckViewFunction == 'l') ) {
	   if (FrameLength <= CheckFrameLength)
	   {
	   Print("\n+++ %d'th Frame is Less than %d Byte(%x)",
			RxSequence,CheckFrameLength,RxStatus) ;
	   Print("\r -> Received Time  : %d min %d sec ",RxMin,RxSec ) ;
	   PrintRxFrame((U8 *)CurrentArea, FrameLength) ;
	   }
	}

	else if ( (CheckViewFunction == 'S') || (CheckViewFunction == 's') ) {
	   i = 0 ; j = 0 ;
	   while(1)
	   {
	   	if (((SrcAddr[j]>>4) & 0xF) == RcvData[i++]) AddrMached = 1 ;
	   	else { AddrMached =0 ; break ; }
	   	if ((SrcAddr[j] & 0xF) == RcvData[i++]) AddrMached = 1 ;
	   	else { AddrMached =0 ; break ; }

	   	if (j==5) break ; else j++ ;
	   }

	   if ( AddrMached )
	   {
	   Print("\n+++ %d'th Frame is Source Address Mached(%x)",\
					RxSequence,RxStatus) ;
	   Print("\r -> Received Time  : %d min %d sec ",RxMin,RxSec ) ;
	   PrintRxFrame((U8 *)CurrentArea, FrameLength) ;
	   }	
	}

	else if ( (CheckViewFunction == 'D') || (CheckViewFunction == 'd') ) {
	   i = 0 ; j = 0 ;
	   while(1)
	   {
	   	if (((DstAddr[j]>>4) & 0xF) == RcvData[i++]) AddrMached = 1 ;
	   	else { AddrMached =0 ; break ; }
	   	if ((DstAddr[j] & 0xF) == RcvData[i++]) AddrMached = 1 ;
	   	else { AddrMached =0 ; break ; }

	   	if (j==5) break ; else j++ ;
	   }

	   if ( AddrMached )
	   {
	   Print("\n+++ %d'th Frame is Destination Address Mached(%x)",\
					RxSequence,RxStatus) ;
	   Print("\r -> Received Time  : %d min %d sec ",RxMin,RxSec ) ;
	   PrintRxFrame((U8 *)CurrentArea, FrameLength) ;
	   }	
	}

	else if ( (CheckViewFunction == 'C') || (CheckViewFunction == 'c') ) {
		if ( ( LengthOrControlField[0] == 0x88 ) && \
			( LengthOrControlField[1] == 0x08 ) )
		{
	   	Print("\n+++ %d'th Frame is Control Frame(%x)", \
				RxSequence, RxStatus) ;
	   	Print("\r -> Received Time  : %d min %d sec ",RxMin,RxSec ) ;
	   	PrintRxFrame((U8 *)CurrentArea, FrameLength) ;
		}
	}

	// For Next Frame
	CurrentArea += FrameLength/4 ; 
   }
	
   Print("\n Press Any Key to Continue") ;
   NextCheck = get_byte() ;
   if ((CheckViewFunction=='Q')||(CheckViewFunction == 'q')) 
	{
	// Clear user frame area
	memset((U8 *)userframebuffer,0, (userframelimitpt - userframebasept) ) ;
	MACRXCON &= ~RxEn ;
	Disable_Int(nGLOBAL_INT); 
	break ;
	}
	
   } while  ( (NextCheck != 'Q') && (NextCheck != 'q') ) ;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -