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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rtl8019.c

?? ARM入門常用模塊代碼 這些程序必須使用“ARM SDT(ARM Software Development Kit)”、“ARM ADS(ARM Developer Suite)”等集成開發(fā)環(huán)境進(jìn)行
?? C
字號:
#include "GloblDef.h"
#include "MMenage.h"
#include "RTL8019.h"

extern BYTE MemAllocation(WORD size);
extern void FreePage(BYTE page);
extern BYTE xdata *MemPageToPoint(BYTE page);
extern BYTE WriteQueue(BYTE page,struct Queue xdata * pQueue);

BYTE xdata LocalMACAddr[6]={0x52,0x54,0x4c,0x30,0x2e,0x2f};
struct Queue xdata QueueNetPacketIn;
BYTE StartPageOfPacket;
										/* 接收頭文件信息 */
struct RTLReceiveHeader
{
	BYTE ReceiveStatus;
	BYTE NextPacketStartPage;
	BYTE PacketSizeLow;
	BYTE PacketSizeHigh;
}Head; Head 須為全局變量. 
BYTE xdata Head[4]; 

										/* 上一次傳輸起始頁*/
BYTE LastSendStartPage;

sbit RTLResetPin = RTL_RESET_PIN;

								/* 讀rtl8019 寄存器端口*/
BYTE ReadReg(WORD port) 
{
	BYTE xdata * p;
	p = (BYTE xdata *)port;
	return *p;
}
																/* 寫寄存器*/
void WriteReg(WORD port,BYTE value) 
{
	BYTE xdata * p;
	p = (BYTE xdata *)port;
	*p = value;
}
													/* 選擇寄存器頁使用*/
void RTLPage(BYTE Index) 
{
										/* 設(shè)置 CR, CR_TXP 7-6位為 0(為 1 ,包重傳) */
	BYTE temp;
	temp = ReadReg(CR);
	temp = temp & 0x3B;					/*set 7-6 and 3 bit to 0*/
	Index = Index<<6;
	temp = temp | Index;
	WriteReg(CR,temp);
}
														/* PRA 為物理地址 */
void RTLInitial()
{
	BYTE temp;
	int i;
	
														/* 硬件重啟 */
	RTLResetPin = 1;
	for(i = 0;i<255;i++);
	RTLResetPin = 0;
											/* 如果硬件重啟時延很大, rtl自我初始化 */
	for(i=0;i<DELAY_AFTER_HARDWARE_RESET;i++);	
	
															/* 寫重啟口 */
	temp = ReadReg(RESET_PORT);
	WriteReg(RESET_PORT,temp);
	
															/* 初始化RTL 寄存器*/
	WriteReg(CR,(CR_PAGE0 | CR_ABORT_COMPLETE_DMA | CR_STOP_COMMAND)); 
													/* 設(shè)置page0, stop command */

	WriteReg(PSTART_WPAGE0,	RECEIVE_START_PAGE);			/* Pstart	*/
	WriteReg(PSTOP_WPAGE0,	RECEIVE_STOP_PAGE);			/* Pstop	*/
	WriteReg(BNRY_WPAGE0,		RECEIVE_START_PAGE);		/* BNRY		*/
	WriteReg(TPSR_WPAGE0,		SEND_START_PAGE0);		/* TPSR		*/

	WriteReg(RCR_WPAGE0,		0xCE);	 /*RCR: 在Rtl8019as.h定義 */
	WriteReg(TCR_WPAGE0,		0xE0);	/* TCR: 在Rtl8019as.h定義*/
	WriteReg(DCR_WPAGE0,		0xC8);	/* DCR: 在Rtl8019as.h定義*/

	WriteReg(IMR_WPAGE0,0);	     		 /* RTL 接收中斷使能 */
	WriteReg(ISR_WPAGE0,		0xFF);	/* 寫FF 清除所有中斷標(biāo)志*/

	RTLPage(1);

	WriteReg(CURR_WPAGE1,RECEIVE_START_PAGE + 1);	
	
													/* MAR0 */
	WriteReg(0x08,0x00);	
	WriteReg(0x09,0x41);
	WriteReg(0x0a,0x00);
	WriteReg(0x0b,0x80);
	WriteReg(0x0c,0x00);
	WriteReg(0x0d,0x00);
	WriteReg(0x0e,0x00);
	WriteReg(0x0f,0x00)
													/* 設(shè)置物理地址*/
	WriteReg(PRA0_WPAGE1,LocalMACAddr[0]);
	WriteReg(PRA1_WPAGE1,LocalMACAddr[1]);
	WriteReg(PRA2_WPAGE1,LocalMACAddr[2]);
	WriteReg(PRA3_WPAGE1,LocalMACAddr[3]);
	WriteReg(PRA4_WPAGE1,LocalMACAddr[4]);
	WriteReg(PRA5_WPAGE1,LocalMACAddr[5]);
													/* 傳輸起始頁*/
	LastSendStartPage = SEND_START_PAGE0;
	StartPageOfPacket = RECEIVE_START_PAGE + 1;
															/* 初始化結(jié)束 */
	WriteReg(CR,(CR_PAGE0 | CR_ABORT_COMPLETE_DMA | CR_STOP_COMMAND));
}
													/* 寫 buffer 到 rlt ram */
