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

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

?? nflash.c

?? D12和89s52+K9F5608組成的系統
?? C
字號:
/***********************************************************
Module Name:

         NFlash32.c
***********************************************************/
#include "reg52.h"
#include "d12config.h"
#include "D12CI.h"
#include "Chap_9.h"
#include "SCSI.h"
#include "NFLASH.h"


unsigned int idata WriteResidueVal = 0;
unsigned char idata Flash_Write_Sec = 0x00;
unsigned char idata Flash_Write_Col = 0x00;
unsigned char idata Flash_Write_addl = 0x00;
unsigned char idata Flash_Write_addh = 0x00;
unsigned long idata ReadResidueVal = 0;
unsigned char idata Flash_Read_Sec = 0x00;
unsigned char idata Flash_Read_Col = 0x00;
unsigned char idata Flash_Read_addl = 0x00;
unsigned char idata Flash_Read_addh = 0x00;
unsigned char idata Flash_Write_No = 0x00;


sbit fRB   = P1^4;
sbit fRE   = P1^5;
sbit CLE   = P3^0;
sbit ALE   = P3^1;
sbit fWE   = P3^4;
sbit fWP   = P3^5;

/********************************************************
Flash 底層讀寫操作
**********************************************************/

void fcommand(unsigned char cmd)
{
P2 = cmd;
CLE = 1;
fWE = 0;
fWE = 1;
CLE = 0;
}


void faddr(unsigned char addr)
{
P2 = addr;
ALE = 1;
fWE = 0;
fWE = 1;
ALE = 0;
}


void fwedata(unsigned char Data)
{
P2 = Data;
fWE = 0;
fWE = 1;
}



unsigned char fredata(void)
{
fRE = 0;
return P2;
fRE = 1;
}


/************************************************************
**函數功能:塊擦除函數
**函數輸入參數及說明:
  addh:高地址
  addl:低地址

**函數返回值:無
**在本函數以外定義的變量:fCOMMAND,fADD,fWPs,fWPc,fRB
**調用的函數說明:無

**修改人:胡琦宗
**修改日期:2005.12.9
**修改說明:創建
*************************************************************/
void flashErase(unsigned char addh,unsigned char addl)
{
	unsigned char i = 0;
	fWP = 1;//打開寫保護
	fcommand(0x60);//塊擦除命令
	faddr(addl);//低地址
	faddr(addh);//高地址
	fcommand(0xd0);//處理命令
	while(!fRB);
	fcommand(0x70);//讀狀態命令
	i = fredata();//讀狀態值
	fWP = 0;//寫保護
//	printf("%x,%x erase is %x",addh,addl,i);//串口打印
}
/************************************************************
**函數功能:寫FLASH預處理函數
**函數輸入參數及說明:無

**函數返回值:無
**在本函數以外定義的變量:
**調用的函數說明:無

**修改人:胡琦宗
**修改日期:2005.12.9
**修改說明:創建
*************************************************************/
void flashWritecmd(void)
{
	unsigned char idata Erase_addh,Erase_addl;
	unsigned char idata Sour_addh,Sour_addl,Dest_addh,Dest_addl;
	unsigned char idata Sour_two_addh,Sour_two_addl,Dest_two_addh,Dest_two_addl;
	unsigned int idata Erase_Count = 0,i = 0;
	unsigned int idata CopyBack_Count = 0;
	unsigned int idata CopyBack_two_count = 0;
	unsigned int idata WritePageNum = 0;
	union{
		unsigned char c[2];
		unsigned int add;
	}Start_add;
	union{
		unsigned char c[2];
		unsigned int add;
	}End_add;
	/************說明*****************
	  對于FLASH的寫操作原理是,寫之前
	  必須擦除,FLASH寫是按頁寫,但是擦
	  除是按塊擦除,1塊 = 32頁,所以在
	  一塊內只有部分頁被寫入時就需要先
	  將塊內其他頁保存,代整塊擦除后一起
	  寫入,這里用0XFA,0X00作為頭塊緩沖,
	  0XFB,0X00作為最后塊緩沖,中間塊采
	  用直接擦除處理
	**********************************/
	flashErase(0xfa, 0x00);
	Sour_addh = ControlData.dataBuffer[19];
	Sour_addl = (ControlData.dataBuffer[20]/0x20) * 0x20;
	Dest_addh = 0xfa;
	Dest_addl = (ControlData.dataBuffer[20]/0x20) * 0x20;
	CopyBack_Count = ControlData.dataBuffer[20]%0x20;
	for(i=0;i<CopyBack_Count;i++){
		flashCopyBLack(Sour_addh,Sour_addl,Dest_addh,Dest_addl);
		Sour_addl ++;
		Dest_addl ++;
	}
	Erase_addl = (ControlData.dataBuffer[20]/0x20) * 0x20;
	Erase_addh = ControlData.dataBuffer[19];
	WritePageNum = (ControlData.dataBuffer[22]<<8)+ControlData.dataBuffer[23];
	Erase_Count = WritePageNum / 0x20;
	if(WritePageNum % 0x20){
		Erase_Count ++;
		if((WritePageNum % 0x20) > (0x20 - (ControlData.dataBuffer[20] % 0x20)))
			Erase_Count ++;
	}else if(ControlData.dataBuffer[20] % 0x20){
		Erase_Count ++;
	}
	Start_add.add = (ControlData.dataBuffer[19]<<8)+ControlData.dataBuffer[20];
	End_add.add = Start_add.add + WritePageNum;
	flashErase(0xfb, 0x00);
	Sour_two_addh = End_add.c[1];
	Sour_two_addl = End_add.c[0];
	Dest_two_addh = 0xfb;
	Dest_two_addl = End_add.c[0];
	CopyBack_two_count = (Erase_Count * 0x20) - CopyBack_Count -WritePageNum;
	for(i=0;i<CopyBack_two_count;i++){
		flashCopyBLack(Sour_two_addh,Sour_two_addl,Dest_two_addh,Dest_two_addl);
		Sour_two_addl ++;
		Dest_two_addl ++;
	}
	for(i=0;i<Erase_Count;i++){
		flashErase(Erase_addh, Erase_addl);
		if(Erase_addl == 224){
			Erase_addl = 0x00;
			Erase_addh ++;
		}else
			Erase_addl += 0x20;
	}
	for(i=0;i<CopyBack_Count;i++){
		Sour_addl --;
		Dest_addl --;
		flashCopyBLack(Dest_addh,Dest_addl,Sour_addh,Sour_addl);
	}
	for(i=0;i<CopyBack_two_count;i++){
		Sour_two_addl --;
		Dest_two_addl --;
		flashCopyBLack(Dest_two_addh,Dest_two_addl,Sour_two_addh,Sour_two_addl);
	}
	Flash_Write_Sec= 0x00;
	Flash_Write_Col= 0x00;
	Flash_Write_addl= ControlData.dataBuffer[20];
	Flash_Write_addh= ControlData.dataBuffer[19];
  	WriteResidueVal=(ControlData.dataBuffer[22]<<8)+ControlData.dataBuffer[23];
 }
