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

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

?? flash.c

?? uCos-ii 2.86 在C8051F410單片機上移植成功!!! 其中包括:UART驅動
?? C
字號:

#include <c8051f120.h>         // SFR declarations
#include "flash.h"

#define LOG_START 0x04000L     // Starting address of LOG
#define LOG_END   0x1F800L     // Last address in LOG + 1
#define RECORD_LEN 8           // Record length in bytes

#define FLASH_PAGESIZE 1024    // Number of bytes in each FLASH page

#define COBANK  0xF0           // Bit mask for the high nibble of PSBANK
#define COBANK0 0x00           // These macros define the bit mask values
#define COBANK1 0x10           // for the PSBANK register used for
#define COBANK2 0x20           // selecting COBANK. COBANK should always
#define COBANK3 0x30           // be cleared then OR-Equaled (|=) with
                               // the proper bit mask to avoid changing
                               // the other bits in the PSBANK register


typedef union ULong {          // Byte addressable unsigned long
	unsigned long ULong;
	unsigned int Int[2];
	unsigned char Char[4];
} ULong;


// FLASH support routines
void FLASH_PageErase (unsigned long addr,char select);
void FLASH_Write (unsigned long dest, char* src, unsigned int numbytes,char select);
void FLASH_ByteWrite (unsigned long dest, char dat,char select);
void FLASH_Read ( char* dest, unsigned long src, unsigned int numbytes,char select);
unsigned char FLASH_ByteRead (unsigned long addr,char select);




/****************************************************************************	
* 功    能:This function erases the FLASH page containing <addr>.
*---------------------------------------------------------------------------*
* 入口參數:addr:  flash 地址   
*           select:flash 模式選擇: 0-->BANK_FLASH;1-->TEMP_FLASH.                     						 											                       
* 出口參數:nill
****************************************************************************/

void FLASH_PageErase (unsigned long addr,char select)
{
		char SFRPAGE_SAVE = SFRPAGE;  // Preserve current SFR page
		char PSBANK_SAVE = PSBANK;    // Preserve current code bank
		unsigned char  EA_SAVE = EA;            // Preserve interrupt state

		ULong temp_addr;             // Temporary ULong
		char xdata * idata pwrite;   // FLASH write/erase pointer

		temp_addr.ULong = addr;     // copy <addr> to a byte addressable
		                            // unsigned long

		// Extract address information from <addr>
		pwrite = (char xdata *) temp_addr.Int[1];

		// Extract code bank information from <addr>
		PSBANK &= ~COBANK;                 // Clear the COBANK bits


		if( temp_addr.Char[1] == 0x00){    // If the address is less than
		                                   // 0x10000, the Common area and
		PSBANK |= COBANK1;                 // Bank1 provide a 64KB linear
		                                   // address space
		} else {                           // Else, Bank2 and Bank3 provide
		                                   // a 64KB linear address space
		
				if (temp_addr.Char[2] & 0x80){     // If bit 15 of the address is
				                                   // a ‘1’, then the operation should
				    PSBANK |= COBANK3;             // target Bank3, else target Bank2

				} else {

				    PSBANK |= COBANK2;
				    temp_addr.Char[2] |= 0x80;
				    pwrite = (char xdata *) temp_addr.Int[1];
				}
		}

		SFRPAGE = LEGACY_PAGE;

		EA = 0; 									 // Disable interrupts
		  
		if(select)                 //select Scrachpad Memory area(0x20000-0x200FF)
				PSCTL |= 0x04;         //SFLE(PSCTL.2)=1
		                 
		FLSCL |= 0x01;             // Enable FLASH writes/erases

		PSCTL |= 0x03;              // MOVX erases FLASH page
		

		*pwrite = 0;               // Initiate FLASH page erase

		FLSCL &= ~0x01;            // Disable FLASH writes/erases
		PSCTL = 0x00;              // MOVX targets XRAM

		EA = EA_SAVE;              // Restore interrupt state

		PSBANK = PSBANK_SAVE;      // Restore current code bank
		SFRPAGE = SFRPAGE_SAVE;    // Restore SFR page
}






/**************************************************************************************	
* 功    能:FLASH_Write: copies <numbytes> from <src> to the FLASH addressed by <dest>.
*-------------------------------------------------------------------------------------*
* 入口參數:dest:     目的flash 地址 
*           src:      源數據指針
*						numbytes: 數據的個數
*           select:   flash 模式選擇: 0-->BANK_FLASH; 1-->TEMP_FLASH.                      						 											                       
* 出口參數:nill
**************************************************************************************/	

