亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? maclib.c

?? 三星4510開發板Sdns100上代的演示程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*************************************************************************/
/*                                                                       */
/* FILE NAME                                      VERSION                */
/*                                                                       */
/*      maclib.c                   		 KS32C50100   : version 1.0 */
/*                                                                       */
/* COMPONENT                                                             */
/*                                                                       */
/* DESCRIPTION                                                           */
/*                                                                       */
/*                                                                       */
/* AUTHOR                                                                */
/*                                                                       */
/*                                                                       */
/* DATA STRUCTURES                                                       */
/*                                                                       */
/*                                                                       */
/* FUNCTIONS                                                             */
/*                                                                       */
/*          Library For MAC Test Program                                 */
/*                                                                       */
/* DEPENDENCIES                                                          */
/*                                                                       */
/*                                                                       */
/*************************************************************************/
#include <stdarg.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include "uart.h"
#include "pollio.h"
#include "timer.h"
#include "isr.h"
#include "iic.h"
#include "memory.h"
#include "mac.h"

// Global variables  used for MAC driver
extern volatile U32 gMacCon,gMacTxCon,gBdmaTxCon ;
extern volatile U32 gMacRxCon,gBdmaRxCon,gCamCon ;

extern volatile U32 gCTxFDPtr, gWTxFDPtr ;
extern volatile U32 gCRxFDPtr, gPreviousFdp ;
extern volatile U32 gCam0_Addr0, gCam0_Addr1 ;
extern volatile U8 MyMacSrcAddr[6] ;
extern volatile int WatchDogTime, gErrorPacketCnt ;
extern volatile int BdmaRxDoneFlagForLoopBackCheck ;
extern volatile int MacTxDoneFlagForLoopBackCheck ;

U32 LoopCheckRxFD ;

// Global variable structure for store status
extern pMACTxStatus gsMacTxStatus ;
extern pMACRxStatus gsMacRxStatus ;
extern pBDMATxStatus gsBdmaTxStatus ;
extern pBDMARxStatus gsBdmaRxStatus ;

extern TIME tm0 ;

// variable for capture frame
extern volatile U32 gCapture_Addr0 , gCapture_Addr1 ;


/* --------------------------------------------------------------------*/
/* Frame buffer definition for restore received buffer                 */
/* In this diagonostic code, use unused area for received frame buffer */
/* --------------------------------------------------------------------*/
#define RxFrameDataPreamble	0xCCCCCCCC	// Rx Frame Data Preamble 
#define userframebasept 	0x5100000
#define userframelimitpt 	0x52FF000
volatile U32 *userframebuffer = (U32 *)userframebasept ;


/*
 * Function : Eth_Multi_Transmit
 * Description : Transmit Multiple packet
 */
void Eth_Multi_Transmit(void)
{
	sMACFrame 	PktBuff ;
	int 		i ;
	//int		Size = 46 ; // Min size
	int		Size = 1500 ; // Max size

	// Set destination address
	for (i=0;i<6;i++) PktBuff.Header.DestinationAddr[i] = MyMacSrcAddr[i] ;
	// Set source address
	for (i=0;i<6;i++) PktBuff.Header.SourceAddr[i] = MyMacSrcAddr[i] ;
	// Set length or type fields
	PktBuff.Header.LengthOrType[1] = (U8)( Size & 0xFF ) ;
	PktBuff.Header.LengthOrType[0] = (U8)( (Size >> 8) & 0xFF ) ;
	// LLC data setup
	for (i=0;i<Size;i++) PktBuff.LLCData[i]  = (U8)(i & 0xFF) ;

	while(1) {
		if ( SendPacket((U8 *)&PktBuff,Size) ) {
			if ( !(gsMacTxStatus.MacTxGood%10000) ) 
				Print("[T%d:%d]", tm0.tm_sec, gsMacTxStatus.MacTxGood ) ;
		} 
	}
}

/*
 * Function : Random_Pkt_Transmit
 * Description : Transmit single ramdom packet size
 * Input : seed
 * Output : 1=> ok, 0=> fail
 */
