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

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

?? sst39vf160.c

?? tornado開發 三星s3c44b0x開發板 bsp
?? C
字號:
/* sst39vf160.c - SST39VF160 MTD driver *//* Copyright 2004-2005 Amine@263.net *//************************************************************************//*                                                                      *//*		FAT-FTL Lite Software Development Kit			*//*		Copyright (C) M-Systems Ltd. 1995-1996			*//*									*//************************************************************************//*modification history--------------------01o,28jul04,a_m  BSP定制 for 思創S3C44B0X黃金開發板*/#include "intLib.h"#include "stdio.h"#include "tffs/flflash.h"#include "config.h"/* NOTE:	!!!UNLOCK_ADDR為字地址, 賦值轉換x2	!!!使用自己的地址映射函數	!!!中斷向量表在同一片Flash存儲器上,擦除和寫入操作時需要屏蔽中斷*//* 需與sysTffs.c中相同定義一致 */#if(BOARD_TYPE == BOARD_ARMEPS) /*ARMCORE V1.0*/#define	FLASH_BASE_ADRS		0x2000000#define	FLASH_SIZE			0x0400000#else#define	FLASH_BASE_ADRS		ROM_SIZE#define	FLASH_SIZE		(0x00200000-ROM_SIZE)#endiftypedef struct {	FlashWPTR	unlockAddr1;	FlashWPTR  	unlockAddr2;} Vars;static Vars mtdVars[DRIVES];#define thisVars   ((Vars *) vol.mtdVars)#undef DEBUG_PRINT	/* 調試信息輸出宏定義 */static void FAR0* sst39vf160Map(FLFlash* pVol,	CardAddress address, int length);static FLStatus sst39vf160Erase	(FLFlash vol, int firstErasableBlock, int numOfErasableBlocks);static FLStatus sst39vf160Write	(FLFlash vol, CardAddress address, const void FAR1 *buffer, int length, int modes);static STATUS  doneDetect(void * ptr,  int timeCounter);/*------------------------------------------------------------------------ Procedure:     sst39vf160Identify ID:1 Purpose:       MTD入口函數 Input:          Output:		 Errors:------------------------------------------------------------------------*/FLStatus sst39vf160Identify(FLFlash vol){	FlashWPTR  baseFlashPtr;#ifdef DEBUG_PRINT  	DEBUG_PRINT("Debug: entering 16-bit SST media identification routine.\n");#endif	flSetWindowBusWidth(vol.socket, 16);	/* use 16-bits */	flSetWindowSpeed(vol.socket, 90);  		/* 90 nsec */	flSetWindowSize(vol.socket, FLASH_SIZE>>12);	vol.interleaving = 1; 	vol.chipSize = FLASH_SIZE;	vol.noOfChips = 0x1;	                /* one chip */	vol.erasableBlockSize = 0x1000;      	/* 4k bytes */  	vol.flags |= SUSPEND_FOR_WRITE;	vol.map   = sst39vf160Map;		vol.erase = sst39vf160Erase;	vol.write = sst39vf160Write;	vol.mtdVars = &mtdVars[flSocketNoOf(vol.socket)];	baseFlashPtr = (FlashWPTR)vol.map (&vol, (CardAddress)0, vol.interleaving);	/*!!!UNLOCK_ADDR為字地址, 賦值轉換x2*/	thisVars->unlockAddr1 = (FlashWPTR)((long)baseFlashPtr) + 0x5555;	thisVars->unlockAddr2 = (FlashWPTR)((long)baseFlashPtr) + 0x2aaa;	return flOK;}/*------------------------------------------------------------------------ Procedure:     sst39vf160Map ID:1 Purpose:       映射Flash片內地址為CPU全局地址 Input:         address-相對地址 Output:		 Errors:------------------------------------------------------------------------*/static void FAR0* sst39vf160Map(FLFlash* pVol,	CardAddress address, int length){	void FAR0* pFlash = (void FAR0*) (FLASH_BASE_ADRS + address);	return(pFlash);}/*------------------------------------------------------------------------ Procedure:     sst39vf160Erase ID:1 Purpose:       MTD擦除Flash函數 Input:          Output:		 Errors:------------------------------------------------------------------------*/static FLStatus sst39vf160Erase	(FLFlash vol, int firstErasableBlock, int numOfErasableBlocks){	int iBlock, i; 			FlashWPTR flashPtr;	unsigned int offset;	int level;	if(numOfErasableBlocks <= 0) return ERROR;	for (iBlock = 0; iBlock < numOfErasableBlocks; iBlock++) {		offset = (firstErasableBlock + iBlock) * vol.erasableBlockSize;		flashPtr = (FlashWPTR) vol.map(&vol, offset, vol.interleaving);#ifdef DEBUG_PRINT    	DEBUG_PRINT("Debug: sst39vf160Erase - flashPtr=0x%x, first=%d, number=%d.\n", flashPtr, firstErasableBlock, numOfErasableBlocks);#endif		*thisVars->unlockAddr1 = 0xaa;	    *thisVars->unlockAddr2 = 0x55;	    *thisVars->unlockAddr1 = 0x80;		*thisVars->unlockAddr1 = 0xaa;	    *thisVars->unlockAddr2 = 0x55;	    #if(BOARD_TYPE != BOARD_ARMEPS) /*ARMCORE V1.0*/		level = intLock();		#endif		*flashPtr = 0x30;		doneDetect((void *)flashPtr, 0x2000000);				  		for(i=0; i<vol.erasableBlockSize/2; i++,flashPtr++){		   if(*flashPtr != 0xffff)  break;		}		*flashPtr = 0xf0;		#if(BOARD_TYPE != BOARD_ARMEPS) /*ARMCORE V1.0*/		intUnlock(level);		#endif		if(i < vol.erasableBlockSize/2)	{#ifdef DEBUG_PRINT			DEBUG_PRINT("Debug: sst39vf160Erase fail.\n");#endif			return flWriteFault;		}	}		return flOK;}/*------------------------------------------------------------------------ Procedure:     sst39vf160Write ID:1 Purpose:       MTD寫Flash函數 Input:          Output:		 Errors:------------------------------------------------------------------------*/static FLStatus sst39vf160Write	(FLFlash vol, CardAddress address, const void FAR1 *buffer, int length, int modes){	int cLength; int level;	FlashWPTR flashPtr, flashTmp;	volatile UINT16 *gBuffer;	flashTmp = flashPtr = (FlashWPTR) vol.map(&vol, address, length);#ifdef DEBUG_PRINT    DEBUG_PRINT("Debug: sst39vf160Write - flashPtr=0x%x, buffer=0x%x, length=%d, modes=%d.\n", flashPtr, buffer, length, modes);#endif	if(length&1)		printf("warning! the data length can not divided by 2.");		cLength = length/2;	gBuffer = (UINT16 *)buffer;	while (cLength >= 1) {		*thisVars->unlockAddr1 = 0x0aa;    	*thisVars->unlockAddr2 = 0x55;    	#if(BOARD_TYPE != BOARD_ARMEPS) /*ARMCORE V1.0*/		level = intLock();		#endif	    *thisVars->unlockAddr1 = 0x0a0;		*flashPtr = *gBuffer;		doneDetect((void *)flashPtr, 0x1000000);		if(*flashPtr != *gBuffer) {			*flashPtr = 0xf0;#ifdef DEBUG_PRINT			DEBUG_PRINT("Debug: sst39vf160Write timeout.\n");#endif			return flWriteFault;		}		#if(BOARD_TYPE != BOARD_ARMEPS) /*ARMCORE V1.0*/		intUnlock(level);		#endif		cLength--;		flashPtr++;		gBuffer++;	}	if (tffscmp((void FAR0 *)flashTmp, buffer,length))	{#ifdef DEBUG_PRINT		DEBUG_PRINT("Debug: sst39vf160Write fail.\n");#endif		return flWriteFault;	}	return flOK;}/*------------------------------------------------------------------------ Procedure:     doneDetect ID:1 Purpose:       探測write,erase操作是否結束,超時錯誤 Input:          Output:		 Errors:------------------------------------------------------------------------*/static STATUS  doneDetect(void * ptr,  int timeCounter){	FlashWPTR pFlash = ptr;	INT16 buf1,buf2;		buf1 = *pFlash & 0x40;	while(1){		buf2  = *pFlash & 0x40;		if(buf1 == buf2) break; /* D6位沒有跳變表示操作結束 */		else buf1 = buf2;		if(timeCounter-- <= 0) return ERROR;	}	return OK;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情小说欧美图片| 日本不卡123| 一区二区三区资源| 首页综合国产亚洲丝袜| 久久99精品久久久久久国产越南| 国内精品不卡在线| 国产91精品在线观看| 色婷婷久久综合| 日韩限制级电影在线观看| 国产女同性恋一区二区| 亚洲一区在线视频观看| 国产一区二区精品久久| 在线欧美日韩精品| 国产午夜亚洲精品午夜鲁丝片| 亚洲综合男人的天堂| 国产一区在线精品| 在线播放国产精品二区一二区四区| 精品国精品国产| 亚洲一区在线观看视频| 国产丶欧美丶日本不卡视频| 欧美日韩精品久久久| 亚洲色欲色欲www| 国产传媒日韩欧美成人| 777xxx欧美| 亚洲国产中文字幕| 99久久国产免费看| 欧美韩国日本综合| 久久精品国产亚洲5555| 欧美色图免费看| 一区2区3区在线看| 成人免费的视频| 国产精品美女一区二区三区| 国产精品一区二区久激情瑜伽| 日韩一区二区免费视频| 亚洲国产色一区| 这里只有精品视频在线观看| 五月婷婷久久综合| 制服丝袜中文字幕亚洲| 美国精品在线观看| 欧美精品一区二区不卡| 国产·精品毛片| 亚洲天堂久久久久久久| 91国偷自产一区二区开放时间 | 亚洲综合无码一区二区| 91在线小视频| 亚洲观看高清完整版在线观看 | 欧美国产成人精品| 99国产一区二区三精品乱码| 亚洲美女屁股眼交3| 久久精品欧美一区二区三区麻豆 | 久久久99精品久久| 色综合视频在线观看| 一区二区三区四区视频精品免费 | 日本亚洲天堂网| 国产精品视频在线看| 精品视频在线视频| 国产精品一级在线| 亚洲黄色尤物视频| wwwwxxxxx欧美| 欧美日本视频在线| 国产电影一区在线| 免费在线看一区| 一区二区三区欧美激情| 久久久久久免费网| 欧美精品久久一区二区三区| 国产一区二区视频在线| 日韩专区一卡二卡| 亚洲午夜在线观看视频在线| 中文字幕高清一区| 久久综合久久鬼色| 欧美性一区二区| 精品久久国产97色综合| 97精品久久久午夜一区二区三区| 99在线精品一区二区三区| 欧美日韩一区高清| 欧美精品一区二区三区视频| 在线观看日韩精品| 99在线精品免费| 成人av先锋影音| 国产精品1区2区3区| 青青草97国产精品免费观看无弹窗版 | 91精品国产黑色紧身裤美女| 99精品黄色片免费大全| 国产精品一区二区x88av| 国产一区二区三区黄视频 | 欧美激情一区二区| 亚洲人成影院在线观看| 亚洲午夜精品17c| 日本中文一区二区三区| 国内精品国产成人国产三级粉色| 国产剧情一区在线| 色网综合在线观看| 日韩欧美中文一区二区| 国产精品水嫩水嫩| 日本伊人精品一区二区三区观看方式| 青椒成人免费视频| 成人自拍视频在线观看| 欧美日韩精品福利| 国产精品天天摸av网| 热久久久久久久| 波多野结衣亚洲| av福利精品导航| 免费观看在线综合色| 欧美日韩第一区日日骚| 视频一区二区三区在线| 日韩一级片网址| 国产一区二区视频在线播放| 欧美在线观看视频一区二区三区| 精品少妇一区二区三区在线播放| 亚洲一区免费在线观看| www.av亚洲| 国产精品毛片久久久久久| 日韩制服丝袜先锋影音| 99视频国产精品| 国产精品欧美一级免费| 国产黄色91视频| 国产精品久久久久久妇女6080 | 91丨九色丨尤物| 亚洲va欧美va国产va天堂影院| 国产黄人亚洲片| 久久精品视频网| 国产a区久久久| 亚洲欧美日韩精品久久久久| 国产 欧美在线| 日韩美女啊v在线免费观看| av成人免费在线| 亚洲成人激情av| 日韩视频一区在线观看| 日欧美一区二区| 国产精品久久久久影院老司| 成人av先锋影音| 一区二区三区免费观看| 欧美成人精品二区三区99精品| 精品一区二区三区视频| 中文字幕精品三区| 欧美影院精品一区| 狠狠狠色丁香婷婷综合久久五月| 久久精品无码一区二区三区| 91视频观看视频| 久久精品国产久精国产| 亚洲天堂中文字幕| 日韩精品一区二区在线| 91最新地址在线播放| 国产一区欧美日韩| 日韩精品欧美精品| 午夜私人影院久久久久| 国产精品成人在线观看| 国产性色一区二区| 国产日韩精品视频一区| 亚洲国产高清aⅴ视频| 久久伊人蜜桃av一区二区| wwww国产精品欧美| 国产三级一区二区三区| 精品视频免费在线| 91网页版在线| 成人av小说网| 国产91丝袜在线播放0| 国产一区啦啦啦在线观看| 亚洲国产欧美另类丝袜| 亚洲精品视频一区二区| 国产精品五月天| 国产精品免费免费| 国产精品乱人伦| 国产精品久久三区| 国产精品视频一二三| 国产人成亚洲第一网站在线播放 | 免费欧美在线视频| 亚洲成人免费看| 午夜精品一区二区三区电影天堂| 一区二区三区欧美激情| 日本不卡视频一二三区| 国产精品久久福利| 一区二区三区在线视频观看58| 亚洲午夜精品17c| 免费成人你懂的| 国产一区二区美女| 成人免费的视频| 717成人午夜免费福利电影| 日韩女优电影在线观看| 日本一区二区高清| 亚洲一区二区三区中文字幕| 亚洲综合小说图片| 奇米影视7777精品一区二区| 粉嫩蜜臀av国产精品网站| 成人福利视频网站| 欧美三级电影在线看| 精品久久久久久久久久久院品网| 久久久久99精品一区| 亚洲图片欧美视频| 国产超碰在线一区| 欧美日韩国产首页| 国产女同互慰高潮91漫画| 亚洲综合成人在线视频| 国产福利一区二区三区| 欧美亚洲高清一区| 国产色产综合产在线视频| 视频一区在线播放| 国产东北露脸精品视频| 这里只有精品视频在线观看| 国产欧美一区二区精品久导航|