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

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

?? hardware_8041_int.c

?? 周立功LPC2300開發板 基于US/osII2.52 的TCP/IP 演示完整源代碼
?? 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一区二区三区免费野_久草精品视频
aaa国产一区| 日韩欧美一二三区| 欧美日韩性生活| 欧美日韩成人在线一区| 91精品麻豆日日躁夜夜躁| 久久久精品天堂| 中文字幕日韩一区二区| 香蕉影视欧美成人| 国产一区二区三区日韩| 麻豆精品视频在线观看免费| 99精品1区2区| 日韩免费高清电影| 国产目拍亚洲精品99久久精品| 国产精品麻豆欧美日韩ww| 舔着乳尖日韩一区| 成人国产精品视频| 日韩免费成人网| 亚洲伊人色欲综合网| 国产成人在线免费观看| 99re成人在线| 国产亚洲污的网站| 男人的天堂亚洲一区| 91美女片黄在线| 国产精品卡一卡二| 蜜臀久久99精品久久久画质超高清| www.久久精品| 久久久久久久综合色一本| 亚洲va欧美va人人爽午夜| av在线播放不卡| 26uuu亚洲| 亚洲美女视频在线| 福利91精品一区二区三区| 欧美一区二区三区视频免费播放| 国产午夜精品久久久久久久| 毛片av一区二区| 欧美福利电影网| 亚洲黄一区二区三区| 国产美女精品人人做人人爽| 欧美电影免费观看完整版| 亚洲男人的天堂一区二区| 日韩avvvv在线播放| 在线免费一区三区| 亚洲伦在线观看| 色综合久久久久久久| 国产欧美va欧美不卡在线| 亚洲国产一区二区视频| 色天天综合色天天久久| 亚洲你懂的在线视频| caoporn国产一区二区| 欧美激情在线看| 成人午夜精品在线| 欧美激情中文字幕| 99国产精品视频免费观看| 中文字幕国产一区二区| 精品一区二区三区影院在线午夜| 欧美一区二区三区视频免费播放| 麻豆成人91精品二区三区| 正在播放一区二区| 奇米888四色在线精品| 欧美日韩国产高清一区二区 | 亚洲va韩国va欧美va精品| 在线中文字幕一区| 亚洲成人午夜电影| 欧美一区二区视频在线观看2022 | 国产制服丝袜一区| 日韩免费视频一区二区| 国模一区二区三区白浆| 国产女主播一区| 色综合夜色一区| 午夜电影网亚洲视频| 欧美日韩国产首页在线观看| 美女免费视频一区| 国产欧美日韩视频在线观看| 99精品欧美一区二区三区小说| 亚洲制服丝袜一区| 日韩欧美的一区| 99久久精品免费观看| 亚洲国产视频在线| 久久女同互慰一区二区三区| 91在线视频免费91| 免费国产亚洲视频| 国产精品萝li| 欧美一级欧美三级| 国产夫妻精品视频| 亚洲亚洲精品在线观看| 久久久久9999亚洲精品| 色综合网色综合| 美女久久久精品| 亚洲免费高清视频在线| 欧美三级电影精品| 国产精品1区二区.| 午夜天堂影视香蕉久久| 国产女人水真多18毛片18精品视频| 波多野结衣亚洲| 久久精品久久精品| 一区二区三区欧美久久| xfplay精品久久| 久久欧美中文字幕| 欧美三级视频在线| 91麻豆福利精品推荐| 成人在线综合网站| 国产成人一区在线| 国产精品中文有码| 精品亚洲免费视频| 男女男精品视频| 青椒成人免费视频| 日韩二区在线观看| 天天操天天干天天综合网| 亚洲免费三区一区二区| 亚洲免费在线视频一区 二区| 亚洲国产高清不卡| 一区二区成人在线视频| 亚洲激情校园春色| 亚洲精品ww久久久久久p站| 亚洲天堂av一区| 亚洲少妇屁股交4| 综合婷婷亚洲小说| 亚洲美女淫视频| 亚洲成人第一页| 五月婷婷激情综合| 日本vs亚洲vs韩国一区三区二区 | 亚洲精品视频在线看| 亚洲色图制服丝袜| 一区二区三区四区不卡在线| 亚洲自拍偷拍av| 日本一区中文字幕| 国产一区二区在线免费观看| 国产成人午夜精品影院观看视频| 国产精品一区二区视频| eeuss鲁一区二区三区| 色婷婷久久久亚洲一区二区三区 | 久久久亚洲欧洲日产国码αv| 久久久亚洲精品石原莉奈| 国产欧美一区二区三区网站| 中文字幕亚洲成人| 亚洲成a人片在线不卡一二三区| 亚洲成av人片在线| 韩国v欧美v亚洲v日本v| 不卡的av在线播放| 欧美午夜免费电影| 日韩精品综合一本久道在线视频| 久久久综合视频| 国产精品久久久久7777按摩 | 7777精品伊人久久久大香线蕉超级流畅 | 一区二区三区四区乱视频| 亚洲成人三级小说| 国产精品系列在线播放| 99精品久久免费看蜜臀剧情介绍| 欧美色倩网站大全免费| 日韩精品中文字幕一区二区三区| 久久男人中文字幕资源站| 国产精品久久综合| 首页欧美精品中文字幕| 国产福利一区二区| 欧美色区777第一页| 久久久久久久久岛国免费| 亚洲欧美激情小说另类| 激情综合网av| 在线视频一区二区三| 2019国产精品| 亚洲v中文字幕| 不卡的av在线| 久久亚区不卡日本| 亚洲成人自拍一区| av在线不卡免费看| 精品国产sm最大网站免费看| 一区二区三区四区中文字幕| 久久99国产精品尤物| 欧美色大人视频| 中文字幕亚洲成人| 国产精品主播直播| 欧美一区二区三区思思人| 亚洲精品日韩综合观看成人91| 国产一区二区美女| 欧美一区二区视频免费观看| 亚洲品质自拍视频| 成人国产免费视频| 国产性天天综合网| 久久精品国产99久久6| 欧美日韩高清不卡| 一区二区三区四区亚洲| av不卡在线播放| 日本一区二区三区在线不卡| 蜜臀av国产精品久久久久| 99久久99久久久精品齐齐| 亚洲精品国产精华液| 国产精品538一区二区在线| xnxx国产精品| 91在线云播放| 亚洲色图20p| 欧美视频一区在线| 亚洲一区二区中文在线| 欧美性猛交xxxxxxxx| 午夜国产不卡在线观看视频| 欧美成人综合网站| 国产一区在线精品| 中文字幕不卡一区| 一本一道久久a久久精品| 亚洲sss视频在线视频| 色婷婷国产精品久久包臀|