int Random_Pkt_Transmit(int seed)
{
	sMACFrame 	PktBuff ;
	int 		i ;
	int		Size, Q ;
	static int lenval;

	// Set destination address
	for (i=0;i<6;i++) PktBuff.Header.DestinationAddr[i] = MyMacSrcAddr[i] ;
	// Set source address
	for (i=0;i<6;i++) PktBuff.Header.SourceAddr[i] = MyMacSrcAddr[i] ;

	// Set length or type fields
	Size = PatternGen(seed) & 0x7FF ;
	if (Size > 1500) Size = 1500 ;
	//Size = Size%1501 ;
	if (Size < 46) Size = 46 ;
	//Q = ((Size)/2);
	//Size = 2*Q +2 ; 

	//Size = lenval+46+0 ;  
	//lenval = lenval + 1 ;
	//if(lenval == 1450)lenval = 0;

	//Print("Size : %d ", Size+14);

	PktBuff.Header.LengthOrType[1] = (U8)( (Size+18) & 0xFF ) ;
	PktBuff.Header.LengthOrType[0] = (U8)( ((Size+18) >> 8) & 0xFF ) ;

	// LLC data setup
	for (i=0;i<Size;i++) PktBuff.LLCData[i]  = (U8)(i+1 & 0xFF) ;

	if ( SendPacket((U8 *)&PktBuff,Size) )  return 1 ;
	else return 0 ;
}


/*
 * Function : GetRxFrameData
 * Description : Move MAC Received Frame Data
 */
void GetRxFrameData(U8 *pFrameData, U32 FrameLength, U32 RxStatus)
{
	U32 RxTime ;

	/* Receoved Frame Data Store Format */
	/* +------------------+             */
	/* | Preamble         |             */
	/* | Sequence| Time   |             */
	/* | Status  | Length |             */
	/* | Rx Data          |             */
	/* +------------------+             */

	RxTime = tm0.tm_sec | (tm0.tm_min << 8) ;

	if ( userframebuffer > (U32 *)userframelimitpt) 
	{
		userframebuffer = (U32 *)userframebasept ;
#if DEBUG
		Print("\r*- Buffer Full -*\r") ;
#endif
	}

	*userframebuffer++ = RxFrameDataPreamble ; 
	*userframebuffer++ = (gsBdmaRxStatus.BdmaRxGood << 16) | RxTime ;
	*userframebuffer++ = (RxStatus << 16) | FrameLength  ; 

	// Move Rx Frame to User Area
	memcpy ((U8 *)userframebuffer,(U8 *)pFrameData,FrameLength);
	userframebuffer += (U32)(FrameLength/4 + 1) ;
}


/*
 * Function : InterruptLoopBackTest
 * Description : MAC Loopback Test main function, in Interrupt mode
 */
int InterruptLoopBackTest(void)
{	
	sFrameDescriptor	*psTxFD ;
	U8 			*pTxFrameData ;
	U32 			UserFrameBufferPtr ;
	U32 			result ;
	U32 			i, LoopCnt, Cnt = 60 ;
	U32 			FrameMisMatch = 0 ;

	LoopCnt = Cnt/10 ;
	Print("\n --> MAC Loopback Test is Running cjwcjw(%d) ...  ", Cnt*Cnt/10 ) ;
	while(LoopCnt--) {
		for (i=0; i<Cnt ;i++)
		{
			psTxFD = (sFrameDescriptor *)gWTxFDPtr ;
			pTxFrameData = (U8 *)psTxFD->FrameDataPtr ;

			LoopCheckRxFD = gCRxFDPtr ;
			UserFrameBufferPtr = (U32)userframebuffer ;
			if ( UserFrameBufferPtr > (U32)userframelimitpt) 
				UserFrameBufferPtr = (U32)userframebasept ;

			Random_Pkt_Transmit(i) ;

			// wait until Tx done
			while( !MacTxDoneFlagForLoopBackCheck ) ;

			MacTxDoneFlagForLoopBackCheck = 0 ;

			if (!CompareLoopBackData(pTxFrameData,UserFrameBufferPtr)) {
				FrameMisMatch++ ;
				Print("\r >>> MAC Loopback Test is Running cjwcjw (%d) ...  ",\
					LoopCnt * (Cnt-i) ) ;
				result = 0 ;
				//result = 1 ;
			}
			else 	 result = 1 ;
		}
		PrintMemTestStatus((Cnt*Cnt-LoopCnt)%4) ;
	}
	Print(" Ok !!! \r  ** Total Mismatch Frame is %d ",FrameMisMatch) ;

	return result ;
}


