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

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

?? hardware_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一区二区三区免费野_久草精品视频
成人激情文学综合网| 九色porny丨国产精品| 香蕉成人啪国产精品视频综合网 | 国产精品乡下勾搭老头1| 91国在线观看| 中文字幕精品三区| 青青草97国产精品免费观看 | 国产精品―色哟哟| 蜜桃视频在线一区| 在线观看欧美日本| 中文字幕乱码日本亚洲一区二区 | 成人国产精品免费观看视频| 欧美精品久久一区| 亚洲精品老司机| 国产精品456露脸| 日韩欧美三级在线| 亚洲444eee在线观看| 在线精品视频免费播放| 国产精品成人免费精品自在线观看 | 国产视频一区二区在线观看| 舔着乳尖日韩一区| 欧美在线看片a免费观看| 91香蕉视频污| 精品一区免费av| www成人在线观看| 欧美肥妇free| 日韩理论电影院| 国产成人精品免费网站| 日韩美女视频在线| 日韩电影在线观看电影| 欧美日韩精品一区二区三区四区 | 国产精品夜夜爽| 国产欧美日本一区二区三区| 奇米色一区二区三区四区| 欧美久久久久久久久久| 亚洲成人精品一区| 欧美美女一区二区三区| 五月天视频一区| 3d成人h动漫网站入口| 日韩av一区二区三区| 欧美日韩国产小视频在线观看| 亚洲综合激情另类小说区| 欧美日韩在线播放| 欧美中文字幕一区| 亚洲成人资源网| 91精品国产综合久久久蜜臀图片| 婷婷综合五月天| 精品日韩在线一区| 国产91精品在线观看| 国产精品毛片a∨一区二区三区| 波多野结衣的一区二区三区| 亚洲日本欧美天堂| 欧美丰满美乳xxx高潮www| 久久国产成人午夜av影院| 国产偷国产偷亚洲高清人白洁| 99麻豆久久久国产精品免费| 亚洲美腿欧美偷拍| 91精品国产综合久久福利 | 日韩精品资源二区在线| 国产精品18久久久久| 中文字幕亚洲一区二区av在线| 色悠悠久久综合| 美女视频黄 久久| 中文字幕乱码亚洲精品一区| 欧美三级日韩三级| 国产精品91xxx| 亚洲6080在线| 国产精品国产三级国产a| 欧美日韩一二三| 国产成人av影院| 日韩成人一级片| 最新热久久免费视频| 日韩欧美区一区二| 色婷婷激情综合| 日韩精品自拍偷拍| 国产精品入口麻豆原神| 在线日韩av片| 国产乱子伦一区二区三区国色天香| 国产精品青草久久| 日韩亚洲欧美一区| 99riav一区二区三区| 老鸭窝一区二区久久精品| 亚洲欧洲日韩在线| 日韩免费视频一区| 欧美亚洲国产一区二区三区| 国产精品一二三区在线| 首页亚洲欧美制服丝腿| 国产精品素人一区二区| 制服.丝袜.亚洲.另类.中文| 99久久国产免费看| 国产高清视频一区| 日韩中文字幕不卡| 一区二区三区成人在线视频| 久久久不卡影院| 日韩精品一区在线| 欧美精品在线视频| 色婷婷综合久久久中文字幕| 国产夫妻精品视频| 国产激情视频一区二区三区欧美 | 美女一区二区三区| 中文字幕在线一区| 国产婷婷一区二区| wwwwww.欧美系列| 精品日韩在线一区| 日韩视频一区二区三区 | 日韩福利视频网| 亚洲一区二区中文在线| 亚洲特黄一级片| |精品福利一区二区三区| 国产精品毛片高清在线完整版| 日本一区二区三区四区在线视频| 国产精品成人免费在线| 国产精品美女久久久久av爽李琼| 国产色综合一区| 久久精品无码一区二区三区| 26uuu亚洲婷婷狠狠天堂| 亚洲精品一区二区精华| 精品国产一区二区三区四区四| 欧美成人一区二区| 久久亚洲一级片| 国产午夜精品理论片a级大结局| 亚洲精品一线二线三线| 久久色在线视频| 国产精品欧美精品| 成人欧美一区二区三区白人 | 91香蕉视频黄| 在线看不卡av| 欧美日韩国产高清一区二区三区| 欧美一区二区精品| 91精品国产福利在线观看| 欧美亚洲日本一区| 在线观看一区二区视频| 91国产免费看| 久久国产人妖系列| 极品少妇一区二区| 国产精品1区2区| 91捆绑美女网站| 欧美在线观看一区二区| 日韩欧美一级二级三级| 国产性色一区二区| 亚洲免费观看高清| 日本美女一区二区| 粉嫩av一区二区三区| 色欧美日韩亚洲| 日韩精品中文字幕一区 | 亚洲色图清纯唯美| 婷婷开心激情综合| 国产成人午夜视频| 欧美伊人久久大香线蕉综合69| 欧美一区二区三区系列电影| 国产网红主播福利一区二区| 在线电影院国产精品| 久久久精品国产99久久精品芒果| 亚洲精品日日夜夜| 另类小说欧美激情| 91免费观看在线| 26uuu国产一区二区三区| 亚洲精品免费在线| 久久国产视频网| 91丨porny丨最新| 欧美刺激脚交jootjob| ...av二区三区久久精品| 蜜臀va亚洲va欧美va天堂| 成人av先锋影音| 日韩免费福利电影在线观看| 亚洲视频免费在线| 国模无码大尺度一区二区三区| 在线欧美日韩精品| 中文字幕精品一区二区精品绿巨人 | 精品无码三级在线观看视频| 欧美一区二区日韩| 中文字幕在线不卡| 捆绑调教一区二区三区| 日本精品一区二区三区四区的功能| 精品处破学生在线二十三| 亚洲午夜免费视频| 成人免费高清视频在线观看| 777午夜精品视频在线播放| 国产精品国产成人国产三级| 麻豆91精品91久久久的内涵| 日本高清成人免费播放| 国产精品乱码一区二三区小蝌蚪| 喷水一区二区三区| 欧美精品日韩精品| 亚洲影院在线观看| 色94色欧美sute亚洲线路一久| 国产精品少妇自拍| 国产美女在线观看一区| 日韩免费福利电影在线观看| 婷婷成人激情在线网| 欧美日韩久久久一区| 亚洲国产成人av| 欧美日韩一区二区电影| 一区二区三区在线视频观看58| 99re66热这里只有精品3直播| 欧美激情艳妇裸体舞| 成人性生交大片免费| 欧美国产精品中文字幕| 成人激情视频网站| 一区在线播放视频|