void RTLWriteRam(WORD address, WORD size, BYTE xdata * buff)
{
	WORD i;
	BYTE PrePage;	/* store page */
	PrePage = ReadReg(CR);
	RTLPage(0);
	WriteReg(RSARH_WPAGE0,(BYTE)((address>>8)&0x00ff));
	WriteReg(RSARL_WPAGE0,(BYTE)address);
	WriteReg(RBCRH_WPAGE0,(BYTE)((size>>8)&0x00ff));
	WriteReg(RBCRL_WPAGE0,(BYTE)size);
	WriteReg(CR,(0x00 | CR_REMOTE_WRITE | CR_START_COMMAND));
	for(i=0;i<size;i++)
	{
		WriteReg(REMOTE_DMA_PORT,buff[i]);
	}
														/* 完成dma */
	WriteReg(RBCRH_WPAGE0,0);
	WriteReg(RBCRL_WPAGE0,0);
	WriteReg(CR,((PrePage&0xC0) | CR_ABORT_COMPLETE_DMA | CR_START_COMMAND));
}
									/* 讀rlt ram 數(shù)據(jù)到 buffer */
void RTLReadRam(WORD address,WORD size,BYTE xdata * buff)
{
	WORD i;
	BYTE PrePage;									/* 存儲頁 */
	
	PrePage = ReadReg(CR);
	RTLPage(0);
	WriteReg(RSARH_WPAGE0,(BYTE)((address>>8)&0x00ff));
	WriteReg(RSARL_WPAGE0,(BYTE)address);
	WriteReg(RBCRH_WPAGE0,(BYTE)((size>>8)&0x00ff));
	WriteReg(RBCRL_WPAGE0,(BYTE)size);
	WriteReg(CR,(0x00 | CR_REMOTE_READ | CR_START_COMMAND));
	for(i=0;i<size;i++)
	{
		buff[i] = ReadReg(REMOTE_DMA_PORT);
	}
														/* 完成dma */	WriteReg(RBCRH_WPAGE0,0);
	WriteReg(RBCRL_WPAGE0,0);
	WriteReg(CR,((PrePage&0xC0) | CR_ABORT_COMPLETE_DMA | CR_START_COMMAND));
}

BYTE RTLSendPacket(BYTE xdata * buffer,WORD size)
{
	BYTE StartPage;
														/* 存儲頁 */
	BYTE PrePage;	
	PrePage = ReadReg(CR);
														/* 檢查包大小*/
	if(size < MIN_PACKET_SIZE || size > MAX_PACKET_SIZE)
		return FALSE;
														/* 寫包到ram */
	if(LastSendStartPage == SEND_START_PAGE0)
	{
		StartPage = SEND_START_PAGE1;
		LastSendStartPage = SEND_START_PAGE1;
	}
	else
	{
		StartPage = SEND_START_PAGE0;
		LastSendStartPage = SEND_START_PAGE0;
	}
	RTLWriteRam(((WORD)StartPage)<<8,size,buffer);
														/* 等待上一次傳輸結(jié)束*/
	while((ReadReg(CR) & CR_TXP) == CR_TXP);
														/* 寫傳輸起始頁和大小*/
	RTLPage(0);
	WriteReg(TPSR_WPAGE0,StartPage);					/* TPSR */		
	WriteReg(TBCRL_WPAGE0,(BYTE)size);					/*low */	
	WriteReg(TBCRH_WPAGE0,(BYTE)((size>>8)&0x00ff));	/*high*/
	WriteReg(CR,((PrePage&0xC0) | CR_ABORT_COMPLETE_DMA | CR_TXP | CR_START_COMMAND));		
	return TRUE;
}