/*
 * Function : CompareLoopBackData
 * Description : Compare Tx Frame Data and Rx Frame Data
 * Input : pTxFrameData => Transmit frame buffer address
 *         UserFrameBufferPtr => Receive frame Descriptor address
 */
int CompareLoopBackData(U8 *pTxFrameData, U32 UserFrameBufferPtr)
{
	sFrameDescriptor *pRxFDptr ;
	U32 			RxStatus, FrameLength ;
	U32 			*framebufferptr ;
	U8 			*pRxFrameData ;
	U32			*tmptx, *tmprx ;

	// Get Receive pointer
	framebufferptr  = (U32 *)UserFrameBufferPtr ;

	// check the receive flag 
	 while( !BdmaRxDoneFlagForLoopBackCheck ) ;
//put_byte('r');
	BdmaRxDoneFlagForLoopBackCheck = 0 ;

	// preamble
	*framebufferptr++ = 0 ; // Preamble Clear

	// Sequence and time
	*framebufferptr++ = 0 ;

	// Status and Length
	FrameLength = *framebufferptr & 0xFFFF ;
	RxStatus = (*framebufferptr >> 16) & 0xFFFF ;
	*framebufferptr++ = 0 ;
	if (FrameLength > 1520)  {
		tmptx = (U32 *)gCTxFDPtr ; 
		tmprx = (U32 *)gCRxFDPtr ;
		Print("TxPtr %x, RxPtr %x", gCTxFDPtr, gCRxFDPtr);
     	MemDump(tmptx-48, tmptx+48);
     	MemDump(tmprx-48, tmprx+48);
	}


	// get frame data pointer
	pRxFrameData = (U8 *)framebufferptr ;
	

	if (!bcomp(pTxFrameData,pRxFrameData,FrameLength)) {
		
		Print("\r gCRxFDPtr:%x, gCTxFDPtr:%d, BTxPtr", gCRxFDPtr,gCTxFDPtr, BDMATXPTR) ;
		Print("\r Status:%x, Length:%d", RxStatus,FrameLength) ;
		if (FrameLength > 2000) FrameLength = 2000 ;

		pRxFDptr = (sFrameDescriptor *)LoopCheckRxFD ;
		pRxFrameData = (U8 *)pRxFDptr->FrameDataPtr ;
		PrintRxFrame(pRxFrameData, FrameLength) ;

		PrintRxFrame(pTxFrameData, FrameLength) ;
		//while(1) ;
		while((!get_byte())=='q');

     	MemDump((U32 *)(pRxFrameData-FrameLength), (U32 *)(pRxFrameData+FrameLength));

		memset(pRxFrameData,0,FrameLength) ; // clear buffer
		return 0 ; // compare error
	}
	else {
		/*Print("\r gCRxFDPtr:%x, gCTxFDPtr:%d", gCRxFDPtr,gCTxFDPtr) ;
		Print("\r Status:%x, Length:%d", RxStatus,FrameLength) ;
		PrintRxFrame(pTxFrameData, FrameLength) ;
		pRxFDptr = (sFrameDescriptor *)LoopCheckRxFD ;
		pRxFrameData = (U8 *)pRxFDptr->FrameDataPtr ;
		PrintRxFrame(pRxFrameData, FrameLength) ;*/
		memset(pRxFrameData,0,FrameLength) ; // clear buffer
		//Print("COMPARE OK");
		return 1 ; // compare ok !
	}
}


/*
 * Function : void MacInternalLoopBack(void)
 * Description : MAC LoopBack Test
 */
void MacInternalLoopBack(void)
{
	Print("\n >>> MAC Internal Loopback Test <<<") ;
	MACCON |= MACLoop ;  // set Loopback bit(4)
	InterruptLoopBackTest() ;
	MACCON &= ~MACLoop ; // Disable Loopback bit(4)
}


/*
 * Function : PollingLoopBackTest
 * Description : Send and Check Frame for Loopback Diagnostics (Polling)
 */
