📄 mac.c
字号:
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 + -