void RTLReceivePacket() 
{
	BYTE curr,bnry;
	WORD address;
	WORD PacketSize;
	BYTE MemPage;
	struct MemHeader xdata *pMemHead;

	RTLPage(1);
	curr = ReadReg(CURR_RPAGE1);
	RTLPage(0);

														/*在接收緩存中讀所有包*/
	while(TRUE)
	{	
														/* 檢驗(yàn)起始頁是否未知錯誤*/
		if(StartPageOfPacket >= RECEIVE_STOP_PAGE || StartPageOfPacket < RECEIVE_START_PAGE)
		{
												/* 用curr作為 StartPageOfPacket */
			StartPageOfPacket = curr;
			break;
		}
															/*檢查是否有包讀到 */
		if(StartPageOfPacket == curr)
			break;
																/*讀一個包 */
																/* 讀包頭信息 */
		address = ((WORD)StartPageOfPacket)<<8;
		RTLReadRam(address,4,Head);
	
																/* 校驗(yàn)rsr */
		if(Head[0] & RSR_RECEIVE_NO_ERROR)
		{
																	/*好包 */
																/* 得到MAC校驗(yàn)和*/
			PacketSize = ((WORD)Head[3])*256 + Head[2] - 4;	
													/* 分配 buffer , 讀包到 buffer */
			MemPage = MemAllocation(PacketSize);
			if(MemPage != PAGE_NOT_FOUND)
			{	
				pMemHead = (struct MemHeader xdata *)MemPageToPoint(MemPage);
				pMemHead->StartPos = (BYTE xdata *)pMemHead + sizeof(struct MemHeader);	
																/* pos起始有效地址 */
				pMemHead->StopPos = pMemHead->StopPos + PacketSize;	
																	/* 停止pos */
				
				address += 4;
				if(StartPageOfPacket > Head[1] && Head[1] != RECEIVE_START_PAGE)
				{
					RTLReadRam(address,(((WORD)RECEIVE_STOP_PAGE)<<8) - address,pMemHead->StartPos);											/* 讀rtl */
					RTLReadRam(((WORD)RECEIVE_START_PAGE)<<8,PacketSize - ((((WORD)RECEIVE_STOP_PAGE)<<8) - address),
						pMemHead->StartPos + ((((WORD)RECEIVE_STOP_PAGE)<<8) - address));																	/* 讀rtl */
				}
				else
				{
					RTLReadRam(address,PacketSize,pMemHead->StartPos);	
											/					* 讀rtl */
				}
				if(WriteQueue(MemPage,&QueueNetPacketIn) == PAGE_NOT_FOUND)																	/* 寫到對列 */
				{
																/* 對列滿 */
					#ifdef 	DEBUG
					printf("\n-------queue full-------");
					#endif
					FreePage(MemPage);
					break;
				}
			}
			else
			{
																/* 結(jié)束 */
				#ifdef 	DEBUG
				printf("\n-------mem over-------");
				#endif
				break;
			}
		}
		
															/* 得到下一包的起始頁 */
		StartPageOfPacket = Head[1];
	}

																/* 重置 bnry */
	bnry = StartPageOfPacket - 1;
	if(bnry < RECEIVE_START_PAGE)
		bnry = RECEIVE_STOP_PAGE - 1;
	WriteReg(BNRY_WPAGE0,bnry);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美图区在线视频| 91九色最新地址| 色综合视频在线观看| 欧美喷潮久久久xxxxx| 欧美国产欧美综合| 日韩在线一区二区三区| 不卡的av电影在线观看| 91精品国产一区二区| 亚洲免费观看高清完整| 狠狠色丁香久久婷婷综| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 26uuu国产日韩综合| 亚洲第一会所有码转帖| 99久久久免费精品国产一区二区| 欧美一区二区三区四区高清 | 丰满放荡岳乱妇91ww| 欧美丰满少妇xxxxx高潮对白| 国产精品女上位| 精品一区二区三区香蕉蜜桃| 欧美色精品在线视频| 最新国产精品久久精品| 国产综合久久久久久久久久久久| 欧美男女性生活在线直播观看| 亚洲人妖av一区二区| 国产成人激情av| 欧美精品一区二区在线观看| 日本不卡在线视频| 91麻豆精品国产无毒不卡在线观看| 一区二区三区在线视频免费| 99re这里只有精品视频首页| 亚洲视频在线观看三级| 波多野结衣亚洲| 国产精品久久99| 成人精品免费网站| 中文字幕va一区二区三区| 国产不卡视频一区| 中文字幕av资源一区| 99久久99久久精品免费看蜜桃| 国产精品日日摸夜夜摸av| 成人美女在线观看| ...av二区三区久久精品| 成人激情综合网站| 亚洲欧美另类久久久精品| 91在线观看成人| 亚洲国产视频a| 欧美一卡2卡三卡4卡5免费| 毛片av中文字幕一区二区| 精品国产乱码久久久久久闺蜜| 国产在线精品一区二区夜色| 日本一区二区三级电影在线观看 | 国产欧美日韩亚州综合| 成人一级片在线观看| 亚洲人成网站在线| 欧美日韩国产不卡| 久久精品国产亚洲高清剧情介绍| 2020日本不卡一区二区视频| 99久久精品国产精品久久| 午夜精品福利视频网站| 日韩精品一区二区在线| 北条麻妃一区二区三区| 亚洲国产毛片aaaaa无费看| 精品国产免费一区二区三区四区| 国产精品一区二区三区99| 亚洲三级免费观看| 日韩精品中文字幕一区二区三区 | 欧美理论电影在线| 久久99精品久久久久久动态图| 国产精品私人自拍| 欧美日韩国产精品成人| 国产一区二区三区免费播放| 亚洲欧美成aⅴ人在线观看| 91精品欧美一区二区三区综合在 | 欧美日韩一区二区三区四区五区| 久久成人免费网| 亚洲欧美色图小说| 精品乱人伦一区二区三区| 97久久超碰国产精品电影| 免费视频一区二区| 亚洲欧美一区二区三区极速播放| 91精品综合久久久久久| 从欧美一区二区三区| 亚洲成人免费观看| 国产精品美女久久久久久久久久久| 欧美日韩另类一区| 成人网在线播放| 美腿丝袜亚洲综合| 一区二区三区日韩精品视频| 久久久亚洲午夜电影| 欧美顶级少妇做爰| 91免费视频大全| 国产精品一区专区| 免费成人美女在线观看.| 一区二区三区成人| 国产精品对白交换视频 | 国产成人8x视频一区二区| 香港成人在线视频| 亚洲精品久久久蜜桃| 久久久91精品国产一区二区三区| 欧美电影影音先锋| 色婷婷久久久综合中文字幕| 国产91精品露脸国语对白| 裸体在线国模精品偷拍| 香蕉久久夜色精品国产使用方法 | 麻豆国产91在线播放| 亚洲大片免费看| 夜夜嗨av一区二区三区| 亚洲人午夜精品天堂一二香蕉| 国产精品美女久久久久久久久| 久久九九久久九九| 欧美精品一区二区高清在线观看 | 奇米影视一区二区三区小说| 亚洲一区二区免费视频| 亚洲欧美韩国综合色| 最近中文字幕一区二区三区| 国产精品美女久久福利网站| 久久久久久久久久久久电影 | 国产精品一区免费视频| 韩国一区二区三区| 国产老妇另类xxxxx| 国产精品18久久久久久久网站| 全部av―极品视觉盛宴亚洲| 日韩成人精品在线观看| 日韩精品电影在线| 乱中年女人伦av一区二区| 国产一区视频网站| 国产精品综合在线视频| 丁香婷婷综合网| 97国产一区二区| 欧美在线一区二区三区| 欧美久久一二区| 日韩一区二区电影网| 久久综合九色欧美综合狠狠| 久久女同精品一区二区| 中文字幕不卡在线观看| 一区二区国产盗摄色噜噜| 三级久久三级久久久| 国产做a爰片久久毛片| av不卡在线播放| 欧美日韩成人激情| 久久一留热品黄| 专区另类欧美日韩| 日韩福利电影在线| 国产不卡视频在线播放| 色婷婷综合中文久久一本| 欧美精品少妇一区二区三区| www国产亚洲精品久久麻豆| 中文字幕日本不卡| 免费观看一级欧美片| 国产成人aaa| 欧美电影影音先锋| 国产精品久久久久久久久果冻传媒 | 日本亚洲电影天堂| 国内精品写真在线观看| 91偷拍与自偷拍精品| 日韩一区二区三区四区| 中文字幕一区二区三中文字幕| 日韩中文字幕麻豆| 99天天综合性| 日韩欧美色电影| 亚洲激情图片小说视频| 韩国女主播成人在线| 欧美日韩一区在线| 国产精品美日韩| 久久99精品视频| 欧美日韩久久不卡| 日韩理论片在线| 国产成人综合在线| 日韩欧美在线网站| 亚洲成av人片在www色猫咪| 波多野洁衣一区| 久久精品在这里| 男男成人高潮片免费网站| 91成人免费在线视频| 国产精品情趣视频| 麻豆精品在线观看| 国产毛片精品视频| 日本人妖一区二区| 欧美羞羞免费网站| 国产午夜精品久久| 国产麻豆视频精品| 欧美三级电影在线观看| 国产无一区二区| 国产麻豆精品在线| 欧美猛男gaygay网站| 国产精品短视频| 精品一区二区三区久久| 欧美网站一区二区| 国产精品久久三区| 一区二区在线电影| 色噜噜狠狠色综合中国| 国产无遮挡一区二区三区毛片日本| 日韩一区精品视频| 在线不卡一区二区| 亚洲女子a中天字幕| 大桥未久av一区二区三区中文| 日本一区二区三区久久久久久久久不| 麻豆视频一区二区| 欧美日韩免费在线视频| 一区二区三区日韩在线观看| 成人动漫一区二区三区|