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

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

?? hardware_8041_int.c

?? ucosii下實現以太網通訊的所有服務功能。
?? 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一区二区三区高| 欧美精品色综合| 91麻豆精品在线观看| 久久99最新地址| 亚洲综合色区另类av| 美女国产一区二区| 亚洲男人的天堂在线aⅴ视频| 欧美不卡一区二区三区| 日本精品视频一区二区三区| 国产精品99久久久久久久女警| 亚洲国产cao| 国产精品免费av| 久久久久久电影| 欧美一区二区二区| 欧美性色综合网| 成人免费高清视频| 国产精品小仙女| 精品一区二区三区免费观看| 青青草97国产精品免费观看| 有码一区二区三区| 久久色中文字幕| 欧美成人一级视频| 欧美一级片免费看| 欧美性猛交xxxx乱大交退制版| 99热在这里有精品免费| 国产精品69毛片高清亚洲| 久久99热狠狠色一区二区| 蜜桃av噜噜一区二区三区小说| 亚洲电影在线免费观看| 亚洲第一会所有码转帖| 一区二区三区四区乱视频| 亚洲欧洲精品一区二区三区| 日本一区二区视频在线| 国产欧美1区2区3区| 国产午夜精品在线观看| 精品国产不卡一区二区三区| 精品国精品国产尤物美女| 日韩精品一区二区三区在线| 日韩一区二区中文字幕| 欧美一区二区三区视频免费播放 | 国产精品嫩草影院av蜜臀| 国产欧美一区二区精品性| 久久精品一区蜜桃臀影院| 精品日韩99亚洲| 久久综合五月天婷婷伊人| 精品国产一区a| 精品国产精品网麻豆系列| 久久久久久久网| 久久精品视频一区二区三区| 久久久久久久久伊人| 欧美激情一区二区三区| 国产精品毛片大码女人| 亚洲黄色免费网站| 午夜视频在线观看一区二区| 丝袜亚洲另类欧美综合| 日韩成人av影视| 国产综合一区二区| 国产精品一区二区在线播放| heyzo一本久久综合| 色婷婷香蕉在线一区二区| 欧美精品久久久久久久久老牛影院 | 青青草视频一区| 久久国产精品99久久久久久老狼 | 亚洲精品大片www| 亚洲成人免费电影| 久久99蜜桃精品| kk眼镜猥琐国模调教系列一区二区 | ㊣最新国产の精品bt伙计久久| 中文字幕va一区二区三区| 亚洲夂夂婷婷色拍ww47| 美女在线一区二区| 日韩美女主播在线视频一区二区三区| 精品国产伦一区二区三区观看体验| 久久精品夜色噜噜亚洲a∨| 一色桃子久久精品亚洲| 性感美女久久精品| 国产在线不卡一卡二卡三卡四卡| 成人午夜免费av| 欧美三级欧美一级| 欧美成人高清电影在线| 最新中文字幕一区二区三区 | 国产色91在线| 亚洲午夜一二三区视频| 久久精品国内一区二区三区| 99久久精品国产一区二区三区| 欧美日韩国产不卡| 久久精品在线观看| 丝袜亚洲另类欧美综合| 波多野结衣中文字幕一区二区三区 | 国产女同互慰高潮91漫画| 亚洲香蕉伊在人在线观| 国产真实乱对白精彩久久| 欧美专区日韩专区| 国产片一区二区| 美腿丝袜亚洲一区| 色哟哟国产精品| 国产日韩欧美综合一区| 天堂一区二区在线免费观看| 91在线视频播放| 国产亚洲成aⅴ人片在线观看| 一区二区激情小说| 大胆亚洲人体视频| 日韩欧美的一区二区| 亚洲色图另类专区| 国产成人午夜精品5599| 日韩一区二区三区视频| 一区二区国产视频| 99久久综合狠狠综合久久| 欧美一区二区三区免费视频| 亚洲福中文字幕伊人影院| 91成人免费在线| 国产精品欧美一级免费| 麻豆精品视频在线观看视频| 欧美午夜免费电影| 亚洲另类一区二区| 99久久国产综合精品女不卡| 久久精品欧美日韩| 久久超级碰视频| 日韩一区二区三区四区| 日日嗨av一区二区三区四区| 色吊一区二区三区| 亚洲手机成人高清视频| 国产福利一区在线| 久久精品视频一区二区三区| 国产一区91精品张津瑜| 欧美一级理论性理论a| 亚洲成a人在线观看| 欧洲国内综合视频| 亚洲伦理在线免费看| 91麻豆文化传媒在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品亚洲专一区二区三区 | 樱桃国产成人精品视频| 91亚洲精华国产精华精华液| 国产精品盗摄一区二区三区| av一本久道久久综合久久鬼色| 欧美激情综合网| 国产成人一级电影| 国产精品国产精品国产专区不片| 成人午夜看片网址| 综合久久久久综合| 色欧美88888久久久久久影院| 伊人色综合久久天天人手人婷| 91搞黄在线观看| 天天免费综合色| 日韩女优电影在线观看| 蜜臀av一区二区在线观看| 欧美成人福利视频| 国产99精品在线观看| 丁香亚洲综合激情啪啪综合| 国产欧美日韩综合| av网站免费线看精品| 综合欧美亚洲日本| 欧美日韩国产综合一区二区| 视频一区国产视频| 欧美一区二区三区四区在线观看| 狠狠狠色丁香婷婷综合久久五月| 久久精品视频网| 91美女在线观看| 日韩精品国产精品| xnxx国产精品| 国产成人福利片| 亚洲综合另类小说| 日韩一区二区视频在线观看| 国精产品一区一区三区mba视频| 中文字幕的久久| 欧美日韩精品欧美日韩精品一综合| 亚洲va国产天堂va久久en| 日韩精品专区在线影院观看| 国产麻豆成人精品| 亚洲在线视频一区| 精品国产髙清在线看国产毛片| 成人免费视频视频| 午夜精品在线看| 久久久久国产精品麻豆ai换脸| 99久久婷婷国产综合精品电影 | 久久久精品国产免费观看同学| 波多野结衣在线一区| 亚洲国产精品久久人人爱蜜臀 | 亚洲成av人片一区二区三区| 日韩精品一区二区三区在线播放| 成人免费高清在线| 欧美aⅴ一区二区三区视频| 国产精品成人免费精品自在线观看 | 亚洲福中文字幕伊人影院| 久久久久久久精| 欧美日韩国产另类不卡| 国产**成人网毛片九色| 视频一区二区国产| 国产精品国产三级国产aⅴ无密码| 欧美高清视频在线高清观看mv色露露十八| 国产精品夜夜嗨|