/************************************************************
**函數功能:寫FLASH函數
**函數輸入參數及說明:寫入數據

**函數返回值:無
**在本函數以外定義的變量:
**調用的函數說明:無

**修改人:胡琦宗
**修改日期:2005.12.9
**修改說明:創建
*************************************************************/
void flashWrite()     //需修改***
{
	unsigned int i; 
	if(WriteResidueVal > 0)
	{
	  if(Flash_Write_No == 0)
	   {
		fWP = 1;//打開寫保護
		fcommand(0x00);//從FRIST部分開始
		fcommand(0x80);//寫FLASH命令
		faddr(0x00);//從0列開始
		faddr(Flash_Write_addl);//頁地址低位
		faddr(Flash_Write_addh);//頁地址高位
	   }
		
		for(i=0;i<64;i++)//需修改***
		{
			fwedata(ControlData.dataBuffer[i]);//寫數據到FLASH指定頁里
		}
		Flash_Write_No += 64;
		
		if(Flash_Write_No == 512)
		{
		fcommand(0x10);
		while(!fRB);
		fcommand(0x70);//讀狀態值命令
	 	i = fredata;//讀狀態值		
		fWP = 0;//寫保護
		
		Flash_Write_No = 0;
		WriteResidueVal = WriteResidueVal - 1;
		if(Flash_Write_addl== 255)
			{
			Flash_Write_addl= 0x00;
			Flash_Write_addh++;
			}else
			Flash_Write_addl++;
		}
	}
}
/************************************************************
**函數功能:FLASH頁拷貝命令
**函數輸入參數及說明:
  Source_addh:源地址高位
  Source_addl:源地址低位
  Destination_addh:目的地址高位
  Destination_addl:目的地址低位

**函數返回值:無
**在本函數以外定義的變量:
**調用的函數說明:無

**修改人:胡琦宗
**修改日期:2005.12.9
**修改說明:創建
*************************************************************/
void flashCopyBLack(unsigned char Source_addh,unsigned char Source_addl,unsigned char Destination_addh,unsigned char Destination_addl)
{
	unsigned char i;
	fWP = 1;//打開寫保護
	fcommand(0x00);//頁拷貝命令
        /*源地址*/
	faddr(0x00);
	faddr(Source_addl);
	faddr(Source_addh);
	while(!fRB);
	
	fcommand(0x8a);//頁拷貝命令
	/*目的地址*/
	faddr(0x00);
	faddr(Destination_addl);
	faddr(Destination_addh);
	while(!fRB);
	
	fcommand(0x70);//讀狀態命令
	i = fredata();//讀狀態值
	fWP = 0;//寫保護
	
}
/************************************************************
**函數功能:讀FLASH預處理函數
**函數輸入參數及說明:無

**函數返回值:無
**在本函數以外定義的變量:
**調用的函數說明:無

**修改人:胡琦宗
**修改日期:2005.12.9
**修改說明:創建
*************************************************************/
void flashReadcmd(void)
{
	/****************說明************
	  對于FLASH的讀原理為:FLASH的讀
	  可以是隨機讀取,所以這里只要給
	  定讀數據的首地址和讀寫長度
	********************************/
	Flash_Read_Sec = 0x00;
	Flash_Read_Col = 0x00;
	Flash_Read_addl = ControlData.dataBuffer[20];
	Flash_Read_addh = ControlData.dataBuffer[19];
  	ReadResidueVal = (ControlData.dataBuffer[22]<<8) + ControlData.dataBuffer[23];
      	ReadResidueVal = ReadResidueVal<<9;
//	fcommand(0xff);
	while(!fRB);
}
/************************************************************
**函數功能:讀FLASH函數
**函數輸入參數及說明:無

**函數返回值:無
**在本函數以外定義的變量:
**調用的函數說明:無

**修改人:胡琦宗
**修改日期:2005.12.9
**修改說明:創建
*************************************************************/
void flashRead(void)
{
	unsigned char i;
	unsigned char  temp;
	if(ReadResidueVal > 0)
 	{
		ReadResidueVal -= 64;
		temp = (unsigned char)(Flash_Read_Col + 64);
		fcommand(Flash_Read_Sec);
		faddr(Flash_Read_Col);
		faddr(Flash_Read_addl);
		faddr(Flash_Read_addh);
		while(!fRB);
		switch (Flash_Read_Sec)
		{
			case 0x00:
				if(temp == 0)
				{
					Flash_Read_Sec = 0x01;
					Flash_Read_Col = 0x00;
				}else
				{
					Flash_Read_Col += 64;
				}
				break;
			case 0x01:
				if(temp == 0)
				{
					if(Flash_Read_addl == 255){
						Flash_Read_addl = 0x00;
						Flash_Read_addh ++;
						}else
						Flash_Read_addl ++;
					Flash_Read_Sec = 0x00;
					Flash_Read_Col = 0x00;
				}else
				{
					Flash_Read_Col += 64;
				}
				break;
		}
		for(i=0;i<64;i++)
		{
		ControlData.dataBuffer[i] = fredata();
		}
		D12_WriteEndpoint(5,64,ControlData.dataBuffer);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品免费电影| 日韩美女视频一区二区| 色一情一乱一乱一91av| 成人丝袜18视频在线观看| 国产精品伊人色| 国产精选一区二区三区| 国产伦精一区二区三区| 国产精品一二三区在线| 国产高清一区日本| 国产99一区视频免费| 成人丝袜18视频在线观看| 成人福利在线看| 欧美性极品少妇| 欧美一区二区精美| 精品伦理精品一区| 中文字幕日韩一区二区| 亚洲激情图片一区| 日本最新不卡在线| 国精品**一区二区三区在线蜜桃| 国产专区欧美精品| kk眼镜猥琐国模调教系列一区二区| 成人ar影院免费观看视频| 色综合久久中文综合久久牛| 欧美日韩你懂得| 精品久久人人做人人爽| 中文成人av在线| 午夜在线电影亚洲一区| 精一区二区三区| 99久久婷婷国产综合精品| 日本大香伊一区二区三区| 欧美久久一区二区| 久久久不卡影院| 一区二区三区精品在线| 日韩电影免费在线| 国产91色综合久久免费分享| 日本精品一级二级| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品久久久久久久浪潮网站 | 久久久99久久| 亚洲色图制服丝袜| 日韩中文字幕av电影| 国产精品自拍av| 欧美日韩二区三区| 国产精品你懂的在线欣赏| 婷婷激情综合网| av综合在线播放| 欧美成人激情免费网| 亚洲激情中文1区| 国产盗摄女厕一区二区三区| 欧美日韩大陆在线| 亚洲日穴在线视频| 精品亚洲成a人| 色婷婷久久久综合中文字幕| 久久久777精品电影网影网 | 成人av中文字幕| 日韩一区二区影院| 亚洲精品第1页| 激情图片小说一区| 91精品婷婷国产综合久久竹菊| 亚洲欧美在线视频观看| 国产一区二区福利| 亚洲精品在线电影| 麻豆久久一区二区| 欧美一区二区大片| 天堂午夜影视日韩欧美一区二区| 99视频精品在线| 亚洲国产精品av| 国产精品羞羞答答xxdd| 亚洲精品一区二区三区在线观看 | 7777精品伊人久久久大香线蕉 | 亚洲欧美在线aaa| 成人中文字幕合集| 国产喂奶挤奶一区二区三区| 激情图片小说一区| 久久免费电影网| 国产在线国偷精品免费看| 欧美刺激脚交jootjob| 日韩不卡一区二区| 日韩一区二区高清| 久久国产夜色精品鲁鲁99| 3d成人h动漫网站入口| 日本vs亚洲vs韩国一区三区二区 | 制服丝袜中文字幕亚洲| 国产欧美精品一区aⅴ影院 | 久久久久久久久99精品| 九一九一国产精品| 久久久久久久久久久黄色| 国产乱子伦视频一区二区三区| xnxx国产精品| 高清不卡一区二区| 一区二区三区四区在线| 欧美视频你懂的| 蜜桃久久久久久| 久久久另类综合| 成人国产在线观看| 亚洲国产成人91porn| 欧美一区二区三区在| 国产伦精品一区二区三区在线观看| 久久久午夜精品理论片中文字幕| 成人永久aaa| 亚洲精品日产精品乱码不卡| 欧美丰满美乳xxx高潮www| 青青草国产精品亚洲专区无| 久久综合av免费| 91久久精品国产91性色tv | 国产在线不卡视频| 国产精品国产三级国产有无不卡 | 国产亚洲欧美中文| 一本大道久久a久久精二百| 日精品一区二区| 久久久久久97三级| 欧美图区在线视频| 国产乱一区二区| 亚洲一区二区av电影| 精品国产乱码久久久久久图片| 99久久精品免费看| 麻豆精品视频在线观看| 1000部国产精品成人观看| 91精品国产丝袜白色高跟鞋| 99麻豆久久久国产精品免费优播| 天天免费综合色| 亚洲欧美日本韩国| 久久理论电影网| 欧美伦理视频网站| 色香蕉久久蜜桃| 成人免费黄色在线| 国内成+人亚洲+欧美+综合在线| 一区二区三区色| 国产精品美女久久久久久久久久久| 欧美人体做爰大胆视频| 99久久综合色| 大尺度一区二区| 国产一区免费电影| 美女视频免费一区| 三级影片在线观看欧美日韩一区二区 | 国产精品久久久久久久久果冻传媒| 欧美丰满一区二区免费视频| 在线观看亚洲一区| 色呦呦国产精品| 91麻豆免费在线观看| 岛国av在线一区| 高清久久久久久| 国产福利视频一区二区三区| 蜜桃视频在线一区| 青青草伊人久久| 青草国产精品久久久久久| 奇米888四色在线精品| 水野朝阳av一区二区三区| 亚洲大片精品永久免费| 亚洲国产一区二区三区青草影视| 亚洲视频一二区| 一区二区欧美视频| 亚洲午夜免费福利视频| 亚洲成年人影院| 日韩电影在线一区二区三区| 日韩成人dvd| 黑人精品欧美一区二区蜜桃| 精品夜夜嗨av一区二区三区| 国产一区二区精品久久| 久久电影网站中文字幕| 狠狠v欧美v日韩v亚洲ⅴ| 国产伦精品一区二区三区在线观看| 国产一区二区三区av电影 | 一区二区三区四区在线| 亚洲在线成人精品| 天天综合日日夜夜精品| 九九久久精品视频| 丁香一区二区三区| 色偷偷久久人人79超碰人人澡| 91久久精品网| 欧美成人伊人久久综合网| 国产拍欧美日韩视频二区| 国产精品大尺度| 午夜成人免费电影| 激情综合色综合久久| 92精品国产成人观看免费| 欧美日韩国产高清一区二区| 日韩精品一区二区三区在线观看 | 777奇米成人网| 久久欧美中文字幕| 亚洲人成在线播放网站岛国| 五月婷婷久久综合| 成人午夜在线免费| 精品视频一区二区不卡| 久久久亚洲精品石原莉奈| 一二三四社区欧美黄| 精品写真视频在线观看| 色婷婷综合久色| 日韩欧美一级精品久久| 国产精品久久久久久久久图文区| 亚洲一区二区三区视频在线 | 久久99精品久久久久婷婷| 成人avav影音| 精品久久久网站| 一区二区在线免费观看| 狠狠久久亚洲欧美| 欧美性生活影院| 国产精品视频第一区| 免费在线观看一区| 欧洲一区二区三区在线|