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

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

?? hardware_8041_int.c

?? 周立功開發板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一区二区三区免费野_久草精品视频
欧美午夜精品久久久久久孕妇| 色偷偷久久一区二区三区| 亚洲激情一二三区| 中文字幕巨乱亚洲| 中文字幕制服丝袜一区二区三区| 久久蜜桃av一区精品变态类天堂 | 国产精品一区二区免费不卡| 久久国产三级精品| 久久精品国产精品亚洲红杏| 国产麻豆精品95视频| 国产成人aaaa| 91久久精品一区二区三| 欧美亚洲一区二区三区四区| 日本久久电影网| 欧美日韩国产天堂| 精品裸体舞一区二区三区| www国产成人| 国产精品盗摄一区二区三区| 亚洲综合成人网| 日本在线观看不卡视频| 激情久久五月天| 不卡一区中文字幕| 欧美日韩一级片网站| 欧美一区二区三区在线视频| 2欧美一区二区三区在线观看视频| 久久久久久久久久看片| 亚洲素人一区二区| 天堂va蜜桃一区二区三区| 国产一区二区三区四| 91视频.com| 欧美成人高清电影在线| ...xxx性欧美| 久久99久久精品| 91视频在线观看| 日韩三级视频在线观看| 中文字幕乱码一区二区免费| 性做久久久久久免费观看欧美| 国产一区二区三区在线观看免费| 91蝌蚪porny九色| 精品国产一区二区三区四区四 | 在线免费av一区| 精品国产第一区二区三区观看体验| 国产精品美女久久福利网站| 午夜激情综合网| av网站免费线看精品| 日韩午夜激情免费电影| 亚洲精品美腿丝袜| 国产中文字幕精品| 91精品国产色综合久久不卡蜜臀 | 日韩精品一区二区三区在线观看| 国产精品久久久久久久久图文区| 日本亚洲最大的色成网站www| 99视频热这里只有精品免费| 精品国产一区二区三区久久久蜜月| 中文字幕一区二区三区av| 另类的小说在线视频另类成人小视频在线| 99国产精品国产精品毛片| 久久这里只有精品6| 天天色天天操综合| 一本大道久久精品懂色aⅴ| 国产欧美一区二区三区网站| 全部av―极品视觉盛宴亚洲| 欧美在线观看一二区| 国产精品久久久久久久久免费樱桃| 久久99精品久久久久久久久久久久| 欧美午夜寂寞影院| 亚洲在线观看免费| 在线精品观看国产| 一二三区精品福利视频| 91麻豆视频网站| 亚洲三级久久久| av在线不卡网| 国产精品区一区二区三区| 国产麻豆一精品一av一免费 | 在线播放91灌醉迷j高跟美女 | 欧美国产日韩一二三区| 国产一区激情在线| 久久日一线二线三线suv| 韩国成人福利片在线播放| 欧美成人三级在线| 国精产品一区一区三区mba桃花| 日韩欧美你懂的| 精品无码三级在线观看视频| 日韩欧美一二区| 国产成人综合精品三级| 国产精品美女久久久久久久久久久| 成人永久aaa| 亚洲视频一二三| 在线看日韩精品电影| 午夜久久久久久久久| 欧美一区日本一区韩国一区| 日本不卡的三区四区五区| 日韩精品一区二| 国产精品自在欧美一区| 国产精品久久久久一区二区三区共| 99久久综合色| 午夜精品影院在线观看| 日韩欧美一卡二卡| a在线欧美一区| 午夜影院久久久| 久久精品一区二区三区不卡| 99久久精品一区二区| 天天影视色香欲综合网老头| 国产亚洲综合av| 欧美性大战久久久久久久蜜臀 | 国产精品久久久久三级| 欧美三级韩国三级日本三斤| 精品在线亚洲视频| 亚洲欧美在线高清| 日韩欧美一级精品久久| 99国产精品久久久久| 麻豆精品一二三| 亚洲日本在线天堂| 精品久久久久久最新网址| 91在线国产福利| 经典三级视频一区| 亚洲一二三四久久| 欧美国产成人在线| 欧美一区二区在线视频| 91网站最新网址| 韩国女主播一区二区三区| 亚洲一区二区在线免费看| 久久久蜜桃精品| 欧美日韩高清在线| 91啪亚洲精品| 国产成人午夜电影网| 免费成人结看片| 亚洲综合精品久久| 国产精品久久毛片a| 久久久久久久综合日本| 欧美视频第二页| 色哟哟国产精品| 不卡一区中文字幕| 粉嫩一区二区三区在线看| 日本亚洲免费观看| 午夜av一区二区| 一区二区三区日韩在线观看| 国产精品国产三级国产| 国产亚洲欧美色| 精品成人私密视频| 日韩精品资源二区在线| 欧美亚洲愉拍一区二区| 91在线码无精品| 91无套直看片红桃| 色综合欧美在线| 99精品视频一区二区| 国产.欧美.日韩| 国产激情一区二区三区| 国产一区二区在线看| 久久99在线观看| 国精产品一区一区三区mba视频 | 一二三区精品福利视频| 自拍av一区二区三区| 国产精品女主播av| 国产精品视频你懂的| 国产日韩欧美一区二区三区乱码| 久久久五月婷婷| 国产视频一区不卡| 国产精品女人毛片| 欧美激情一区二区三区不卡| 国产精品美女久久久久久久久久久 | 成人黄色小视频| 成a人片亚洲日本久久| 94-欧美-setu| 欧美在线看片a免费观看| 欧美三级日韩三级| 日韩女同互慰一区二区| 久久久久久久久久电影| 综合电影一区二区三区| 亚洲香肠在线观看| 另类小说综合欧美亚洲| 国产成人精品一区二区三区四区| 国产91精品免费| 在线视频中文字幕一区二区| 欧美撒尿777hd撒尿| 精品国内二区三区| 国产精品理论在线观看| 一区二区三区波多野结衣在线观看| 亚洲aaa精品| 国产精品一卡二卡| 日本二三区不卡| 日韩欧美自拍偷拍| 亚洲欧美综合色| 日本亚洲电影天堂| 99在线精品免费| 91精品国产综合久久精品麻豆| 亚洲精品一区在线观看| ㊣最新国产の精品bt伙计久久| 亚洲一区二区三区四区五区中文| 精品无人码麻豆乱码1区2区 | 久久麻豆一区二区| 一区二区三区美女视频| 精品一区二区久久久| 91国偷自产一区二区使用方法| 91精品国产黑色紧身裤美女| 18涩涩午夜精品.www| 久久91精品久久久久久秒播| 91浏览器打开| 中文字幕精品一区二区三区精品| 亚洲chinese男男1069|