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

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

?? hardware_8041_int.c

?? 周立功單片機Sm2300開發板的TCPIP例程 使用DM9161、KSZ8041
?? 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香蕉视频mp4| 亚洲国产精品自拍| 日韩一级在线观看| 福利视频网站一区二区三区| 1024成人网| 欧美日韩另类国产亚洲欧美一级| 香蕉影视欧美成人| 精品国产乱码91久久久久久网站| 国产精品一区免费视频| 国产精品毛片高清在线完整版| 91亚洲永久精品| 日韩在线一二三区| 国产清纯白嫩初高生在线观看91| 成人毛片视频在线观看| 亚洲一卡二卡三卡四卡五卡| 91精品欧美久久久久久动漫| 国产麻豆成人传媒免费观看| 国产精品传媒入口麻豆| 欧美日韩国产不卡| 国产精品一区二区果冻传媒| 自拍偷自拍亚洲精品播放| 欧美高清视频一二三区| 国产成人免费在线观看| 亚洲一本大道在线| 国产欧美一区二区精品性色| 欧美主播一区二区三区| 国产精品一卡二卡| 午夜一区二区三区在线观看| 欧美精品一区二| 欧洲一区二区三区在线| 国产酒店精品激情| 亚洲va韩国va欧美va| 国产欧美一区二区精品忘忧草| 欧美视频一区二区在线观看| 国产精品一色哟哟哟| 亚洲bt欧美bt精品| 亚洲色图欧美偷拍| 久久久久久久久久久久久久久99| 在线观看免费成人| 成人免费毛片高清视频| 免费成人结看片| 亚洲一区二区三区美女| 国产清纯白嫩初高生在线观看91| 9191国产精品| 欧美系列日韩一区| 99精品桃花视频在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲国产精品久久艾草纯爱| 国产欧美1区2区3区| 久久久久久久网| 91精品国产色综合久久ai换脸 | 成人黄色在线看| 免费美女久久99| 亚洲成va人在线观看| 亚洲欧洲精品一区二区三区| 久久综合九色综合97_久久久 | 欧美精品一级二级| 色呦呦网站一区| 成人av网址在线观看| 国产一区二区美女诱惑| 蜜桃在线一区二区三区| 日韩精品一二三| 午夜激情综合网| 亚洲h精品动漫在线观看| 亚洲一级在线观看| 亚洲网友自拍偷拍| 亚洲综合激情网| 亚洲成人午夜影院| 五月天激情小说综合| 一区二区国产视频| 亚洲不卡一区二区三区| 午夜婷婷国产麻豆精品| 亚洲电影第三页| 日韩经典中文字幕一区| 丝袜a∨在线一区二区三区不卡| 亚洲在线观看免费| 亚洲bt欧美bt精品| 毛片av一区二区三区| 麻豆久久久久久久| 国产精品伊人色| 成人免费毛片aaaaa**| eeuss鲁片一区二区三区| 色欧美乱欧美15图片| 91福利区一区二区三区| 欧美日韩在线播| 欧美一区二区视频观看视频| 国产精品高潮久久久久无| 综合电影一区二区三区 | 国产精品国产a级| 又紧又大又爽精品一区二区| 一区二区三区不卡视频在线观看 | 国产成人精品亚洲日本在线桃色 | bt7086福利一区国产| 91伊人久久大香线蕉| 欧美日韩一二三区| 精品国产乱码久久久久久夜甘婷婷| 久久影院午夜论| 亚洲免费在线视频| 日本vs亚洲vs韩国一区三区| 国产精品综合二区| 色女孩综合影院| 日韩亚洲欧美在线观看| 欧美国产禁国产网站cc| 一区二区三区成人| 久草中文综合在线| aaa国产一区| 日韩一区二区免费视频| 国产日韩欧美不卡| 亚洲第一福利一区| 国产v综合v亚洲欧| 欧美色综合久久| 久久精品在这里| 一区二区三区欧美激情| 激情久久五月天| 91美女福利视频| 日韩成人一区二区| 成人av网址在线| 555www色欧美视频| 综合中文字幕亚洲| 久久99精品久久久| 色视频欧美一区二区三区| 久久久久久久综合| 五月综合激情婷婷六月色窝| 国产99久久精品| 欧美一区二区三区在线观看| 成人免费一区二区三区在线观看| 日韩av网站在线观看| 色婷婷综合在线| 亚洲国产岛国毛片在线| 蜜臂av日日欢夜夜爽一区| 91官网在线观看| 国产精品国产自产拍高清av | 国产精品三级视频| 久久精品久久99精品久久| 色哟哟国产精品| 亚洲国产高清在线| 寂寞少妇一区二区三区| 欧美日韩精品欧美日韩精品 | 亚洲免费资源在线播放| 国产一区二区三区高清播放| 欧美高清视频一二三区| 亚洲免费电影在线| www.在线欧美| 久久久精品黄色| 美女精品一区二区| 欧美日韩国产一区二区三区地区| 中文字幕一区在线观看| 国产福利91精品一区| 26uuu欧美| 老色鬼精品视频在线观看播放| 欧美日本一区二区三区| 一区二区三区成人在线视频| 91污片在线观看| 中文字幕一区二区三中文字幕| 国产精品一区二区三区四区| 日韩欧美视频一区| 免费国产亚洲视频| 91精品国产aⅴ一区二区| 天天色天天操综合| 欧美高清视频一二三区 | 日韩在线a电影| 欧美亚洲国产bt| 亚洲图片欧美综合| 欧美体内she精高潮| 亚洲一区精品在线| 欧美国产日本韩| av中文字幕亚洲| 亚洲美女在线一区| 欧美怡红院视频| 亚洲成人777| 日韩美女一区二区三区| 精品一区二区在线免费观看| 久久女同互慰一区二区三区| 国产一区二区三区黄视频 | 亚洲一区成人在线| 91麻豆精品国产91久久久资源速度 | 在线一区二区三区四区| 一区二区三区在线视频免费| 91福利在线播放| 日本美女一区二区| 日韩欧美电影一区| 国产成人综合网站| 亚洲激情在线激情| 8v天堂国产在线一区二区| 蜜臀va亚洲va欧美va天堂| 久久综合久久鬼色中文字| 成人黄色大片在线观看| 一区二区三区中文在线| 欧美一区二区在线视频| 国产精品一二一区| 亚洲精品国产一区二区精华液| 欧美三级在线看| 精彩视频一区二区| 亚洲欧美一区二区三区极速播放|