void FLASH_Write (unsigned long dest, char* src, unsigned int numbytes,char select)
{
		unsigned int i; // Software Counter

		for (i = 0; i < numbytes; i++) {

		    FLASH_ByteWrite( dest++, *src++,select);
		}

}





/**************************************************************************************	
* 功    能:FLASH_ByteWrite:writes <dat> to the FLASH byte addressed by <dest>.
*-------------------------------------------------------------------------------------*
* 入口參數:dest:     目的flash 地址 
*           dat:      寫入的數據						
*           select:   flash 模式選擇: 0-->BANK_FLASH; 1-->TEMP_FLASH.                      						 											                       
* 出口參數:nill
**************************************************************************************/	

void FLASH_ByteWrite (unsigned long dest, char dat,char select)
{
		char SFRPAGE_SAVE = SFRPAGE;    // Preserve current SFR page
		char PSBANK_SAVE = PSBANK;      // Preserve current code bank
		bit EA_SAVE = EA;               // Preserve interrupt state

		ULong temp_dest;               // Temporary ULong

		char xdata * idata pwrite;     // FLASH write/erase pointer

		temp_dest.ULong = dest;        // copy <dest> to a byte
		                               // addressable unsigned long


		// Check if data byte being written is 0xFF
		// There is no need to write 0xFF to FLASH since erased
		// FLASH defaults to 0xFF.

		if(dat != 0xFF){

				// Extract address information from <dest>
				pwrite = (char xdata *) temp_dest.Int[1];

				// Extract code bank information from <addr>
				PSBANK &= ~COBANK;                  // Clear the COBANK bits


				if( temp_dest.Char[1] == 0x00){     // If the address is less than
				                                    // 0x10000, the Common area and
				    PSBANK |= COBANK1;              // Bank1 provide a 64KB linear
				                                    // address space
				} else {                            // Else, Bank2 and Bank3 provide
				                                    // a 64KB linear address space

						if (temp_dest.Char[2] & 0x80){  // If bit 15 of the address is
						                                // a ‘1’, then the operation should
						    PSBANK |= COBANK3;          // target Bank3, else target Bank2

						} else {

								PSBANK |= COBANK2;
								temp_dest.Char[2] |= 0x80;
								pwrite = (char xdata *) temp_dest.Int[1];
						}
				}

				SFRPAGE = LEGACY_PAGE;

				EA = 0;            // Disable interrupts
				
				if(select)         //select Scrachpad Memory area(0x20000-0x200FF)
				   PSCTL |= 0x04;  //SFLE(PSCTL.2)=1	
				 
				FLSCL |= 0x01;     // Enable FLASH writes/erases

				PSCTL |= 0x01;     // MOVX writes FLASH byte 				


				*pwrite = dat;     // Write FLASH byte

				FLSCL &= ~0x01;    // Disable FLASH writes/erases
				PSCTL = 0x00;      // MOVX targets XRAM

		}


		EA = EA_SAVE;             // Restore interrupt state
		PSBANK = PSBANK_SAVE;     // Restore current code bank
		SFRPAGE = SFRPAGE_SAVE;   // Restore SFR page	

}




/**************************************************************************************	
* 功    能: FLASH_Read: copies <numbytes> from FLASH addressed by <src> to <dest>.
*-------------------------------------------------------------------------------------*
* 入口參數:dest:     目的flash 地址指針 
*						src:			源flash 地址 
*           numbytes: 數據的個數						
*           select:   flash 模式選擇: 0-->BANK_FLASH; 1-->TEMP_FLASH.                      						 											                       
* 出口參數:nill
**************************************************************************************/	

void FLASH_Read ( char* dest, unsigned long src, unsigned int numbytes,char select)
{
		unsigned int i; // Software Counter

		for (i = 0; i < numbytes; i++) 
		 {
		    *dest++ = FLASH_ByteRead(src++,select);
		  }
}





/**************************************************************************************	
* 功    能:FLASH_ByteRead:	returns to the value of the FLASH byte addressed by <addr>.
*-------------------------------------------------------------------------------------*
* 入口參數:addr:     要讀取的flash 地址											
*           select:   flash 模式選擇: 0-->BANK_FLASH; 1-->TEMP_FLASH.                      						 											                       
* 出口參數:讀取的值
**************************************************************************************/	

