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

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

?? norflash.c

?? 基于S3C2410和SM501的彩屏控制器程序
?? C
字號:
#define __NORFLASH
#include "Norflash.h"
#undef __NORFLASH


//********************** Global Variable **********************

BYTE cFlashType;	// flash類型
WORD wTotalSector;	// 總共扇區數
DWORD wTotalSize;	// Flash的總容量

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



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 讀當前NorFLASH類型.
//	
// 返回: FLASH類型.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BYTE ReadNorFlashType (void)
{
	// 用頭信息中的FLASH類型
	cFlashType = NOR_FLASH_S29GL256N;

	switch( cFlashType )
	{
		case NOR_FLASH_AM29LV320D:
			wTotalSector = 64;
			break;
	
		case NOR_FLASH_AM29LV160D:	
			wTotalSector = 32;
			break;

		case NOR_FLASH_AM29LV800B:			
			wTotalSector = 16;
			break;

		case NOR_FLASH_S29GL256N:
			wTotalSector = 256;
			break;

		default:	// 錯誤	
			wTotalSector = 0;			
			return FALSE;				
	}

	return cFlashType;
}//ReadNorFlashType()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 禁止Flash讀寫.
// 描述: 保護NorFlash, 讀寫都禁止. 禁止后讀數據只能讀到全0.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void DisableFlash (void)
{
	Clr_MRST();
	Clr_FLASHWP();
}//DisableFlash()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 允許Flash讀寫.
// 描述: 取消NorFlash保護, 允許對其讀寫.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void EnableFlash(void)
{
	Set_MRST();
	Set_FLASHWP();
}//EnableFlash()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 擦除單個扇區.
// 描述: 擦除NorFlash某個扇區. 耗時700-1500ms.
//
// [參數表]
//	Dst: 扇區地址.
//	
// 返回: 擦除操作是否成功. 0-失敗; 1-成功.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BYTE EraseOneSector(DWORD Dst)
{       
    int	i,j;
    ulong start, now, last;
    vu_short *addr = (vu_short*)(0x00);
    
	disable_interrupts();	// 關總中斷
	EnableFlash();			// 允許Flash讀寫

	addr[0x555] = (vu_short)0xAAAA;
	addr[0x2AA] = (vu_short)0x5555;
	addr[0x555] = (vu_short)0x8080;
	addr[0x555] = (vu_short)0xAAAA;
	addr[0x2AA] = (vu_short)0x5555;
	addr = (vu_short*)(FLASH_ADDRESS+Dst);
	addr[0] =(vu_short)0x3030;
	
	for(i=0; i<300; i++)		// 延時
		for(j=0; j<1000; j++);

	start = get_timer(0);
	last  = start;
	addr = (vu_short*)(FLASH_ADDRESS+Dst);
	while ((addr[0] & 0x8080) != 0x8080) 
	{
		if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT)
			return FALSE;

		// ----- 計算(顯示)等待時間, 單位:秒 -----
		if ((now - last) > 100000) 
		{	/* every second */
			last = now;
		}
	}
	
  	DisableFlash();		// 禁止Flash讀寫
  	addr = (vu_short *)(0x0);
	addr[0] = (vu_short)0xF0F0;

	return TRUE;        
}//EraseOneSector()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 擦除扇區.
// 描述: 擦除給定扇區號的扇區內容.
//
// [參數表]
//	wSector: 扇區號.
//	
// 返回: 擦除操作是否成功. 0-失敗; 1-成功.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BYTE EraseSector(WORD wSector)
{
/*	// Commnet: 舊彩顯板的寫法, 需要對Flash的前64K做特殊處理
// 注意: 每種類型的FLASH的前64K扇區是不同的!
	DWORD	wFirst64K[][9]={
				{8,0x0000,0x2000,0x4000,0x6000,0x8000,0xA000,0xC000,0xE000},	//NOR_FLASH_AM29LV320D,8*8K
				{4,0x0000,0x4000,0x6000,0x8000},	//NOR_FLASH_AM29LV160D,1*16K,2*8K,1*32K
				{4,0x0000,0x4000,0x6000,0x8000}};	//NOR_FLASH_AM29LV800B,1*16K,2*8K,1*32K
	WORD i;
	int  j;
	
	if( wTotalSector == 0 || wSector>=wTotalSector )	//無效FLASH或參數錯誤
		return FALSE;
	
	if( wSector==0 )	// 對扇區0的特殊處理
	{
		for(i=0; i<wFirst64K[cFlashType-1][0]; i++)
		{
			if( EraseOneSector(wFirst64K[cFlashType-1][i+1]) == FALSE )
				return FALSE;
			for(j=0; j<300000; j++);	// 延時等待
		}
		return TRUE;
	}
	else
		return EraseOneSector((DWORD)wSector*65536);
*/
	
	if( wTotalSector == 0 || wSector>=wTotalSector )	//無效FLASH或參數錯誤
		return FALSE;
	
	return EraseOneSector((DWORD)wSector*NOR_FLASH_SECTOR_SIZE);	// 擦除指定的扇區
	// 注: 新彩顯板的NorFlash每個扇區都是128KB.
}//EraseSector()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 寫一個字進Flash.
// 描述: 寫入一個字(4字節)到Flash的指定位置.
//
// [參數表]
//	dest: 寫入地址.
//	data: 寫入內容.
//
//返回: 0-完成; 1-寫入超時; 2-Flash未擦除.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
static int write_word (ulong dest, ulong data)
{
	vu_short *addr = (vu_short *)(FLASH_ADDRESS);
	vu_short sdata;

	ulong start;

	/* Check if Flash is (sufficiently) erased */
	if ((*((vu_long *)dest) & data) != data) {
		return (2);
	}

	/* First write upper 16 bits */
	sdata = (short)(data>>16);
	sdata = (sdata >> 8) | (sdata << 8);

	/* Disable interrupts which might cause a timeout here */

/* 在Writeflash中統一關、開中斷, 避免每次重復操作 */
//	disable_interrupts();

	addr[0x555] = 0xAAAA;
	addr[0x2AA] = 0x5555;
	addr[0x555] = 0xA0A0;

	*((vu_short *)dest) = sdata;

	/* re-enable interrupts if necessary */

	//enable_interrupts();

	/* data polling for D7 */
	start = get_timer (0);
	while ((*((vu_short *)dest) & 0x8080) != (sdata & 0x8080)) {
		if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
			return (1);
		}
	}

	/* Now write lower 16 bits */
	sdata = (short)(data&0xffff);
	sdata = (sdata >> 8) | (sdata << 8);

	/* Disable interrupts which might cause a timeout here */
