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

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

?? hardware_8041_int.c

?? 基于zlg SmartARM2300平臺的源碼
?? 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一区二区三区免费野_久草精品视频
2022国产精品视频| 欧美mv日韩mv| 成人av第一页| 国产一区二区在线电影| 亚洲国产精品尤物yw在线观看| 久久久精品免费免费| 555www色欧美视频| 国产网红主播福利一区二区| 色综合久久88色综合天天6| 精品在线观看视频| 麻豆中文一区二区| 日韩精品电影在线| 免费欧美高清视频| 久久精品久久99精品久久| 午夜精彩视频在线观看不卡| 精品亚洲aⅴ乱码一区二区三区| 日韩精品欧美精品| 日本视频一区二区三区| 日本成人在线视频网站| 激情综合色综合久久综合| 九色综合狠狠综合久久| 久久99热国产| 国产不卡高清在线观看视频| 成人三级伦理片| 99精品国产热久久91蜜凸| 一本大道av一区二区在线播放| 不卡的av中国片| 91久久奴性调教| 夜夜夜精品看看| 午夜精品一区二区三区电影天堂| 日本欧美韩国一区三区| 高清不卡在线观看av| jlzzjlzz亚洲女人18| 欧美天天综合网| 久久久精品影视| 国产精品热久久久久夜色精品三区 | 亚洲天天做日日做天天谢日日欢 | 精品国产凹凸成av人导航| 久久精品日产第一区二区三区高清版| 激情综合网激情| 91精品国产一区二区三区蜜臀| 在线播放欧美女士性生活| 国产精品久久久久久久久久免费看| 欧美a级理论片| 欧美精品亚洲二区| 日本亚洲三级在线| 高清在线成人网| 日本丶国产丶欧美色综合| 欧美另类久久久品| 天天综合天天综合色| 美腿丝袜亚洲三区| 成人av午夜影院| 91精品国产福利在线观看| 国产喂奶挤奶一区二区三区| 夜夜嗨av一区二区三区四季av| 日韩成人一级大片| 99久久婷婷国产| 日韩欧美精品在线| 亚洲成av人在线观看| 国产成人在线影院| 欧美成人艳星乳罩| 亚洲国产日韩精品| 成人av中文字幕| 69成人精品免费视频| 亚洲综合图片区| 欧美体内she精高潮| 亚洲欧美日韩久久| 精品视频在线免费| 日韩国产欧美三级| 91精品国产91久久久久久最新毛片| 亚洲v日本v欧美v久久精品| 91福利国产精品| 日本不卡1234视频| 日韩精品一区二区三区三区免费 | 免费人成网站在线观看欧美高清| 日本丰满少妇一区二区三区| 亚洲国产视频a| 这里只有精品免费| 国产乱码精品1区2区3区| 亚洲国产成人私人影院tom| 成人亚洲一区二区一| 一区二区三区四区在线| 91精品久久久久久久99蜜桃| 国产成人综合网| 亚洲综合一区在线| 欧美在线观看一区二区| 欧美日韩成人在线| 国产精品 欧美精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区三区小说| 国产精品久久三区| 中文文精品字幕一区二区| 久久久久久99精品| 欧美日韩国产乱码电影| 国产 日韩 欧美大片| 天天操天天干天天综合网| 亚洲四区在线观看| 26uuu另类欧美亚洲曰本| 欧美日韩国产乱码电影| 91在线视频官网| 国产美女精品人人做人人爽 | 日韩欧美国产一二三区| 成人综合在线视频| 国产在线播放一区三区四| 午夜私人影院久久久久| 亚洲欧美日韩国产综合| 亚洲日本在线视频观看| 国产精品久久综合| 国产欧美精品一区| 久久影院午夜论| 久久综合色之久久综合| 日韩精品一区二区三区老鸭窝 | 亚洲妇熟xx妇色黄| 亚洲男人的天堂在线观看| 亚洲国产成人午夜在线一区 | 4438成人网| 欧美三级一区二区| 欧美日韩久久久久久| 欧美色爱综合网| 欧美网站一区二区| 欧美一级日韩免费不卡| 在线播放日韩导航| 久久综合九色综合97婷婷女人| 精品国精品国产尤物美女| 久久影视一区二区| 1区2区3区欧美| 一区二区三国产精华液| 一区二区三区在线不卡| 婷婷亚洲久悠悠色悠在线播放| 日本成人在线视频网站| 高清视频一区二区| 欧美性做爰猛烈叫床潮| 欧美成人国产一区二区| 国产女人水真多18毛片18精品视频| 国产欧美一区二区三区网站 | 一区二区免费在线| 日韩av午夜在线观看| 成人一区二区三区| 日韩欧美国产不卡| 日韩精品亚洲专区| 91福利视频在线| 日本一区二区高清| 韩国精品免费视频| 欧美一区二区三区在线观看视频| 一区二区三区色| 91麻豆高清视频| 日本一区二区三区在线观看| 洋洋av久久久久久久一区| 不卡av电影在线播放| av网站一区二区三区| 欧美一区二区三区在线视频| 久久蜜臀精品av| 一区二区三区精品| 国产一区二区三区最好精华液| 91免费国产在线| 国产欧美一区二区精品秋霞影院| 国产精品色呦呦| 精品一二三四在线| 欧美二区三区的天堂| 亚洲欧美日韩一区| 国产成人av一区| 精品国产区一区| 老司机免费视频一区二区三区| 欧美唯美清纯偷拍| 亚洲一区中文日韩| 色偷偷一区二区三区| 久久精品亚洲精品国产欧美| 日本亚洲三级在线| 91精品国产91热久久久做人人| 亚洲精品日韩一| 欧美日韩国产美女| 日本免费新一区视频| 日韩美女一区二区三区四区| 日韩在线卡一卡二| 欧美一区二区视频在线观看| 婷婷国产v国产偷v亚洲高清| 欧美视频一区二| 蜜桃av一区二区在线观看| 欧美va在线播放| 丰满亚洲少妇av| 亚洲少妇30p| 在线看日本不卡| 日本视频中文字幕一区二区三区| 日韩三级免费观看| 成人深夜视频在线观看| 亚洲视频免费看| 欧美一区二区黄| 成人aa视频在线观看| 亚洲一区二区三区国产| 制服丝袜亚洲网站| 福利一区二区在线| 午夜精品福利一区二区三区蜜桃| 欧美蜜桃一区二区三区| 国产激情一区二区三区| 亚洲欧美视频在线观看视频| 宅男在线国产精品| 91免费在线看| 精彩视频一区二区| 一卡二卡三卡日韩欧美| 精品精品欲导航|