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

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

?? tftpflash.c

?? arm上實現tftp源代碼
?? C
字號:
#include "ioregs.h" 
#include "cs8900.h"
#include "net.h"
#include "flash.h"
#include "put.h"

static int sdrampoint=0;			//SDRAM的地址指針
static int i,j,pktlength=0,pktcount=0;
static int tftpNo,tftpSPort=0;	//保存接收tftp數據的序號和源端口
static int packetRAM[280];		//定義幀的存儲數組 按照字從低到高排列

/******************************

	把ram中的數據寫到flash中

********************************/

void ramtoflash(int length)
{

int point=0,t=0,k;

for(t=0;t<length*2;t=t+0x20000)			//每次寫一個block
	{	
	FLASH_BYTE(t)=0x50;
	FLASH_BYTE(t)=0x20;
	FLASH_BYTE(t)=0xD0;
	while(FLASH_WORD(t)!=0x00800080);
	for(j=0;j<0x20000;j+=32)
		{
			FLASH_BYTE(t)=0x50;
			FLASH_BYTE(t)=0xE8;
			while(FLASH_WORD(t)!=0x00800080);
			FLASH_BYTE(t)=0x0F0F;
			for(k=0;k<8;k++)
				{
				FLASH_WORD(point)=RAM_WORD(point);
				point=point+4;
				}
			FLASH_BYTE(t+j)=0xD0;
			while(FLASH_WORD(t+j)!=0x00800080);
		if(point>2*length) return;
		
		}
	}	

}


/******************************

	交換高低字節

********************************/

int low2high(int i)
{
return ((i>>8)&0x00ff)+((i<<8)&0xff00);
}

/******************************

	將數據報讀取到packetRAM[]中

********************************/
/*
static void readpacket(int i)
{
		packetRAM[i]=low2high(CS8900_RTDATA);
}
*/
/******************************

	計算校驗和

	從packetRAM[start]開始
	計算len長度的和,然后把
	進位	位也加到地位,最后
	取補碼。

********************************/

int inet_chksum(int start,int len)
{
long acc=0;
for(i=0;i<len;i++)
	acc=acc+packetRAM[start+i];

// 對于本程序校驗和不會超過4個字節所以就不需要使用循環

// while(acc >> 16) {   
	acc = (acc & 0xffff) + (acc >> 16);
// }    
  return ~(acc & 0xffff);
}
/******************************

	交換 IP 地址

********************************/

void IpResp()
{
	packetRAM[ip_dst+0]=packetRAM[ip_src+0];
	packetRAM[ip_dst+1]=packetRAM[ip_src+1];

	packetRAM[ip_src]=IP12;
	packetRAM[ip_src+1]=IP34;
	
	packetRAM[ip_cksum]=0x0000;
	packetRAM[ip_cksum]=inet_chksum(ip_VerLen,10);
}

/******************************

	交換以太頭地址

********************************/

void EthResp()
{
	packetRAM[pktDest12]=packetRAM[pktSrc12];
	packetRAM[pktDest34]=packetRAM[pktSrc34];
	packetRAM[pktDest56]=packetRAM[pktSrc56];

	packetRAM[pktSrc12]=MAC12;
	packetRAM[pktSrc34]=MAC34;
	packetRAM[pktSrc56]=MAC56;

}
/******************************

	發送數據報文的函數

********************************/

void sendpacket()
{
	//寫發送命令字

	//CS8900_PP_TxCommand=0x00C0;
	CS8900_TxCMD=0x00C0;
	//寫入發送數據報文的長度

	//CS8900_PP_TxLength=packetRAM[pktLen];
	CS8900_TxLEN=packetRAM[pktLen];
	//等待線路空閑的時候發送

	while(!(get_reg(PP_BusSTAT)&PP_BusSTAT_TxRDY));

	//寫入需要發送的數據

	for(i=1;i<=packetRAM[pktLen]/2;i++)
		//CS8900_(PP_TxBASE+2*i-2)=low2high(packetRAM[i]);
		CS8900_RTDATA=low2high(packetRAM[i]);
}
/******************************

	發送tftp的ack信號

********************************/

 void tftpack()
{	
	//ack 用0004

	packetRAM[tftp_op]=tftp_opack;	

	//ack Number

	packetRAM[tftp_blk]=tftpNo;		
	
	//交換udp 端口
	
	packetRAM[u_src]=tftpARMport;
	packetRAM[u_dst]=tftpSPort;

	 //忽略校驗和
	
	packetRAM[u_cksum]=0x0000;
	
	//ack幀 是定長度的 46 個字節 
	
	packetRAM[pktLen]=46;	
	packetRAM[ip_Len]=32;
	packetRAM[u_len]=12;
	EthResp();
	IpResp();
	sendpacket();
}


