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

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

?? am29lv160.c

?? 該程序代碼實現對Flash Rom AM29LV160燒寫數據的功能
?? C
字號:
#include "typeDef.h"

#define AM_START_ADDR          0x1100000
#define AM_CHIP_HWORD_SIZE     0x100000                 /*1M HWords*/
#define AM_ADDR_UNLOCK1        0x555
#define AM_ADDR_UNLOCK2        0x2aa
#define AM_DATA_UNLOCK1        0xaaaa
#define AM_DATA_UNLOCK2        0x5555
#define AM_SETUP_WRITE         0xa0a0
#define AM_SETUP_ERASE         0x8080
#define AM_CHIP_ERASE          0x1010
#define AM_SECTOR_ERASE		   0x3030


/******************************************************
函數名稱:       amOpOverDetect()
函數功能:       采用poll方式檢測flash擦寫是否完成.
入口參數:       ptr         數據寫入地址/擦除扇區首址.
				trueData    要寫入的值.
				timeCounter 超時計數.
返 回 值:       OK		操作成功.
				ERROR	操作失敗.
備    注:       在預定時間內如果d7,d6仍不是truedata,則返回
				ERROR.
*******************************************************/    
STATUS  amOpOverDetect(UINT16 *ptr,  UINT16 trueData, int timeCounter)
{
	int timeTmp = timeCounter;
	volatile UINT16 *pFlash = ptr;
	UINT16 buf1, buf2,curTrueData;
	
	curTrueData = trueData & 0x8080;                  //先檢測d7位.
	while((*pFlash & 0x8080) != curTrueData)
	{
		if(timeTmp-- <= 0) break;
	}
	
	timeTmp = timeCounter;
	buf1 = *pFlash & 0x4040;						  //(為保險)再檢測d6位.
	while(1)
	{
		    buf2  = *pFlash & 0x4040;
		    if(buf1 == buf2) 
				break;
		    else
			    buf1 = buf2;
		    if(timeTmp-- <= 0) 
		    {
				return ERROR;
		    }
	}

	return OK;
}

/********************************************************
函數名稱:       sstWrite()
函數功能:       讀取緩沖區數據根據給定的長度寫入指定地址.
入口參數:       flashAddr    數據目標地址(flash).
				buffer       數據源地址.
				length 		 要寫入的字節數.
				
返 回 值:      	NULL		 寫失敗.
				flashPtr     flash的下一個地址.
備    注:       由于sst39vf160只能按半字(16bit)操作,所以
                如果要多次調用這個函數來寫入一個文件,則應
                每次讀取偶數個字節,以保證連續性.
*********************************************************/    

UINT16 *amWrite(UINT16 *flashAddr, UINT8 *buffer, int length)
{
	int i, cLength;
	volatile UINT16 *flashPtr;
	volatile UINT16 *gBuffer;
	
    flashPtr = flashAddr;
	cLength = (length + 1)/2;				//計算半字長度.
	gBuffer = (UINT16 *)buffer;      
	
	while (cLength > 0) 
	{
		*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;          //解鎖.
		*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;
    	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_SETUP_WRITE;
		*flashPtr = *gBuffer;                                                    //寫入數據.
		
		if(amOpOverDetect((UINT16 *)flashPtr, *gBuffer, 0x100000))             //檢測寫入是否成功.
		{
			//printf("warning: write flash may failed at:0x%x.\n", (int)flashPtr);
		}
		cLength--;
		flashPtr++;
		gBuffer++;
	}	
	
    flashPtr = flashAddr;
	gBuffer = (UINT16 *)buffer; 
	cLength = length/2;
	for(i=0; i<cLength; i++)			//寫入的數據全部校驗一次.
	{
	    if(*flashPtr++ != *gBuffer++)
	    {    
	        //printf("Error: write failed in SST39vf160 at 0x%x on verification.\n", (int)flashPtr);
	        return NULL;
	    }
	}
	if(length%2)
	{
	    if((*flashPtr++ & 0x00ff) != (*gBuffer++ & 0x00ff))             /*奇數長度的最后一個字節.*/
	    {
	        //printf("Error: write failed in SST39vf160 at 0x%x on verification.\n", (int)flashPtr);
	        return NULL;	    
	    }
	}
	return (UINT16 *)flashPtr;
}