unsigned char FLASH_ByteRead (unsigned long addr,char select)
{
		char SFRPAGE_SAVE = SFRPAGE;    // Preserve current SFR page
		char PSBANK_SAVE = PSBANK;      // Preserve current code bank

		ULong temp_addr;                // Temporary ULong
		char temp_char;                 // Temporary char

		char code * idata pread;       // FLASH read pointer


		temp_addr.ULong = addr;        // copy <addr> to a byte addressable
		                               // unsigned long

		// Extract address information from <addr>
		pread = (char code *) temp_addr.Int[1];

		// Extract code bank information from <addr>
		PSBANK &= ~COBANK;              // Clear the COBANK bits


		if( temp_addr.Char[1] == 0x00){       // If the address is less than
		                                      // 0x10000, the Common area and
		    PSBANK |= COBANK1;                // Bank1 provide a 64KB linear
		                                      // address space
		} else {                              // Else, Bank2 and Bank3 provide
				                                  // a 64KB linear address space
				if (temp_addr.Char[2] & 0x80){    // If bit 15 of the address is
				                                  // a ‘1’, then the operation should
				    PSBANK |= COBANK3;            // target Bank3, else target Bank2

				} else {

						PSBANK |= COBANK2;
						temp_addr.Char[2] |= 0x80;
						pread = (char code *) temp_addr.Int[1];
				}
		}

	 if(select)                   //select Scrachpad Memory area(0x20000-0x200FF)
	  {
		   SFRPAGE = LEGACY_PAGE;			
			 PSCTL |= 0x04;           //SFLE(PSCTL.2)=1
	  }

		temp_char = *pread;         // Read FLASH byte

		PSCTL = 0x00; 

		PSBANK = PSBANK_SAVE;       // Restore current code bank
		SFRPAGE = SFRPAGE_SAVE;     // Restore SFR page

		return temp_char;
}















