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

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

?? hardware_8041_int.c

?? 以太網處理程序;基于lpc2378
?? C
?? 第 1 頁 / 共 2 頁
字號:
    }

    if ( length > EMAC_BLOCK_SIZE )
    {
		templen = length;
		for ( i = 0; (uint32)(length/EMAC_BLOCK_SIZE) + 1; i++ )
		{
	    	templen = length - EMAC_BLOCK_SIZE;
	    	/* two words at a time, packet and control */
	    	tx_desc_addr = (uint32 *)(TX_DESCRIPTOR_ADDR + TxProduceIndex * 8);
	    	/* descriptor status needs to be checked first */
	    	if ( templen % EMAC_BLOCK_SIZE )
	    	{
				/* full block */ 
				*tx_desc_addr = (uint32)(EMACBuf + i * EMAC_BLOCK_SIZE);
				/* set TX descriptor control field */
				*(tx_desc_addr+1) = (uint32)(EMAC_TX_DESC_INT | (EMAC_BLOCK_SIZE - 1));
				TxProduceIndex++;
				if ( TxProduceIndex == EMAC_TX_DESCRIPTOR_COUNT )
    			{
		    		TxProduceIndex = 0;
				}
				MAC_TXPRODUCEINDEX = TxProduceIndex;	/* transmit now */
	    	}
	    	else
	    	{
				/* last fragment */
				*tx_desc_addr = (uint32)(EMACBuf + i * EMAC_BLOCK_SIZE);
				/* set TX descriptor control field */
				*(tx_desc_addr+1) = (uint32)(EMAC_TX_DESC_INT | EMAC_TX_DESC_LAST | (templen -1) );
				TxProduceIndex++;		/* transmit now */
				if ( TxProduceIndex == EMAC_TX_DESCRIPTOR_COUNT )
    			{
		    		TxProduceIndex = 0;
				}
				MAC_TXPRODUCEINDEX = TxProduceIndex;	/* transmit now */
				break;
	    	}    
		}
    }
    else
    {
		tx_desc_addr = (uint32 *)(TX_DESCRIPTOR_ADDR + TxProduceIndex * 8);
		/* descriptor status needs to be checked first */
		*tx_desc_addr = (uint32)(EMACBuf);
		/* set TX descriptor control field */
		*(tx_desc_addr+1) = (uint32)(EMAC_TX_DESC_INT | EMAC_TX_DESC_LAST | EMAC_TX_DESC_PAD| (length -1));
		TxProduceIndex++;		/* transmit now */
		if ( TxProduceIndex == EMAC_TX_DESCRIPTOR_COUNT )
		{
	    	TxProduceIndex = 0;
		}
		MAC_TXPRODUCEINDEX = TxProduceIndex;
    }
    return ( TRUE );
}
/**********************************************************************
**函數原型:    void 		Send_Packet(struct _pkst *TxdData)
**入口參數:		struct _pkst *TxdData	:指向要發送數據的結構指針
**              
**出口參數:		無
**返 回 值:	無              
**說    明:	發送數據包,以太網底層驅動程序,所有的數據發送都要通過該程序
************************************************************************/
void Send_Packet(struct _pkst *TxdData)//  
{

	struct _pkst *ExPtr;//
	uint8 *TEPTR;
	uint8 *rxptr;
	uint16 ii,length=0,jj;
	uint32 intstat;
	
	length=length+TxdData->length;
	ExPtr=TxdData->STPTR;
	while(ExPtr!=NULL)//計算出要發送的數據的總長度
	{	
		length=length+ExPtr->length;
		ExPtr=ExPtr->STPTR;
	}
	ii=length;
	
	rxptr = (uint8 *)EMAC_TX_BUFFER_ADDR;
	TEPTR=TxdData->DAPTR;
	for(ii=0;ii<TxdData->length;ii++)
	{
		*rxptr = *TEPTR;
		rxptr++;
		TEPTR++;
	}
	ExPtr=TxdData->STPTR;
	while(ExPtr!=NULL)
	{
		TEPTR=ExPtr->DAPTR;
		for(ii=0;ii<ExPtr->length;ii++)
		{
			*rxptr = *TEPTR;
			rxptr++;
			TEPTR++;	
		}
		ExPtr=ExPtr->STPTR;
	}
	//如果少于60
	
	ii=length;
	if(length<60)
	{
		//如果數據長度<60字節,設置長度為60字節
		ii=60;
	}
	rxptr = (uint8 *)EMAC_TX_BUFFER_ADDR;
    EMACSend((uint32 *)rxptr,ii);
	/***************************************/
	//重發數據的處理
	
	for(length=0;length<6;length++)	//最多重發6次
	{
		for(jj=0;jj<1000;jj++)
		{//檢查CR寄存器的txp位是否為低,為1說明正在發送,為0說明發完或出錯放棄
			intstat = MAC_INTSTATUS;
			intstat |= EINTSTA;  
			if ( intstat & EMAC_INT_TXDONE )
			{
		    	TxDoneCount++;
		    	break;
			}
        }
		if(intstat & EMAC_INT_TXDONE)//表示發送成功,判斷發送狀態寄存器TSR,決定是否出錯
		{
			MAC_INTCLEAR = 0x0f;//EMAC_INT_TXDONE;
			EINTSTA &= 0xf0; 
			break;
		}
		EMACSend((uint32 *)rxptr,ii);       //to sendpacket;
	}
	
	/**************************************/
	//OS_EXIT_CRITICAL();
}
uint32 EMACReceiveFractions( uint32 StartIndex, uint32 EndIndex, uint32 * dataptr32 )
{
    uint32 i, RxLength = 0;
    uint32 RxSize;
    uint32 *rx_status_addr,*rx_desc_addr,*rx_data_addr;

    for ( i = StartIndex; i < EndIndex; i++ )
    {
		/* Get RX status, two words, status info. and status hash CRC. */
		rx_status_addr = (uint32 *)(RX_STATUS_ADDR + StartIndex * 8);
		rx_desc_addr = (uint32 *)(RX_DESCRIPTOR_ADDR + StartIndex * 8);
		rx_data_addr = (uint32 *)(*rx_desc_addr);
		RxSize = (*rx_status_addr & DESC_SIZE_MASK) - 1;
		for(i=0;i<(RxSize+3)/4;i++)
			dataptr32[i]=*rx_data_addr++;
		/* two words at a time, packet and control */
		CurrentRxPtr += EMAC_BLOCK_SIZE;
		StartIndex++;
		/* last fragment of a frame */
		if ( *rx_status_addr & RX_DESC_STATUS_LAST ) 
		{
	    	/* set INT bit and RX packet size */
	    	MAC_RXCONSUMEINDEX = StartIndex;
	    	RxLength += RxSize;
	    	break; 
		}
		else	/* In the middle of the frame, the RxSize should be EMAC_BLOCK_SIZE */
				/* In the emac.h, the EMAC_BLOCK_SIZE has been set to the largest 
				ethernet packet length to simplify the process, so, it should not 
				come here in any case to deal with fragmentation. Otherwise, 
				fragmentation and repacking will be needed. */
		{
	    	/* set INT bit and maximum block size */
	    	MAC_RXCONSUMEINDEX = StartIndex;
	    	/* wait until the whole block is received, size is EMAC_BLOCK_SIZE. */
	    	while ( (*rx_status_addr & DESC_SIZE_MASK) != (EMAC_BLOCK_SIZE - 1));
	    	RxLength += RxSize;
		}
    }
    return( RxLength );
}
/******************************************************************************
** Function name:		EMACHandler
**
** Descriptions:		EMAC interrupt handler
**
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void InitNic(uint8 num);
void EMACHandler (uint32 IntStatus)
{

    //IENABLE;				/* handles nested interrupt */

    IntStatus = MAC_INTSTATUS;
    IntStatus |= EINTSTA;     
    if ( IntStatus != 0 )	/* At least one interrupt */
    {
		if ( IntStatus & EMAC_INT_RXOVERRUN )
		{
	    	MAC_INTCLEAR = EMAC_INT_RXOVERRUN;
			RXOverrunCount++;
			//InitNic(0);
			EMACRxDescriptorInit();
			//IDISABLE;
			//VICVectAddr = 0;		/* Acknowledge Interrupt */
			return;
		}

		if ( IntStatus & EMAC_INT_RXERROR )
		{
			MAC_INTCLEAR = EMAC_INT_RXERROR;
			RXErrorCount++;
			//InitNic(0);
			//IDISABLE;
			//VICVectAddr = 0;		/* Acknowledge Interrupt */
			return;
		}
	
		if ( IntStatus & EMAC_INT_RXFINISHED )
		{
	    	MAC_INTCLEAR = EMAC_INT_RXFINISHED;
	    	RxFinishedCount++;
	    	/* Below should never happen or RX is seriously wrong */
	    	//while ( MAC_RXPRODUCEINDEX != (MAC_RXCONSUMEINDEX - 1) );
		}

		if ( IntStatus & EMAC_INT_TXUNDERRUN )
		{
			MAC_INTCLEAR = EMAC_INT_TXUNDERRUN;
			TXUnderrunCount++;
			//IDISABLE;
			//VICVectAddr = 0;		/* Acknowledge Interrupt */
			return;
		}
		if ( IntStatus & EMAC_INT_TXERROR )
		{
			MAC_INTCLEAR = EMAC_INT_TXERROR;
			TXErrorCount++;
			//IDISABLE;
			//VICVectAddr = 0;		/* Acknowledge Interrupt */
			return;
		}

		if ( IntStatus & EMAC_INT_TXFINISHED )
		{
	    	MAC_INTCLEAR = EMAC_INT_TXFINISHED;
	    	TxFinishedCount++;
		}
		EINTSTA &= 0x88;
    }   
    //IDISABLE;
    //VICVectAddr = 0;		/* Acknowledge Interrupt */
	return;
}
/**********************************************************************
**函數原型:    unsigned char * Rec_Packet()
**入口參數:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲观看高清完整版在线观看 | 欧美高清视频在线高清观看mv色露露十八 | 精品视频1区2区| 亚洲最大成人网4388xx| 欧美性极品少妇| 日韩精品乱码av一区二区| 3d动漫精品啪啪| 国产在线视频一区二区三区| 国产视频一区二区三区在线观看 | 一区二区三区四区在线免费观看| 在线日韩av片| 美女一区二区在线观看| 精品国产乱码久久久久久影片| 国产一区二区三区久久久| 国产精品久久久久久久久果冻传媒 | 久久久久久久久久电影| 成人福利在线看| 一级日本不卡的影视| 欧美一卡二卡在线观看| 国产精品一二三区在线| 一区二区三区在线视频免费观看 | 色综合天天综合网天天看片| 亚洲电影中文字幕在线观看| 91麻豆精品国产无毒不卡在线观看 | 国产亚洲成av人在线观看导航| a在线欧美一区| 视频在线在亚洲| 久久亚洲春色中文字幕久久久| 99久久夜色精品国产网站| 午夜av区久久| 国产精品欧美久久久久一区二区 | 免费久久精品视频| 中文字幕亚洲区| 欧美一区二区二区| 成人aaaa免费全部观看| 日本三级亚洲精品| 伊人婷婷欧美激情| 久久久久久久免费视频了| 欧美三日本三级三级在线播放| 国内成+人亚洲+欧美+综合在线| 亚洲在线观看免费视频| 国产亚洲欧美日韩俺去了| 欧美区在线观看| 99亚偷拍自图区亚洲| 激情文学综合丁香| 午夜视频在线观看一区二区 | 国产精品12区| 日本不卡1234视频| 亚洲宅男天堂在线观看无病毒| 久久久久久一二三区| 欧美一区二区高清| 欧美日韩国产综合一区二区| www.99精品| 国产69精品久久久久毛片| 久久精品国产秦先生| 午夜精品久久一牛影视| 亚洲综合成人在线| 中文字幕一区在线观看视频| 久久精品视频一区二区三区| 欧美大片一区二区三区| 91精品福利在线一区二区三区 | 欧美日韩久久一区二区| 91免费精品国自产拍在线不卡| 国产成人精品免费在线| 精品一区二区三区在线视频| 99精品视频一区| 久久久久国产精品麻豆ai换脸| 亚洲国产精品国自产拍av| 欧美在线不卡视频| 亚洲自拍偷拍欧美| 日韩一二三区视频| 国产精品综合一区二区三区| 久久影院午夜论| 欧洲精品中文字幕| 色偷偷88欧美精品久久久| 粉嫩高潮美女一区二区三区| 欧美亚洲国产bt| 欧美一区二区三区日韩视频| 欧美不卡一区二区| 亚洲乱码中文字幕| 国产精品77777| 欧美成va人片在线观看| 视频一区中文字幕国产| 国产精品456露脸| 精品国产a毛片| 蜜桃av一区二区| 欧美性高清videossexo| 久久久精品综合| 国产欧美日韩麻豆91| 中国av一区二区三区| 亚洲同性gay激情无套| 香蕉成人啪国产精品视频综合网| 亚洲欧美日韩国产另类专区 | 亚洲一区二区影院| 中文字幕在线不卡一区二区三区| 91亚洲大成网污www| 北条麻妃国产九九精品视频| 91亚洲精华国产精华精华液| 欧美日韩视频在线第一区| 欧美日韩激情一区二区| 精品国产一区久久| 中文字幕亚洲电影| 亚洲国产精品久久不卡毛片| 日本午夜精品一区二区三区电影| 国产一区视频导航| 91丨porny丨最新| 欧美另类久久久品| 久久久精品黄色| 日本v片在线高清不卡在线观看| 欧美色图在线观看| 美国av一区二区| 91国产免费看| 在线播放一区二区三区| 日韩午夜中文字幕| 日韩欧美aaaaaa| 国产性天天综合网| 亚洲成人午夜电影| 国产精品一二三区在线| 69堂国产成人免费视频| 亚洲午夜免费电影| 91福利国产精品| 视频一区视频二区中文字幕| 日韩欧美国产1| 91在线视频18| 韩国午夜理伦三级不卡影院| 中文字幕一区二区三区在线不卡| 欧美久久久久久久久中文字幕| 精品夜夜嗨av一区二区三区| 婷婷中文字幕一区三区| 亚洲欧美中日韩| xnxx国产精品| 国产在线麻豆精品观看| 日韩欧美国产综合| 国产精品一区二区不卡| 国产亚洲一区二区在线观看| 成人天堂资源www在线| 国产精品久久久久9999吃药| 91在线国内视频| 亚洲欧洲精品天堂一级| 91福利资源站| 水野朝阳av一区二区三区| av成人动漫在线观看| 日韩成人免费电影| 久久女同性恋中文字幕| 欧美裸体bbwbbwbbw| 99riav久久精品riav| 日韩一区二区免费在线电影| 午夜av一区二区三区| 欧美丰满一区二区免费视频| 丝袜亚洲另类欧美| 日韩色视频在线观看| 狠狠色狠狠色综合日日91app| 91麻豆精品国产91久久久久| 国产a区久久久| 日韩成人dvd| 亚洲自拍偷拍网站| 欧美日韩国产区一| av爱爱亚洲一区| **性色生活片久久毛片| 成人av在线电影| 午夜影院久久久| 久久久www免费人成精品| 欧美日韩精品一区二区三区蜜桃| 成人午夜视频在线观看| 国产成人在线视频网站| 91在线观看污| 成人av在线网站| 91精品欧美综合在线观看最新| 欧美视频一区二区三区四区 | 欧美一二三四在线| 久久久综合九色合综国产精品| 欧美激情艳妇裸体舞| 国产精品伦理一区二区| 国产欧美一区二区三区在线看蜜臀| 欧美日韩1234| 91麻豆精品国产91久久久久久| 欧美视频在线一区二区三区| 成人av网站在线| 成人av在线播放网址| 99视频热这里只有精品免费| 成人免费视频视频| 99国产精品久久久久久久久久| 久久国产精品99精品国产| 日日夜夜免费精品| 日韩主播视频在线| 青草国产精品久久久久久| 色婷婷综合久久久中文一区二区 | 在线观看91精品国产麻豆| 亚洲影视在线观看| 亚洲精品欧美综合四区| 亚洲国产成人91porn| 国产揄拍国内精品对白| 99久久免费精品| 日韩亚洲欧美成人一区| 亚洲国产精品视频| av资源网一区| 综合久久国产九一剧情麻豆| 99精品在线观看视频| 伊人婷婷欧美激情| 欧美高清dvd|