📄 mac_lib.c
字号:
gsMacRxStatus.RxParErr, gsMacRxStatus.sRxHalted) ;
Print("\n\r +- BDMA Tx Err Count -+ ") ;
Print("\n\r BTxNull: %d, BTxNOwn: %d, BTxEmpty: %d ", \
gsBdmaTxStatus.BTxNLErr, gsBdmaTxStatus.BTxNOErr, \
gsBdmaTxStatus.BTxEmptyErr ) ;
Print("\n\r +- BDMA Rx Err Count (RxCnt:%d) -+ ",gsBdmaRxStatus.BdmaRxGood) ;
Print("\n\r BRxNull: %d, BRxNOwn: %d, BRxOvr: %d ", \
gsBdmaRxStatus.BRxNLErr, gsBdmaRxStatus.BRxNOErr, \
gsBdmaRxStatus.BRxMSOErr) ;
Print("\n\r +- Missed Error Count : %d",EMISSCNT) ;
Print("\n\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("\n\r -- Destin Address : ") ;
for(i=0; i < 6; i++) Print("%02x ", *pFrameData++);
Print("\n\r -- Source Address : ") ;
for(i=0; i < 6; i++) Print("%02x ", *pFrameData++);
Print("\n\r -- LLC Frame Length(Data+Length:%d) : ",FrameLength) ;
for(i=0; i < 2; i++) Print("%02x ", *pFrameData++);
Print("\n\r -- LLC Frame Data : ") ;
ColumnSize = FrameLength - 14 ;
do {
for(i=0; i < 16 ; i++)
{
Print("%02x ", *pFrameData++);
if (--ColumnSize == 0) break ;
}
Print("\n\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("\n\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("\n\r Write MAC Address : ") ;
for (i=0;i<6;i++) Print("\n%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\n >>> Read MAC Address : ") ;
MacAddr=(U8 *)IICReadInt((U8)IIC_DEV_0,(U32)iMacAddrPtr,MacAddrSize) ;
for (i=0;i<MacAddrSize;i++) Print("\n %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\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\n >>> Show Received Frame Data(%d Frame) <<<",\
gsBdmaRxStatus.BdmaRxGood) ;
Print("\n\n ########################################") ;
Print("\n\r # 1. Show All Received Frame [A] #") ;
Print("\n\r # 2. Show by Rx Sequence [N] #") ;
Print("\n\r # 3. Show by Rx Frame Length [L] #") ;
Print("\n\r # 4. Show by Source Address [S] #") ;
Print("\n\r # 5. Show by Destination Address [D] #") ;
Print("\n\r # 6. Show Control Frame [C] #") ;
Print("\n\r # 7. Quit [Q] #") ;
Print("\n\r ########################################") ;
Print("\n\n >> Enter View Function ?") ;
CheckViewFunction = get_byte() ;
if ( (CheckViewFunction == 'N') || (CheckViewFunction == 'n') )
{
Print("\n\r $$ Enter Sequence Number (Digit) : ") ;
CheckSequence = get_number() ;
}
if ( (CheckViewFunction == 'L') || (CheckViewFunction == 'l') )
{
Print("\n\r $$ Enter Rx Frame Length (Digit) : ") ;
CheckFrameLength = get_number() ;
}
if ( (CheckViewFunction == 'S') || (CheckViewFunction == 's') )
{
Print("\n\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("\n\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 ; }
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\n+++ %d'th Received Frame Data(%x)",RxSequence,RxStatus);
Print("\n\r -> Received Time : %d min %d sec ",RxMin,RxSec ) ;
PrintRxFrame((U8 *)CurrentArea, FrameLength) ;
}
else if ( (CheckViewFunction == 'N') || (CheckViewFunction == 'n') ) {
if (RxSequence == CheckSequence)
{
Print("\n\n+++ %d'th Received Frame Data(%x)",RxSequence,RxStatus) ;
Print("\n\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\n+++ %d'th Frame is Less than %d Byte(%x)",
RxSequence,CheckFrameLength,RxStatus) ;
Print("\n\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\n+++ %d'th Frame is Source Address Mached(%x)",\
RxSequence,RxStatus) ;
Print("\n\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\n+++ %d'th Frame is Destination Address Mached(%x)",\
RxSequence,RxStatus) ;
Print("\n\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\n+++ %d'th Frame is Control Frame(%x)", \
RxSequence, RxStatus) ;
Print("\n\r -> Received Time : %d min %d sec ",RxMin,RxSec ) ;
PrintRxFrame((U8 *)CurrentArea, FrameLength) ;
}
}
// For Next Frame
CurrentArea += FrameLength/4 ;
}
Print("\n\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 + -