?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲丝袜传媒另类| 青青青爽久久午夜综合久久午夜| 成人开心网精品视频| 国产精品网曝门| 91香蕉国产在线观看软件| 亚洲女同一区二区| 欧美精品丝袜久久久中文字幕| 视频一区二区三区在线| 精品国偷自产国产一区| 国产99一区视频免费| 亚洲欧美日韩中文字幕一区二区三区| 91行情网站电视在线观看高清版| 日韩vs国产vs欧美| 久久久久国产精品人| 972aa.com艺术欧美| 天天色天天爱天天射综合| 久久久久久亚洲综合影院红桃| av激情综合网| 日本vs亚洲vs韩国一区三区二区| 久久免费偷拍视频| 在线一区二区三区做爰视频网站| 久久精品噜噜噜成人av农村| 国产亚洲精品7777| 欧美日韩国产欧美日美国产精品| 精品一区二区三区久久| 亚洲人成精品久久久久久| 777亚洲妇女| www.在线欧美| 麻豆91小视频| 亚洲美女屁股眼交3| 久久综合精品国产一区二区三区| 91亚洲午夜精品久久久久久| 男人的天堂久久精品| 欧美高清在线精品一区| 欧美日韩mp4| 99精品桃花视频在线观看| 日韩激情中文字幕| 中文字幕在线观看一区二区| 欧美一区二区三区四区高清| av亚洲产国偷v产偷v自拍| 捆绑紧缚一区二区三区视频| 亚洲精品视频一区| 国产欧美日韩另类视频免费观看| 欧美精品一二三区| 91猫先生在线| 国产一区二区不卡在线| 日本亚洲欧美天堂免费| 一区二区三区在线视频观看58 | 夜夜精品浪潮av一区二区三区| 日韩欧美在线1卡| 色呦呦网站一区| 国产精品99久久久久久久女警| 亚洲成av人片在线| 一区二区在线电影| 中文字幕高清一区| 久久久综合网站| 日韩免费高清电影| 在线电影欧美成精品| 在线国产电影不卡| 色哟哟国产精品| aaa国产一区| 不卡一卡二卡三乱码免费网站| 精品午夜一区二区三区在线观看| 亚洲电影一区二区三区| 亚洲女子a中天字幕| 中文字幕一区二区三区色视频| 久久综合九色综合欧美98| 日韩美女主播在线视频一区二区三区| 欧美亚洲日本一区| 欧美天堂一区二区三区| 欧美影院精品一区| 欧美中文字幕一区| 欧美影视一区二区三区| 欧美色图第一页| 欧美三级韩国三级日本三斤 | 亚洲精品五月天| 亚洲欧美色一区| 亚洲免费观看高清完整版在线观看 | 26uuu国产一区二区三区| 日韩亚洲国产中文字幕欧美| 欧美美女直播网站| 欧美性感一区二区三区| 欧美电影一区二区三区| 欧美人与z0zoxxxx视频| 正在播放亚洲一区| 日韩欧美自拍偷拍| 精品国产免费一区二区三区四区 | 色国产综合视频| 欧美日韩夫妻久久| 91精品黄色片免费大全| 91精选在线观看| 精品国一区二区三区| 国产亚洲视频系列| 自拍偷拍欧美精品| 亚洲一卡二卡三卡四卡无卡久久| 香蕉久久夜色精品国产使用方法 | 成人中文字幕合集| 91在线视频在线| 欧美午夜精品一区二区蜜桃| 欧美精品一二三区| 久久伊人中文字幕| 中文字幕日本乱码精品影院| 亚洲18女电影在线观看| 久久国产精品免费| 99麻豆久久久国产精品免费 | 国产一区二区三区美女| 91亚洲精品久久久蜜桃| 欧美乱妇23p| 久久精品夜夜夜夜久久| 亚洲一区二区三区在线看| 日本成人在线一区| 国产 日韩 欧美大片| 欧美亚洲国产一区二区三区va| 777a∨成人精品桃花网| 欧美激情中文字幕一区二区| 亚洲一区二区三区在线播放| 国产一区二区0| 在线观看日韩精品| 麻豆免费精品视频| www.欧美日韩国产在线| 69久久夜色精品国产69蝌蚪网| 久久久久久久久久久黄色| 亚洲制服丝袜av| 国产91精品在线观看| 欧美日韩电影在线播放| 亚洲国产高清在线观看视频| 婷婷综合五月天| 99天天综合性| 久久久久国色av免费看影院| 天堂av在线一区| 99久久777色| 国产亚洲一区二区在线观看| 天天免费综合色| 色婷婷综合五月| 国产日韩欧美精品一区| 蜜桃av一区二区在线观看| 一本色道久久加勒比精品| 久久综合久久鬼色中文字| 五月激情综合网| 一本色道久久综合狠狠躁的推荐| 久久久久国产成人精品亚洲午夜| 日韩av成人高清| 欧美色综合久久| 亚洲精品五月天| av激情综合网| 国产精品网友自拍| 国产不卡在线视频| 久久婷婷成人综合色| 奇米影视7777精品一区二区| 欧美色综合网站| 亚洲一区二区三区视频在线播放| 99久精品国产| 中文字幕一区二区三区色视频| 国产精品69久久久久水密桃| 精品国产伦一区二区三区观看体验| 亚瑟在线精品视频| 欧美日韩一区二区三区在线| 一区二区三区四区视频精品免费| 99麻豆久久久国产精品免费| 久久久久久麻豆| 国产精品99久久久| 久久久久久久电影| 国产激情视频一区二区在线观看| 久久综合狠狠综合久久激情 | 国产精品久久三| 丰满少妇久久久久久久 | 亚洲三级在线免费观看| 成人在线视频一区二区| 国产欧美日韩麻豆91| 懂色av一区二区在线播放| 国产欧美日韩另类视频免费观看| 国产美女视频一区| 国产精品亲子伦对白| 成年人网站91| 一区二区高清免费观看影视大全 | 欧美疯狂性受xxxxx喷水图片| 污片在线观看一区二区| 欧美精品日韩一本| 久草在线在线精品观看| 久久久欧美精品sm网站| 不卡的电视剧免费网站有什么| 成人欧美一区二区三区| 一本大道av一区二区在线播放| 一级中文字幕一区二区| 欧美一区永久视频免费观看| 精品一区二区三区免费视频| 久久久国产精品麻豆| 本田岬高潮一区二区三区| 亚洲欧美日韩久久精品| 欧美浪妇xxxx高跟鞋交| 精品一区二区三区在线播放| 国产网站一区二区三区| 91精品福利视频| 美女一区二区在线观看| 欧美国产精品中文字幕| 欧美色图激情小说| 国产精品一二三区在线| 亚洲情趣在线观看| 日韩国产欧美在线观看| 国产亚洲污的网站|