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

📄 mac.c

📁 S3C4510B的例程
💻 C
📖 第 1 页 / 共 3 页
字号:
		else gMacCon = 0  ;

		Print("\r$$ Use 10Mbps 7-Wire Interface(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacCon |= ConnM01  ;
		else gMacCon |= ConnM10  ;

		Print("\r$$$ Missed Error Count Over Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacCon |= EnMissRoll ;

		// MAC Tx Control Register Config
		Print("\n((( MAC Tx Control Register Setup )))") ;
		gMacTxCon = EnComp ;
		Print("\r$$ MAC Tx No Padding(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= NoPad ;

		Print("\r$$ MAC Tx No CRC(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= NoCRC ;

		Print("\r$$ MAC Tx Use Fast Back-off timers(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= FBack ;

		Print("\r$$ MAC Tx Disable the Defer Counter(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= NoDef ;

		Print("\r$$$ MAC Tx Interrupt Setting $$$") ;
		Print("\r$$ Underrun Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= EnUnder ; 
		Print("\r$$ Deferral Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= EnDefer ; 
		Print("\r$$ No Carrier Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= EnNCarr ; 
		Print("\r$$ Late Collision Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= EnLateColl ; 
		Print("\r$$ Parity Error Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= EnTxPar ;
		Print("\r$$ Excessive Collision Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacTxCon |= EnExColl ; 

		// MAC Rx Control Register Config
		Print("\n((( MAC Rx Control Register Setup )))") ;
		gMacRxCon = RxEn | EnGood ;
		Print("\r$$ MAC Rx Long Frame Enable(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= LongEn ;
		Print("\r$$ MAC Rx Short Frame Enable(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= ShortEn ;
		Print("\r$$ MAC Rx Strip CRC(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= StripCRC ;
		Print("\r$$ MAC Rx Pass Control Packet(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= PassCtl ;
		Print("\r$$ MAC Rx Ignore CRC Check(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= IgnoreCRC ;

		Print("\r$$$ MAC Rx Interrupt Setting $$$") ;
		Print("\r$$ Mis-Allign Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= EnAlign ;
		Print("\r$$ CRC Error Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= EnCRCErr ;
		Print("\r$$ FIFO Overflow Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= EnOver ;
		Print("\r$$ Long Frame Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= EnLongErr ;
		Print("\r$$ Parity Error Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gMacRxCon |= EnRxPar ;
	}

	// Configure BDMA Tx/Rx Control Register
	Print("\n\n >> Configure BDMA Tx/Rx (Y/N) ? ") ;
	ChangeConfYesOrNo = get_byte() ;
	if ( ( ChangeConfYesOrNo == 'Y' ) || ( ChangeConfYesOrNo == 'y' ) )
	{
		// BDMA Tx Control Register Config
		Print("\n((( BDMA Tx Control Register Setup )))") ;
		gBdmaTxCon = BTxEn ;
		Print("\r$$ Input BDMA Tx Burst Size(16) : ") ;
		SettingValue = get_digit() ;
		if ( SettingValue != 0 )
			{
			SettingValue = SettingValue - 1 ;
			gBdmaTxCon |= SettingValue  ;
			}
		else gBdmaTxCon |= BTxBRST ;

		Print("\r$$ BDMA Tx STOP when Descriptor Not Owner(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaTxCon |= BTxSTSKO ;

		Print("\r$$ Input BDMA Tx to MAC Tx Start Level(0) : ") ;
		SettingValue = get_digit() ;
		SettingValue = SettingValue << 11 ;
		gBdmaTxCon |= SettingValue  ;

		Print("\r$$$ BDMA Tx Interrupt Setting $$$") ;
		Print("\r$$ Control Packet Tx Complete  Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaTxCon |= BTxCPIE ;
		Print("\r$$ BDMA Tx Sescriptor Not Owner Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaTxCon |= BTxNOIE ;
		Print("\r$$ BDMA Tx Buffer Empty Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaTxCon |= BTxEmpty ;


		// BDMA Rx Control Register Config
		Print("\n((( BDMA Rx Control Register Setup )))") ;
		gBdmaRxCon = BRxEn ;
		Print("\r $$ Input BDMA Rx Burst Size(16) : ") ;
		SettingValue = get_digit() ;
		if ( SettingValue != 0 )
			{
			SettingValue = SettingValue - 1 ;
			gBdmaRxCon |= SettingValue  ;
			}
		else gBdmaRxCon |= BTxBRST ;

		Print("\r$$ BDMA Rx STOP when Descriptor Not Owner(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= BRxSTSKO ;

		Print("\r$$ BDMA Rx Memory Increment(Y) or Decrement(N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= BRxMAINC ;

		Print("\r$$ BDMA Rx Memory Little-Endian(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= BRxLittle ;

		Print("\r$$$ BDMA Tx Interrupt Setting $$$") ;
		Print("\r$$ Every Received Frame Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= BRxDIE ;
		Print("\r$$ Null List Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= BRxNLIE ;
		Print("\r$$ Descriptor Not Owner Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= BRxNOIE ;
		Print("\r$$ Maximum Size Over Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= BRxMSOIE ;
		Print("\r$$ BDMA Rx Buffer Empty Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= RxEmpty ;
		Print("\r$$ Early Notify Interrupt(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gBdmaRxCon |= BRxEarly ;
	}

	// Configure CAM Tx/Rx Control Register
	Print("\n\n >> Configure CAM (Y/N) ? ") ;
	ChangeConfYesOrNo = get_byte() ;
	if ( ( ChangeConfYesOrNo == 'Y' ) || ( ChangeConfYesOrNo == 'y' ) )
	{

		gCamCon = CompEn ;
		Print("\r$$ Accept Unicast Station Address(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gCamCon |= StationAcc ;

		Print("\r$$ Accept Multicast-Group Station Address(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gCamCon |= GroupAcc ;

		Print("\r$$ Accept Broadcast Station Address(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gCamCon |= BroadAcc ;

		Print("\r$$ Accept Negative CAM Reconization(Y/N) ? ") ;
		ChangeValue = get_byte() ;
		if ( (ChangeValue == 'Y') || (ChangeValue == 'y') )
			gCamCon |= NegCAM ;
	}


	// Change Control Register
	ReadyMacRx();
	ReadyMacTx();
	CAMCON = gCamCon ;

	Print("\n >> Cache Configuration (Y/N) ? ") ;
	ChangeConfYesOrNo = get_byte() ;
	if ( ( ChangeConfYesOrNo == 'Y' ) || ( ChangeConfYesOrNo == 'y' ) )
	{
		//CacheStartUpDialog() ;	
	}

}

/*
 * Function : void CaptureAndShowFrame(void)
 * Description : Capture Selected Framre and Show Ethernet Frame 
 */
void CaptureAndShowFrame(void)
{
	char TestItemSel ;
	do {
	Print("\n+---------------------------------------------------+\r") ;
	Print("|    ***** Capture & ShowFrame MAC Frame *****      |\r") ;
        Print("|          Rev 1.0 (by hbahn, 1998.04.17)           |\r") ;
	Print("+---------------------------------------------------+\r") ;
	Print("| Capture All MAC Frame to Buffer Full        - [A] |\r") ;
	Print("| Capture My MAC Address Frame                - [M] |\r") ;
	Print("| Capture Broadcast Frame                     - [B] |\r") ;
	Print("| Capture Control Frame                       - [C] |\r") ;
	Print("| Capture Matched Destination Address         - [D] |\r") ;
	Print("| Show Captured MAC Frame                     - [S] |\r") ;
	Print("| Quit Show & Capture                         - [Q] |\r") ;
	Print("+---------------------------------------------------+\r") ;
	Print("\rSelect Test Item : ") ; TestItemSel = get_byte() ;
	
	switch(TestItemSel)
	{
		case 'A' : case 'a' : CaptureAllRxFrame() ; break ;
		case 'M' : case 'm' : CaptureMyRxFrame() ; break ;
		case 'B' : case 'b' : CaptureBroadFrame() ; break ;
		case 'C' : case 'c' : CaptureCntlFrame() ; break ;
		case 'D' : case 'd' : CaptureMatchedDest() ; break ;
		case 'S' : case 's' : ShowRecevedFrameData() ; break ;
		case 'Q' : case 'q' : break ;
		default : Print("\nInvalid Test Item Selected") ; 
				break ;
	}

	if ( (TestItemSel != 'Q') && (TestItemSel != 'q') )
		{
		Print("\nPress any key to Continue") ; 
		get_byte() ;
		}
	} while  ( (TestItemSel != 'Q') && (TestItemSel != 'q') ) ;
}

/*
 * Function : void CaptureAllRxFrame(void)
 * Description : Capture All Rx Frame
 */
void CaptureAllRxFrame(void)
{
	Print("\n >>>>> Capture All Rx Frame Data <<<<< ") ;
	gCapture_Addr0 = 0x0 ; gCapture_Addr1 = 0x0 ;
	gCamCon = CompEn | StationAcc | GroupAcc | BroadAcc | NegCAM ;
	CaptureRxFrame() ;
	gCamCon = CompEn | BroadAcc ;
}

/*
 * Function : void CaptureMyRxFrame(void)
 * Description : Capture My Rx Frame
 */
void CaptureMyRxFrame(void)
{
	Print("\n >>>>> Capture My Rx Frame Data <<<<< ") ;
	gCapture_Addr0 = gCam0_Addr0 ; 
	gCapture_Addr1 = gCam0_Addr1 ;
	gCamCon = CompEn ;
	CaptureRxFrame() ;
	gCamCon = CompEn | BroadAcc ;
}

/*
 * Function : void CaptureBroadFrame(void)
 * Description : Capture Broadcast Rx Frame
 */
void CaptureBroadFrame(void)
{
	Print("\n >>>>> Capture Broadcast Rx Frame Data <<<<< ") ;
	gCapture_Addr0 = gCam0_Addr0 ; 
	gCapture_Addr1 = gCam0_Addr1 ;
	gCamCon = BroadAcc ;
	CaptureRxFrame() ;
	gCamCon = CompEn | BroadAcc ;
}

/*
 * Function : void CaptureCntlFrame(void)
 * Description : Capture Control Rx Frame
 */
void CaptureCntlFrame(void)
{
	Print("\n >>>>> Capture Control Rx Frame Data <<<<< ") ;
	gCapture_Addr0 = 0x0 ; gCapture_Addr1 = 0x0 ;
	gCamCon = CompEn | StationAcc | GroupAcc | BroadAcc | NegCAM ;
#ifdef LITTLE
	gBdmaRxCon = BRxDIE | BRxEn | BRxLittle | BRxMAINC | BRxBRST ; 
#else
	gBdmaRxCon = BRxDIE | BRxEn | BRxBig | BRxMAINC | BRxBRST ; 
#endif
	gMacRxCon = RxEn | EnAlign | EnCRCErr | EnOver | EnLongErr | \
			EnRxPar | PassCtl  ;

	CaptureRxFrame() ;

	gMacRxCon = RxEn | StripCRC ; 
#ifdef LITTLE
	gBdmaRxCon = BRxDIE | BRxEn | BRxLittle | BRxMAINC | BRxBRST | \
                          BRxNLIE | BRxNOIE | BRxSTSKO ;
#else
	gBdmaRxCon = BRxDIE | BRxEn | BRxBig | BRxMAINC | BRxBRST | \
                          BRxNLIE | BRxNOIE | BRxSTSKO ;
#endif

	gCamCon = CompEn | BroadAcc ;
}

/*
 * Function : void CaptureMatchedDest(void)
 * Description : Capture Matched Destination Address Rx Frame
 */
void CaptureMatchedDest(void)
{
	U8 RcvData[12] ;
	int i, MacAddrSize = 12 ;

	Print("\n >>>>> Capture Matched Destination Rx Frame Data <<<<< ") ;

	Print("\r $$ Enter Destination Address : ") ;
	i = 0 ;
	gCapture_Addr0 = 0x0 ; gCapture_Addr1 = 0x0 ;

	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++ ;
	}

	// Get First of MAC Address
	for (i=0;i<MacAddrSize-4;i++) 
		gCapture_Addr0 = (gCapture_Addr0 << 4) | RcvData[i] ;

	// Get Second of MAC Address
	for (i=MacAddrSize-4;i<MacAddrSize;i++)
		gCapture_Addr1 = (gCapture_Addr1 << 4) | RcvData[i] ;
	gCapture_Addr1 = (gCapture_Addr1 << 16)  ;

	Print("\r >>> Destination Address to Receive : ") ;
	for (i=0;i<MacAddrSize;i++)  Print("%01x ",RcvData[i]) ;
	put_byte('\n') ;

	CaptureRxFrame() ;
}


⌨️ 快捷键说明

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