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

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

?? hardware.c

?? 以太網處理程序;基于lpc2378
?? C
?? 第 1 頁 / 共 2 頁
字號:
		/* To be tested */
		MAC_TXPRODUCEINDEX = 0;
    }

    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;
			if ( intstat & EMAC_INT_TXDONE )
			{
		    	TxDoneCount++;
		    	break;
			}
        }
		if(intstat & EMAC_INT_TXDONE)//表示發送成功,判斷發送狀態寄存器TSR,決定是否出錯
		{
			MAC_INTCLEAR = 0x0f;//EMAC_INT_TXDONE;
			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;    
    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++;
		}
    }   
    //IDISABLE;
    //VICVectAddr = 0;		/* Acknowledge Interrupt */
	return;
}
/**********************************************************************
**函數原型:    unsigned char * Rec_Packet()
**入口參數:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品91一区二区| 国模套图日韩精品一区二区| 精品国产伦一区二区三区观看体验 | 久久久精品tv| 欧美日韩精品一区二区三区| 不卡在线观看av| 偷偷要91色婷婷| 成人欧美一区二区三区视频网页| 91精品国产综合久久香蕉的特点 | 色婷婷久久久综合中文字幕| 日韩成人伦理电影在线观看| 亚洲欧美一区二区三区极速播放| 欧美一级高清大全免费观看| 色综合天天综合网国产成人综合天| 久久精品久久精品| 亚洲午夜一区二区| 亚洲欧美怡红院| 精品国产乱码久久久久久影片| 欧美日韩精品一区二区在线播放| 911国产精品| 在线国产电影不卡| 成人午夜大片免费观看| 激情深爱一区二区| 青青草国产成人av片免费| 一区二区三区视频在线看| 中文在线一区二区| 久久久久久电影| 精品久久国产老人久久综合| 在线成人高清不卡| 在线观看网站黄不卡| 91女神在线视频| 不卡一区二区三区四区| 国产一区二区不卡在线 | 国产电影一区在线| 久久 天天综合| 麻豆精品视频在线| 免费久久99精品国产| 日韩成人一区二区三区在线观看| 天天色综合成人网| 午夜精品aaa| 亚洲国产精品人人做人人爽| 亚洲欧美一区二区三区久本道91| 日韩毛片在线免费观看| 国产精品久久久久久福利一牛影视| 国产亚洲午夜高清国产拍精品| 欧美videos大乳护士334| 欧美一区二区观看视频| 欧美一区二区三区四区五区| 91精品国产91热久久久做人人 | 波多野结衣中文字幕一区| 岛国精品一区二区| 不卡一区二区中文字幕| 94-欧美-setu| 91久久精品一区二区三区| 91官网在线观看| 91国在线观看| 91麻豆精品国产91久久久更新时间| 欧美一级二级在线观看| 亚洲精品在线免费观看视频| 国产色产综合色产在线视频| 欧美国产精品中文字幕| 国产精品夫妻自拍| 亚洲一区影音先锋| 日本亚洲最大的色成网站www| 日韩av成人高清| 国产在线一区二区| 91免费版pro下载短视频| 欧美亚洲高清一区二区三区不卡| 在线成人免费视频| 国产视频一区在线观看| 亚洲在线视频免费观看| 久久激情综合网| 成人av网址在线| 欧美日韩一卡二卡三卡| 精品日韩欧美在线| 亚洲欧洲精品一区二区精品久久久| 亚洲综合色区另类av| 麻豆精品视频在线观看免费| 成人激情小说乱人伦| 欧美日韩免费观看一区二区三区| 日韩欧美中文一区| 日本一区二区三区dvd视频在线 | 国产精品中文有码| 91理论电影在线观看| 欧美大片免费久久精品三p| 国产精品免费视频网站| 亚洲 欧美综合在线网络| 国产精品影视在线| 欧美人成免费网站| 国产偷国产偷亚洲高清人白洁| 亚洲永久精品大片| 国内精品伊人久久久久av影院| 色一区在线观看| 久久综合九色综合欧美就去吻| 最新国产精品久久精品| 久久av资源网| 精品视频1区2区3区| 亚洲国产成人一区二区三区| 天涯成人国产亚洲精品一区av| 国产精华液一区二区三区| 欧美日韩在线精品一区二区三区激情 | 亚洲一线二线三线久久久| 国产精品资源网站| 欧美一三区三区四区免费在线看| 中文字幕一区二区不卡| 国内成人精品2018免费看| 欧美三级三级三级| 亚洲视频小说图片| 国产精品亚洲第一区在线暖暖韩国| 欧美日韩成人在线| 亚洲综合久久久久| av在线播放成人| 国产午夜亚洲精品羞羞网站| 日韩精品亚洲专区| 欧美日韩综合在线| 1000部国产精品成人观看| 国内偷窥港台综合视频在线播放| 在线播放国产精品二区一二区四区| 中文字幕日韩精品一区| 国产成人一区二区精品非洲| 日韩一区二区三区免费看 | 激情五月婷婷综合| 欧美一区在线视频| 日韩国产欧美在线观看| 欧美美女直播网站| 亚洲国产日产av| 欧美亚洲日本国产| 亚洲国产视频一区| 欧美体内she精视频| 亚洲一线二线三线视频| 欧洲av在线精品| 夜夜揉揉日日人人青青一国产精品| 91丨porny丨户外露出| 国产精品国产精品国产专区不蜜 | 日韩精品一二三| 91精品国产黑色紧身裤美女| 日韩激情一二三区| 欧美一区二区网站| 日韩国产在线观看| 精品日韩成人av| 国产一区二区在线看| 久久久噜噜噜久噜久久综合| 国产精品亚洲第一| 国产精品剧情在线亚洲| 99精品桃花视频在线观看| 国产精品久久久久精k8 | 精品国产电影一区二区| 久久国产成人午夜av影院| 亚洲精品一区二区三区蜜桃下载| 久久99精品国产| 国产三级精品三级在线专区| 大胆欧美人体老妇| 亚洲人一二三区| 欧美性生活久久| 日韩av高清在线观看| 欧美大胆一级视频| 国产成人av一区二区三区在线| 欧美激情自拍偷拍| 一本色道a无线码一区v| 亚洲国产成人av好男人在线观看| 欧美一区午夜精品| 国产成人综合网| 亚洲美女一区二区三区| 91麻豆精品国产91久久久使用方法 | 亚洲精选视频免费看| 欧美日韩夫妻久久| 国产麻豆精品在线观看| 亚洲婷婷综合久久一本伊一区| 色综合一个色综合亚洲| 亚洲成人精品影院| 久久免费看少妇高潮| 91香蕉视频污在线| 乱中年女人伦av一区二区| 日本一区二区三级电影在线观看 | 久草热8精品视频在线观看| 欧美激情资源网| 欧美精品三级在线观看| 国产精品一区二区无线| 亚洲一区二区三区不卡国产欧美 | 国产精品国产a| 欧美日韩成人综合天天影院| 国产精品一区二区不卡| 亚洲精品写真福利| 精品国产露脸精彩对白| 日本精品一级二级| 国产福利精品一区二区| 亚洲成人tv网| 中文字幕一区二区5566日韩| 欧美一区二区三区在线视频| 不卡一区在线观看| 久久国产欧美日韩精品| 亚洲免费资源在线播放| 26uuu亚洲综合色| 欧美系列一区二区| 99亚偷拍自图区亚洲| 久久国产精品免费| 午夜精品久久久久久久99水蜜桃 | 99这里只有精品| 国产一区二区三区久久悠悠色av | 不卡电影一区二区三区|