//	disable_interrupts();

	addr[0x555] = 0xAAAA;
	addr[0x2AA] = 0x5555;
	addr[0x555] = 0xA0A0;

	*((vu_short *)dest + 1) = sdata;

	/* re-enable interrupts if necessary */
	
//	enable_interrupts();

	/* data polling for D7 */
	start = get_timer (0);
	while ((*((vu_short *)dest + 1) & 0x8080) != (sdata & 0x8080)) {
		if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
			return (1);
		}
	}
	return (0);
}//write_word()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 寫Flash.
// 描述: 將數據塊寫入Flash.
//
// [參數表]
//	src: 數據塊始地址.
//	addr: Flash的寫入始地址.
//	cnt: 寫入字符計數.
//
// 返回: 0-完成; 1-寫入超時; 2-Flash未擦除.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int Writeflash (uchar *src, ulong addr, ulong cnt)
{
	ulong wp;	// 寫入指針
	ulong cp;	// 拷貝指針. 用于處理始、末端非對齊數據
	ulong data;	// 臨時數據緩沖, 用于調整寫入的內容, 為寫入flash準備數據
//注: 因為write_word函數是以整型(4字節)進行寫入, 所以需要調整所需的格式.
	int i, l, rc;

	wp = (addr & ~3);	/* get lower word aligned address */

	disable_interrupts();	// 關閉總中斷, 防止因中斷引起的寫入超時

	/* handle unaligned start bytes */
	// 起始段數據(<4字節)處理, 目的是為批量寫入數據前對齊地址.
	if ((l = addr - wp) != 0)
	{
		data = 0;
		for (i=0, cp=wp; i<l; ++i, ++cp)	// 將flash中即將被寫入的位置的起始內容填充數據緩沖
		{
			data = (data << 8) | (*(uchar *)cp);
		}
		for (; i<4 && cnt>0; ++i)	// 將起始段未對齊數據在數據緩沖中進行轉換
		{
			data = (data << 8) | *src++;
			--cnt;
			++cp;
		}
		for (; cnt==0 && i<4; ++i, ++cp)	// 將數據緩沖的末端空余位置用flash中即將被寫入的位置的內容填充
		{
			data = (data << 8) | (*(uchar *)cp);
		}

		if ((rc = write_word( wp, data)) != 0)	// 寫入
		{
			enable_interrupts();	// 打開總中斷
			return (rc);	// 寫入出錯返回
		}
		wp += 4;	// 寫入指針指向下一位置
	}

	/* handle word aligned part	 */
	// 批量寫入數據, 每次以一個字(32bit)的長度進行寫入
	while (cnt >= 4)
	{
		data = 0;
		for (i=0; i<4; ++i)
		{
			data = (data << 8) | *src++;
		}
		if ((rc = write_word( wp, data)) != 0)	// 寫入
		{
			enable_interrupts();	// 打開總中斷
			return (rc);	// 寫入出錯返回
		}
		wp  += 4;	// 寫入指針指向下一位置
		cnt -= 4;
	}

	if (cnt == 0)	// 若上述操作正好寫完, 則返回完成.
	{
		enable_interrupts();	// 打開總中斷
		return (0);
	}

	/* handle unaligned tail bytes */
	// 處理數據塊的尾部數據(<4字節)
	data = 0;
	for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp)	// 將尾部數據在數據緩沖中進行轉換
	{
		data = (data << 8) | *src++;
		--cnt;
	}
	for (; i<4; ++i, ++cp)	// 將數據緩沖的空余位置用flash中即將被寫入的位置的內容填充
	{
		data = (data << 8) | (*(uchar *)cp);
	}
	rc = write_word( wp, data);
	enable_interrupts();	// 打開總中斷
	return (rc);	// 返回最終操作結果
}//Writeflash()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩欧美一区二区三区乱码| 久久久蜜桃精品| 久久精品国产亚洲a| 欧美激情一区二区三区不卡 | 欧美精品一区二区高清在线观看| 成年人网站91| 日韩综合小视频| 中文字幕在线一区| 日韩免费视频一区| 在线观看91精品国产入口| 狠狠色伊人亚洲综合成人| 一区二区三区欧美在线观看| 精品国产免费久久| 欧美巨大另类极品videosbest| 成人伦理片在线| 激情av综合网| 午夜精品影院在线观看| 亚洲同性gay激情无套| www精品美女久久久tv| 欧美色偷偷大香| 99国产精品久久久久久久久久| 国产一区二区主播在线| 日韩精品福利网| 亚洲在线一区二区三区| 国产精品高潮呻吟久久| 2024国产精品视频| 欧美大片在线观看一区二区| 欧美群妇大交群中文字幕| 色婷婷综合视频在线观看| 成人蜜臀av电影| 国产一本一道久久香蕉| 日本va欧美va精品发布| 午夜精品一区二区三区免费视频| 亚洲欧美日韩国产一区二区三区 | 国产成人自拍网| 狠狠v欧美v日韩v亚洲ⅴ| 日本在线不卡一区| 亚洲国产欧美日韩另类综合| 亚洲图片欧美色图| 一区二区日韩av| 一区二区三区美女| 夜色激情一区二区| 一区二区三区四区亚洲| 亚洲乱码中文字幕综合| 亚洲人吸女人奶水| 亚洲视频图片小说| 亚洲精品一卡二卡| 亚洲午夜免费福利视频| 亚洲福利视频三区| 亚洲va国产天堂va久久en| 婷婷六月综合亚洲| 美腿丝袜亚洲综合| 国产一区二区按摩在线观看| 国产福利一区二区三区视频在线 | 在线观看亚洲精品视频| 91久久奴性调教| 在线观看一区二区精品视频| 欧美三片在线视频观看| 8x8x8国产精品| 精品国产乱码久久久久久夜甘婷婷| 精品国产露脸精彩对白| 中文字幕免费一区| 亚洲美女在线一区| 午夜电影一区二区三区| 精品亚洲成a人在线观看| 国产精品一卡二| 99久久伊人网影院| 欧美三级电影一区| 日韩午夜精品视频| 国产亚洲自拍一区| 亚洲三级电影全部在线观看高清| 亚洲一区二区偷拍精品| 另类小说综合欧美亚洲| 国产 欧美在线| 欧美亚洲一区三区| 日韩欧美在线影院| 国产精品久久一卡二卡| 亚洲午夜影视影院在线观看| 久久国产精品99久久人人澡| 成人国产亚洲欧美成人综合网| 欧美在线一二三| 欧美精品一区视频| 亚洲精品中文字幕乱码三区| 蜜桃视频在线观看一区| 成人av网站在线| 欧美人狂配大交3d怪物一区 | 亚洲18色成人| 国产乱码精品一区二区三区av| 91小视频在线| 日韩欧美国产综合| 1区2区3区国产精品| 轻轻草成人在线| 99精品久久只有精品| 日韩免费高清av| 中文字幕综合网| 韩国成人在线视频| 欧美伊人久久久久久久久影院| 久久久久久久精| 五月开心婷婷久久| 不卡电影一区二区三区| 日韩欧美电影一二三| 亚洲伊人伊色伊影伊综合网| 韩国中文字幕2020精品| 欧美色精品在线视频| 国产精品国产三级国产aⅴ入口| 久久99精品久久久久婷婷| 在线观看区一区二| 中文字幕欧美激情| 国产真实乱对白精彩久久| 欧美视频一区二区在线观看| 国产精品三级久久久久三级| 久久国产精品99精品国产| 精品视频在线免费看| 中文字幕亚洲成人| 国产高清亚洲一区| 日韩精品一区二区在线观看| 亚洲国产日日夜夜| 一本色道久久综合狠狠躁的推荐| 久久精品一区二区三区不卡牛牛| 日韩高清不卡一区二区| 欧美在线免费播放| 成人免费一区二区三区视频 | 蓝色福利精品导航| 欧美三级电影在线观看| 亚洲综合在线第一页| 成+人+亚洲+综合天堂| 久久久久99精品一区| 精品一区二区三区蜜桃| 欧美久久久久久久久| 亚洲午夜久久久久久久久久久| 91亚洲精品久久久蜜桃网站| 国产精品麻豆久久久| 粉嫩一区二区三区性色av| 久久蜜桃av一区精品变态类天堂| 美国一区二区三区在线播放| 日韩亚洲国产中文字幕欧美| 视频一区二区不卡| 91精品婷婷国产综合久久性色 | 国产a级毛片一区| 久久亚洲一级片| 精彩视频一区二区三区| 欧美成人bangbros| 国产一区二区三区四区在线观看| 亚洲精品一区二区三区蜜桃下载| 久久66热偷产精品| 久久综合色一综合色88| 国产激情精品久久久第一区二区| 2021中文字幕一区亚洲| 国产伦精一区二区三区| 国产午夜精品久久久久久免费视| 国产成人精品午夜视频免费| 欧美国产一区二区| 99国产精品一区| 亚洲观看高清完整版在线观看 | 国产精品亚洲а∨天堂免在线| 欧美精品一区二区三区蜜桃 | 久久精品在线观看| 处破女av一区二区| 综合色中文字幕| 欧美亚洲精品一区| 天天影视色香欲综合网老头| 欧美精品国产精品| 久久91精品久久久久久秒播| 中日韩免费视频中文字幕| 91麻豆精品视频| 视频一区二区欧美| 久久久久88色偷偷免费| 不卡av在线网| 五月天中文字幕一区二区| 26uuu亚洲婷婷狠狠天堂| 成年人国产精品| 天堂久久一区二区三区| 久久网站最新地址| 色综合天天综合给合国产| 午夜精品福利视频网站| 久久久久88色偷偷免费| 在线一区二区三区四区| 六月丁香婷婷色狠狠久久| 久久精品国产亚洲aⅴ| 欧美国产日产图区| 欧美视频一区二区| 极品美女销魂一区二区三区| 亚洲色图清纯唯美| 欧美一区二区啪啪| 成人黄色a**站在线观看| 爽爽淫人综合网网站| 国产女主播视频一区二区| 欧美视频一区二区三区在线观看| 国内精品久久久久影院薰衣草| 亚洲欧美日韩中文播放| 久久综合av免费| 欧美少妇一区二区| 国产一区二区女| 亚洲123区在线观看| 欧美激情中文不卡| 7777精品伊人久久久大香线蕉经典版下载 | 韩国精品在线观看| 一片黄亚洲嫩模| 国产亚洲精品bt天堂精选| 精品视频全国免费看|