int PollingLoopBackTest(void)
{	
	sFrameDescriptor	*psTxFD ;
	U8 			*pTxFrameData ;
	U32 			UserFrameBufferPtr ;
	U32 			status, result ;

	Print("\n >>> MAC Internal Loopback Test by Polling mode <<<") ;

	Disable_Int(nMAC_TX_INT);
	Disable_Int(nBDMA_RX_INT);
	MACCON |= MACLoop ;  // set Loopback bit(4)

	psTxFD = (sFrameDescriptor *)gWTxFDPtr ;
	pTxFrameData = (U8 *)psTxFD->FrameDataPtr ;

	UserFrameBufferPtr = (U32)userframebuffer ;
	if ( UserFrameBufferPtr > (U32)userframelimitpt) 
		UserFrameBufferPtr = (U32)userframebasept ;

	// --- Transmit Frame Data ---
	Random_Pkt_Transmit(10) ;

	// Wait until MAC Tx Done, by check MAC Tx Status Register
	// Polling Transmit finished
	while(1) {
		status = MACTXSTAT;
		if (status & Comp) break; 
	}

	MAC_Tx_isr() ;
	Print("\r MAC Tx done") ;

	// --- Receive Frame Data ---
	// Wait until BDMA Rx Done, by check BDMA Status Register
	// Polling Received
	while(1) {
		status = BDMASTAT;
		BDMASTAT = status ; 		// Clear Status Register
		if(status & S_BRxRDF) break; 	// Check BDMA Rx Done
	}

	BDMA_Rx_isr() ;
	Print("\r MAC Rx done") ;

	if (!CompareLoopBackData(pTxFrameData,UserFrameBufferPtr)) {
		result = 0 ;
	}
	else 	 result = 1 ;

	MACCON &= ~MACLoop ; // Disable Loopback bit(4)
	Enable_Int(nMAC_TX_INT);
	Enable_Int(nBDMA_RX_INT);

	return result;
}

