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