void  C_vMain(void)
{

/*******************************
	
	初始化CS8900A

*********************************/
	//put_reg(PP_SelfCTL,PP_SelfCTL_Reset);	完成復位
	//while(get_reg(PP_SelfSTAT)&PP_SelfSTAT_InitD!=PP_SelfSTAT_InitD);檢查是否復位成功
	//put_reg(PP_RxCTL,PP_RxCTL_RxOK |PP_RxCTL_Broadcast|PP_RxCTL_IA);設置接收數據包,接收廣播和符合目標地址的數據包
	//put_reg(PP_RxCFG,PP_RxCFG_RxOK| PP_RxCFG_BufferCRC);接收到事件引發中斷,CRC校驗信息記入數據幀總長度
	//put_reg(PP_LineCTL,PP_LineCTL_Rx|PP_LineCTL_Tx);接收使能,發送使能,均設置能,
	//put_reg(PP_TxCFG,PP_TxCFG_TxOK);數據發送完后引發中斷
	//put_reg(PP_IA_65,MAC56_);從0158h開始寫MAC地址,MAC12_	0x2301,#define	MAC34_	0x6745,#define	MAC56_	0xAB8
	//put_reg(PP_IA_43,MAC34_);
	//put_reg(PP_IA_21,MAC12_);

/******************************

		開始接受數據

******************************/
for(;;){
	while( get_reg(PP_RER)&PP_RER_RxOK )//pp_rer為接收幀狀態寄存器,此句為檢測數據無錯接收
	{
		packetRAM[0]=get_reg(PP_RxLENGTH);//rxlength為接收長,只讀寄存器,當RXOK置位時自動生成接收幀長度,但注意包不包括CRC的長度
		//收取前面的74個字節,如果是ICMP正好包括了最后一個字符 14+20+8+32

		for (i=pktDest12;i<=23; i++)//pktDest12=1,目的地址
		{
		     readpacket(i);
				//packetRAM[i]=low2high(CS8900_RTDATA);//交換CS8900_RTDATA即為PORT0口的高低字節,PORT0在16位模式下存放CPU和8900交換的數據幀	
		}//交換是因為大小斷不一樣
		
		//檢查幀的類型 如果是 0806 表示arp

		if (packetRAM[pktType]==0x0806)//pktType 	=7	幀類型	 0800 IP	0806 ARP
		{
			//*******************************
			
			//發現ARP數據報文就開始發送RARP

			//*********************************
			

			//判斷arp是否合法
			/*	
			if (packetRAM[arp_hwtype]!=0x0001)
			return;
			if (packetRAM[arp_prtype]!=0x0800)
			return;
			if (packetRAM[arp_hwlen]!=0x0604)
			return;
			if (packetRAM[arp_op]!=0x0001)
			return;
			if (packetRAM[arp_tpa]!=IP12)
			return;
			if (packetRAM[arp_tpa+1]!=IP34)
			return;
			*/
			//判斷結束 如果沒有返回說明需要發送RARP			
			//******************************

			//		發送arp request

			//********************************

			//修改arp操作碼為rarp

			packetRAM[arp_op]=0x0002;		
			
			//交換以太Mac
			
			EthResp();						
			
			//源mac 寫到目的mac

			packetRAM[arp_tha]=packetRAM[arp_sha];
			packetRAM[arp_tha+1]=packetRAM[arp_sha+1];
			packetRAM[arp_tha+2]=packetRAM[arp_sha+2];
			
			//源ip 寫到目的ip

			packetRAM[arp_tpa]=packetRAM[arp_spa];
			packetRAM[arp_tpa+1]=packetRAM[arp_spa+1];
			
			//重寫源mac

			packetRAM[arp_sha]=MAC12;
			packetRAM[arp_sha+1]=MAC34;
			packetRAM[arp_sha+2]=MAC56;
			
			//重寫源IP

			packetRAM[arp_spa]=IP12;
			packetRAM[arp_spa+1]=IP34;
			
			//發送rarp報文

			sendpacket();
		
		}

		//如果幀的類型是 0800 表示 IP 幀

		if(packetRAM[pktType]==0x0800)
		{
			//檢查IP幀的類型 01 表示 ICMP , 11 表示UDP

			if((packetRAM[ip_proto]&0x00ff)==0x0001){
				
				//當幀的類型是 0800 表示ICMP請求

					if(packetRAM[ic_type]==0x0800){
					
						EthResp();
						IpResp();

						//改變ICMP 為 0000 表示應答

						packetRAM[ic_type]=0x0000;
						packetRAM[ic_cksum]=0x0000;
						packetRAM[ic_cksum]=inet_chksum(ip_data,20);
						sendpacket();
					}
			
				}

			if((packetRAM[ip_proto]&0x00ff)==0x0011){
				
				//判斷UDP的目的地址是否是本機地址,如果不是就不處理

				//if(packetRAM[ip_dst+1]!=IP34||packetRAM[ip_dst]!=IP12)
				//	return;
				
				//檢查目的端口是否是69 和tftpARMport
				
				if(packetRAM[u_dst]!=0x0045 && packetRAM[u_dst]!=tftpARMport)
					return;
				
				//然后檢查 tftp_op 操作碼 0002 表示寫請求 
				
				if(packetRAM[tftp_op]==0x0002)
					{
					tftpNo=0;
					tftpSPort=packetRAM[u_src];
					sdrampoint=0;pktcount=0;
					tftpack();
					}
				// tftp_op 操作碼 0003 表示數據
				if(packetRAM[tftp_op]==0x0003)
				{
					
					tftpNo=packetRAM[tftp_blk];

					//得到這一幀的長度 
					pktlength=(packetRAM[ip_Len]-32)/2;
					

					for(i=tftp_data;i<tftp_data+pktlength;i++)
					{	
						packetRAM[i]=CS8900_RTDATA&0xffff;
					//	put_char((packetRAM[i])&0x00ff);
					//	put_char((packetRAM[i]>>8)&0x00ff);
					}
					if (packetRAM[ip_Len]&0x0001==1)
					{
					packetRAM[i]=CS8900_RTDATA&0xffff;

					}

					//for(j=0;j<i-tftp_data;j+=2)	
					//{	
					//}
					//處理數據
						//將數據寫到ram中
						for(j=0;j<i-tftp_data;j+=2)	
						{
						RAM_WORD(sdrampoint)=((packetRAM[tftp_data+j+1]<<16)|packetRAM[tftp_data+j]);
						sdrampoint=sdrampoint+4;
						}
					tftpack();
					//計算文件的長度 以字為單位
					pktcount=pktcount+pktlength;

					//如果幀的數據的長度 在 0-511個字節 pktlength是字長所以和256比較 表示已經是最后一個報文就開始向flash中寫如數據
					
					if(pktlength<256)
					{
						ramtoflash(pktcount);
						put_char('!');
					}

					}
				if(packetRAM[tftp_op]==0x0005)	//清空所有的標記
					{
					sdrampoint=0;pktcount=0;
					return;
					}
			}

		}
		
		//不滿足條件就跳過這一幀
		put_reg(PP_RxCFG,PP_RxCFG_Skip1);
	}

	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人不卡免费av| 国内外精品视频| 精品国产三级a在线观看| 99国产精品久久久久久久久久| 午夜影院在线观看欧美| 亚洲国产精品成人久久综合一区| 欧美乱妇一区二区三区不卡视频| 成人免费看视频| 久久er精品视频| 亚洲一区二区三区四区在线| 国产精品污网站| 欧美本精品男人aⅴ天堂| 欧美羞羞免费网站| 成人av综合一区| 精品一区二区免费视频| 首页国产丝袜综合| 亚洲精品免费一二三区| 国产精品入口麻豆九色| 久久久精品国产免大香伊| 91精品黄色片免费大全| 欧美色爱综合网| 91欧美激情一区二区三区成人| 国产成人丝袜美腿| 国产综合成人久久大片91| 天堂成人国产精品一区| 亚洲一区二区三区在线| 亚洲人亚洲人成电影网站色| 中文在线一区二区| 国产欧美一区二区三区鸳鸯浴| 欧美大片在线观看一区| 日韩一区二区三区免费观看| 欧美精品丝袜久久久中文字幕| 在线观看日韩电影| 在线观看免费一区| 色天使久久综合网天天| 91福利区一区二区三区| 色狠狠色噜噜噜综合网| 色av成人天堂桃色av| 91麻豆精品一区二区三区| 99re热这里只有精品视频| 成人精品一区二区三区中文字幕| 国产精品自产自拍| 国产·精品毛片| 国产69精品久久久久777| 成人午夜在线视频| www.日韩在线| 91麻豆免费看片| 欧美性色黄大片| 欧美精品tushy高清| 日韩欧美成人激情| 久久蜜桃av一区精品变态类天堂 | 亚洲h动漫在线| 亚洲一区av在线| 日韩精品一区第一页| 蜜臀国产一区二区三区在线播放| 免费高清不卡av| 国产呦精品一区二区三区网站| 国产最新精品免费| 99这里只有久久精品视频| 91小视频免费观看| 在线视频观看一区| 日韩一区二区三区观看| 久久网这里都是精品| 国产精品日日摸夜夜摸av| 亚洲人成网站影音先锋播放| 亚洲国产欧美在线人成| 久久精品国产亚洲高清剧情介绍| 激情综合网天天干| av不卡一区二区三区| 欧美色涩在线第一页| 欧美成人国产一区二区| 欧美激情一区二区三区| 中文字幕在线不卡| 91捆绑美女网站| 欧美久久一区二区| 国产丝袜在线精品| 一区二区三区四区激情| 日韩成人伦理电影在线观看| 国产精品羞羞答答xxdd| 在线看日本不卡| 日韩欧美中文字幕制服| 最新日韩av在线| 蜜臀av性久久久久蜜臀av麻豆 | 欧美亚洲一区二区三区四区| 欧美一区二区国产| 中文字幕欧美激情| 午夜视频一区在线观看| 国产精一品亚洲二区在线视频| 92国产精品观看| 日韩欧美国产三级| 亚洲精品乱码久久久久久久久| 日韩成人一级片| www.99精品| 欧美成人a视频| 亚洲欧美国产毛片在线| 国产美女一区二区三区| 欧美视频在线一区| 国产精品欧美精品| 捆绑调教美女网站视频一区| 91免费视频大全| 久久这里只有精品6| 午夜欧美在线一二页| 成人丝袜18视频在线观看| 欧美一区二区三区免费在线看| 国产精品理论片在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 91麻豆国产福利在线观看| 久久综合av免费| 在线观看视频欧美| 日本一区二区三区dvd视频在线 | 国产激情视频一区二区三区欧美 | 欧美一级日韩免费不卡| 亚洲欧美国产三级| 成人一区二区三区视频| 欧美精品一区二区三区蜜臀| 亚洲第一成年网| 色综合欧美在线| 中文字幕在线一区| 国产成人免费视| 26uuu欧美日本| 毛片av一区二区| 91精品免费观看| 视频一区欧美精品| 欧美日韩国产首页在线观看| 亚洲视频免费观看| 99久久久免费精品国产一区二区| 国产婷婷精品av在线| 国产成人精品免费在线| 久久久不卡网国产精品一区| 国产尤物一区二区在线| 久久婷婷一区二区三区| 黄色小说综合网站| 久久综合色天天久久综合图片| 久久国内精品视频| 日韩亚洲欧美在线| 麻豆91在线播放免费| 欧美成人精品二区三区99精品| 免费高清成人在线| www久久久久| 国产精品亚洲午夜一区二区三区| 久久女同互慰一区二区三区| 国产精品一品二品| 中文字幕av资源一区| 久久久综合九色合综国产精品| 国产在线播精品第三| 久久精品亚洲精品国产欧美| 国产福利一区在线| 国产精品久久久99| 色综合婷婷久久| 亚洲一区二区美女| 欧美一区二区视频观看视频| 美国十次综合导航| 国产亚洲午夜高清国产拍精品| 国产.欧美.日韩| 亚洲日本欧美天堂| 6080午夜不卡| 久久福利视频一区二区| 国产日产欧美一区二区三区 | 日韩三级视频中文字幕| 精品一区在线看| 欧美激情在线一区二区三区| 99久久er热在这里只有精品15| 亚洲精选一二三| 91麻豆精品国产综合久久久久久| 久久99国产乱子伦精品免费| 国产精品无圣光一区二区| 色老汉av一区二区三区| 午夜精品在线看| 日本一区二区三区电影| 在线观看亚洲一区| 麻豆国产欧美日韩综合精品二区| 久久久精品国产99久久精品芒果| 一本大道av伊人久久综合| 日本一不卡视频| 国产精品网友自拍| 欧美日韩精品免费| 国产精品资源站在线| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲午夜日本在线观看| 精品剧情v国产在线观看在线| 国产凹凸在线观看一区二区| 一区二区三区波多野结衣在线观看| 欧美一区永久视频免费观看| 高清视频一区二区| 亚洲电影第三页| 亚洲国产精品成人综合| 777午夜精品免费视频| 丰满放荡岳乱妇91ww| 日韩精品高清不卡| 亚洲欧美综合在线精品| 日韩欧美中文字幕一区| 一本色道久久综合亚洲精品按摩 | 国产精品一色哟哟哟| 亚洲综合色视频| 国产区在线观看成人精品| 4438x亚洲最大成人网| 99国产精品久久久久久久久久久| 麻豆国产欧美一区二区三区| 一区二区三区中文免费| 国产色产综合色产在线视频|