/*
 * Function : ReadErrReport
 * Description : Read Error Status and Time
 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩中文播放| 日韩一区二区三区免费观看| 中文字幕精品—区二区四季| 国产成人av电影| 中文字幕不卡在线播放| 91色婷婷久久久久合中文| 中文字幕佐山爱一区二区免费| 色婷婷综合久久久久中文一区二区| 亚洲欧美国产毛片在线| 欧美性猛片xxxx免费看久爱| 日韩一区精品字幕| 久久综合国产精品| 风流少妇一区二区| 亚洲综合在线免费观看| 69久久夜色精品国产69蝌蚪网| 蜜臀91精品一区二区三区| 欧美成人国产一区二区| 波多野结衣中文字幕一区二区三区 | 亚洲6080在线| 欧美精品一区二区久久久| 国产成a人亚洲| 亚洲午夜免费电影| 精品免费一区二区三区| 不卡一区在线观看| 蜜臀a∨国产成人精品| 成人免费在线视频| 欧美狂野另类xxxxoooo| 国产v综合v亚洲欧| 亚洲一区视频在线观看视频| 精品国产伦一区二区三区免费| jizz一区二区| 蜜臀av性久久久久蜜臀aⅴ| 成人欧美一区二区三区小说| 日韩一级黄色大片| 91猫先生在线| 国产盗摄一区二区| 日韩精品午夜视频| 日韩一区在线免费观看| 精品福利一区二区三区| 91久久奴性调教| 国产91精品在线观看| 日韩高清在线一区| 亚洲日本丝袜连裤袜办公室| 精品88久久久久88久久久 | 欧美在线|欧美| 国产一区欧美一区| 男男gaygay亚洲| 成人免费在线视频观看| 久久精品人人做人人综合| 欧美肥胖老妇做爰| 91精品办公室少妇高潮对白| 国产宾馆实践打屁股91| 精品一区二区精品| 日韩成人免费电影| 亚洲成人av电影| 亚洲精品视频免费观看| 国产精品久久久久影院亚瑟| 久久午夜羞羞影院免费观看| 日韩欧美成人激情| 欧美精品乱人伦久久久久久| 日本道在线观看一区二区| 成人av中文字幕| 国产福利91精品一区二区三区| 另类小说色综合网站| 日本午夜一本久久久综合| 亚洲va韩国va欧美va| 一区二区三区毛片| 一区二区三区成人| 一区二区三区在线视频观看 | 欧美色视频在线观看| 91看片淫黄大片一级| 成人精品亚洲人成在线| 国产精品主播直播| 国产伦精品一区二区三区视频青涩| 久久99国产精品免费网站| 日韩av一区二区在线影视| 午夜电影网一区| 轻轻草成人在线| 激情五月婷婷综合网| 国产一级精品在线| 国产成人在线视频播放| 成人免费视频视频在线观看免费 | 国产99久久久国产精品| 国产精品一区二区三区99| 国产美女在线精品| 丁香六月综合激情| 91丝袜美女网| 欧美图区在线视频| 日韩一区二区三免费高清| 欧美xingq一区二区| 久久亚洲精品小早川怜子| 国产欧美日韩在线看| 中文字幕在线观看不卡视频| 亚洲精品一二三区| 亚洲高清免费在线| 精品一区二区三区视频在线观看| 国产精品一区二区在线观看网站| av电影在线观看不卡| 欧美在线制服丝袜| 日韩精品一区在线| 国产精品美女久久久久久| 尤物视频一区二区| 美女免费视频一区| 成人一区二区视频| 欧美日韩中文字幕一区二区| 中国色在线观看另类| 亚洲精品成人悠悠色影视| 亚洲v精品v日韩v欧美v专区 | 亚洲在线成人精品| 日本成人在线看| 高清在线观看日韩| 91久久久免费一区二区| 精品国产百合女同互慰| 亚洲欧美激情在线| 久久er99热精品一区二区| 成人一区二区三区视频| 欧美精品1区2区3区| 国产精品沙发午睡系列990531| 亚洲影院理伦片| 国产乱码精品一区二区三区av| 色综合久久88色综合天天免费| 欧美一级专区免费大片| 最新热久久免费视频| 免费人成精品欧美精品| 色婷婷综合久久久中文一区二区| 精品欧美黑人一区二区三区| 亚洲一区国产视频| 国产91露脸合集magnet| 日韩欧美色综合网站| 亚洲柠檬福利资源导航| 国产高清不卡一区二区| 欧美一区二区三区白人| 中文字幕一区二区三区在线不卡| 蜜桃精品视频在线观看| 欧美午夜片在线看| 国产精品乱人伦| 狠狠网亚洲精品| 欧美一级欧美一级在线播放| 亚洲精品国久久99热| 国产成人精品免费视频网站| 日韩欧美中文字幕公布| 亚洲国产wwwccc36天堂| 97精品视频在线观看自产线路二| 久久午夜电影网| 久久99精品久久久久久| 337p亚洲精品色噜噜狠狠| 一区二区三区在线视频观看| www.日韩大片| 国产精品色一区二区三区| 国产精品自拍一区| 久久一日本道色综合| 久久精品国产亚洲一区二区三区| 黄网站免费久久| 欧美tk—视频vk| 美女一区二区在线观看| 555夜色666亚洲国产免| 亚洲福利视频导航| 欧美午夜精品一区二区三区| 亚洲美女区一区| 一道本成人在线| 亚洲精品久久7777| 日本高清成人免费播放| 亚洲影视在线播放| 欧美视频一区二区在线观看| 一区二区成人在线视频| 91国模大尺度私拍在线视频| 亚洲欧美日韩中文字幕一区二区三区| 波多野结衣亚洲| 亚洲女人的天堂| 欧美性xxxxxx少妇| 午夜电影久久久| 日韩精品在线网站| 国产激情偷乱视频一区二区三区| 国产亚洲欧美一区在线观看| 国产精品夜夜爽| 国产精品久久二区二区| 波多野结衣一区二区三区| 成人国产精品免费网站| 国产精品欧美一区二区三区| 99精品欧美一区二区三区小说| 成人免费一区二区三区在线观看| 91视频一区二区| 亚洲超碰精品一区二区| 欧美一级高清片在线观看| 久久av老司机精品网站导航| 亚洲精品在线观| 丰满白嫩尤物一区二区| 亚洲乱码日产精品bd| 欧美日韩中文一区| 狠狠色狠狠色合久久伊人| 中文字幕成人网| 欧美日韩精品福利| 久久99国产精品免费网站| 国产精品美女久久久久aⅴ | 国产欧美一区二区精品婷婷| 9久草视频在线视频精品| 午夜精品久久久久久久久久久| 精品日韩在线一区| 99久久精品免费看国产免费软件| 亚洲线精品一区二区三区八戒|