/********************************************************
函數名稱:       amChipErase()
函數功能:       擦除整個flash芯片.
入口參數:       無.
				
返 回 值:      	OK		 擦除完全正確.
				ERROR    有單元不能正確擦除.
備    注:       datasheet上說典型時間為26s,實際大約15秒,
				所以盡量用amSectorErase().
*********************************************************/    
STATUS amChipErase(void)
{
    int i;
    volatile UINT16 *flashPtr = NULL;
    
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;			//連續解鎖.
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_SETUP_ERASE;
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;			//寫入擦除命令.

	flashPtr = (volatile UINT16 *)AM_START_ADDR;			  

	if(amOpOverDetect((UINT16 *)flashPtr, 0xffff, 0x800000) != OK)
	{
		//printf("warning: Chip Erase time out!\n");	
	}	
	
	flashPtr = (volatile UINT16 *)AM_START_ADDR;			  
	for(i=0; i<AM_CHIP_HWORD_SIZE; i++,flashPtr++)  					//校驗是否全為0xffff.
	{
	   if(*flashPtr != 0xffff)
	   {
	    	//printf("Debug: Erase failed at 0x%x in SST39VF160 on verification.\n", (int)flashPtr);
		    return ERROR;
       }
	}
	return OK;
}    

/********************************************************
函數名稱:       amSectorErase()
函數功能:       擦除指定的flash扇區.
入口參數:       扇區地址.
				
返 回 值:      	OK		 擦除完全正確.
				ERROR    有單元不能正確擦除.
備    注:       
*********************************************************/    
STATUS amSectorErase(UINT16 *pSector)
{
    //int i;
    volatile UINT16 *flashPtr = pSector;
    
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;			//連續解鎖.
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_SETUP_ERASE;
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;
	*((volatile UINT16 *)AM_START_ADDR + AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;
	*flashPtr = AM_SECTOR_ERASE;			//寫入擦除命令.

	if(amOpOverDetect((UINT16 *)flashPtr, 0xffff, 0x20000) != OK)
	{
	    return ERROR;
		//printf("warning: Chip Erase time out!\n");	
	}	
	
	return OK;
}   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国v欧美v亚洲v日本v| 亚洲精品国产一区二区精华液| 91国产精品成人| 99久久综合99久久综合网站| 成人午夜视频在线| 粉嫩绯色av一区二区在线观看| 国产乱码一区二区三区| 国产精品中文欧美| 国产精品99久久久久久久vr | 国产麻豆精品在线观看| 美美哒免费高清在线观看视频一区二区| 亚洲综合色区另类av| 一区二区视频在线看| 一区二区三区成人| 日韩精品久久理论片| 日本不卡一二三区黄网| 久久国产欧美日韩精品| 国产成人综合视频| 91美女片黄在线观看91美女| 欧美色爱综合网| 91精品国产aⅴ一区二区| 欧美大片一区二区| 中文欧美字幕免费| 一级日本不卡的影视| 日韩不卡手机在线v区| 国产精品自拍一区| 处破女av一区二区| 欧美人牲a欧美精品| 精品国产乱码久久久久久图片| 中文字幕精品一区二区精品绿巨人| 综合自拍亚洲综合图不卡区| 日韩精品午夜视频| 成人丝袜视频网| 欧美精品乱码久久久久久| 精品av久久707| 亚洲精品国久久99热| 免费观看30秒视频久久| 91视视频在线观看入口直接观看www | 岛国精品在线播放| 欧美三级电影网站| 国产婷婷精品av在线| 亚洲第一av色| 成人av在线资源网站| 9191精品国产综合久久久久久| 国产视频一区二区在线观看| 午夜精品福利一区二区三区av| 国产v综合v亚洲欧| 日韩精品专区在线影院重磅| 亚洲精品成人少妇| 成人自拍视频在线观看| 日韩欧美一区二区免费| 亚洲高清一区二区三区| gogo大胆日本视频一区| 精品国产乱码久久久久久浪潮| 亚洲黄色免费电影| 国产精品白丝jk黑袜喷水| 欧美军同video69gay| 亚洲色图20p| 99久久精品国产麻豆演员表| 国产网站一区二区三区| 日本人妖一区二区| 在线观看视频一区二区| 国产网站一区二区| 国产福利视频一区二区三区| 日韩精品一区二区三区视频播放 | 日韩国产一区二| 欧洲激情一区二区| 亚洲精品伦理在线| av激情成人网| 亚洲日本在线看| 91在线一区二区三区| 18成人在线观看| 成人av集中营| 自拍偷拍亚洲综合| 99精品视频一区二区| 国产精品久久久久久久蜜臀 | 亚洲黄色尤物视频| 91丨porny丨户外露出| 最新不卡av在线| 91麻豆123| 亚洲午夜激情av| 欧美久久久久久久久| 婷婷开心激情综合| 日韩一区二区免费在线观看| 欧美aⅴ一区二区三区视频| 6080国产精品一区二区| 久久精品噜噜噜成人88aⅴ| 欧美成人精精品一区二区频| 国产一区二区三区免费在线观看| 欧美成人精品高清在线播放| 国产一区二区精品久久91| 2017欧美狠狠色| 成人av电影在线网| 亚洲成av人在线观看| 日韩亚洲欧美成人一区| 国产91清纯白嫩初高中在线观看| 亚洲国产精品高清| 欧美三级中文字幕| 另类小说欧美激情| 国产女主播一区| 91成人看片片| 六月丁香综合在线视频| 国产三级三级三级精品8ⅰ区| 成人av在线资源网站| 日韩在线观看一区二区| 国产午夜精品一区二区三区视频| 97久久精品人人爽人人爽蜜臀| 亚洲高清一区二区三区| 久久久久9999亚洲精品| 色婷婷综合五月| 国产一区二区三区不卡在线观看| 国产精品久久久久婷婷| 欧美久久一二三四区| 国产白丝网站精品污在线入口| 午夜欧美电影在线观看| 国产日韩高清在线| 777亚洲妇女| 99精品久久久久久| 久久国产精品第一页| 亚洲精品videosex极品| 久久久久久久性| 欧美日韩中文国产| 成人污污视频在线观看| 天堂蜜桃91精品| 中文字幕一区三区| 久久亚洲二区三区| 3d动漫精品啪啪一区二区竹菊 | 国产欧美精品一区二区色综合 | 国产一区二区三区免费在线观看| 亚洲美女区一区| 国产三级一区二区| 亚洲精品在线观看网站| 欧美日韩久久一区| 色乱码一区二区三区88| 国产高清在线精品| 国产一区二区在线影院| 日韩一区精品字幕| 一区二区成人在线观看| 综合电影一区二区三区 | 中文字幕中文乱码欧美一区二区| 欧美一区二视频| 欧美老肥妇做.爰bbww视频| 91免费版在线看| 99亚偷拍自图区亚洲| 国产成人自拍网| 激情综合色播五月| 精品一区二区日韩| 久久99国内精品| 热久久一区二区| 日本成人超碰在线观看| 男女激情视频一区| 日本欧美肥老太交大片| 秋霞国产午夜精品免费视频| 视频一区视频二区中文| 五月婷婷久久综合| 日韩影院精彩在线| 久久成人麻豆午夜电影| 精品写真视频在线观看| 国产麻豆成人精品| 国产福利一区二区三区视频在线| 国产91精品在线观看| 99久久精品一区| 欧美性生活影院| 8x福利精品第一导航| 日韩欧美二区三区| 久久婷婷国产综合精品青草| 久久夜色精品国产欧美乱极品| 国产肉丝袜一区二区| 中文字幕亚洲精品在线观看| 亚洲另类中文字| 视频在线观看一区二区三区| 国产资源在线一区| 99久久精品国产一区二区三区 | 欧美一区二区视频观看视频| 在线综合视频播放| 久久蜜桃一区二区| 亚洲免费观看高清完整版在线观看熊| 亚洲人成在线播放网站岛国 | 日韩欧美一级精品久久| ww亚洲ww在线观看国产| 国产精品久久久99| 日韩高清在线一区| 国产盗摄女厕一区二区三区| 色狠狠色狠狠综合| 欧美一级二级三级乱码| 国产精品久久久久aaaa樱花| 午夜欧美视频在线观看 | 一区二区日韩电影| 精品一区二区在线看| 色综合久久中文字幕综合网| 制服丝袜亚洲网站| 国产精品久久久久久久久免费相片 | 国产伦精一区二区三区| 97se亚洲国产综合自在线| 国产视频一区在线观看| 夜夜操天天操亚洲| 国产真实精品久久二三区| 9色porny自拍视频一区二区| 欧美精品久久一区| 日韩美女久久久|