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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tffmtd.c

?? vxWorks Mtd,issued version.
?? C
字號(hào):
*************************************************************************************************************************************************/ #ifdef	__cplusplusextern "C"{#endif#include "tffs/flflash.h"#include "tffs/backgrnd.h"#include "stdio.h"#include "taskLib.h"#define TIME_OUT 				(2000000*100)#define AM29LV320_START_ADDR 	0x51000000 /*flash base addr*//* Addresses */#define ADDR_MANUFACTURER_ID	0x0000#define ADDR_DEVICE_ID			0x0001#define ADDR_SECTOR_LOCK		0x0002#define ADDR_HANDSHAKE			0x0003#define ADDR_UNLOCK_1			0x0555#define ADDR_UNLOCK_2			0x02AA/* Commands */#define CMD_UNLOCK_DATA_1		0xAAAA#define CMD_UNLOCK_DATA_2		0x5555#define CMD_MANUFACTURER_UNLOCK_DATA	0x9090#define CMD_UNLOCK_BYPASS_MODE		0x2020#define CMD_PROGRAM_UNLOCK_DATA		0xA0A0#define CMD_RESET_DATA			0xF0F0#define CMD_SECTOR_ERASE_UNLOCK_DATA	0x8080#define CMD_SECTOR_ERASE_UNLOCK_DATA_2	0x3030#define CMD_CHIP_ERASE_UNLOCK_DATA_2	0x1010#define CMD_AUTOSELECT             0x9090#define AMD_READ_ARRAY		0xf0#define MANUFACTURER_ID 0x0001#define AM29LV320DB_ID	0x22F9#define AM29LV320MB_ID	0x227E/* Return codes from flash_status */#define STATUS_READY    0       /* ready for action */#define STATUS_BUSY     1       /* operation in progress */#define STATUS_ERSUSP   2       /* erase suspended */#define STATUS_TIMEOUT  3       /* operation timed out */#define STATUS_ERROR    4       /* unclassified but unhappy status */#undef MY_TFFS_DEBUG#ifdef MY_TFFS_DEBUG#define DEBUG_PRINT	printf#endif/*var*//*function declare*/LOCAL UINT8 AFlashStatus(UINT16 *flashptr);/******************************************************************** Function Name : static void FAR0 * am29lv320MTDMap()* Description : A pointer to the flash memory map function,maps flash 				into an area of memory * Input : * Output : none* Returns : the only thing the map routine needs to do is to return 			a pointer to the specified address in flash memory* Options : none*******************************************************************/static void FAR0 * am29lv320MTDMap(FLFlash vol, CardAddress addr, int inter){    UINT32 ret;    ret = AM29LV320_START_ADDR + addr;#ifdef MY_TFFS_DEBUG  DEBUG_PRINT("Debug: in i28f320MTDMap ret=0x%x\n",ret);#endif    vol.socket->remapped = TRUE;    return (void FAR0 *)ret;}/******************************************************************** Function Name :LOCAL UINT8 AFlashStatus(UINT16 *flashptr)* Description :  Flash_status utilizes the DQ6, DQ5, and DQ3 polling algorithms described *                in the flash data book.  It can quickly ascertain the  operational status*                of the flash device, and return an appropriate status code                    * Input : toggle address* Output :none* Returns :toggle satatus* Options : none*******************************************************************/ LOCAL UINT8 AFlashStatus(UINT16 *flashptr){	UINT16 data,temp;	ULONG retry =0;		taskDelay(0);		while(retry++<TIME_OUT)	{	 data = *flashptr;        /* read data */	 temp = data ^ *flashptr;    /* read it again and see what toggled */	 taskDelay(0);	 	 if (temp == 0)	  {           /* no toggles, nothing's happening */		return STATUS_READY;	  }	 else if (temp == 0x04)	  { /* erase-suspend */	   if(retry==TIME_OUT)		return STATUS_ERSUSP;	  }	 else if (temp & 0x40)	  {		if (data & 0x20)		 {     /* timeout */		  if(retry==TIME_OUT)		   return STATUS_TIMEOUT;		 }	    else	  	 {	  	  if(retry==TIME_OUT)	       return STATUS_BUSY;	     }	  }	}     /*cann't run here*/   return STATUS_ERROR;}/******************************************************************** Function Name : static FLStatus am29lv320Write(FLFlash vol,CardAddress address,			   const void FAR1 *buffer,int length,FLBoolean overwrite)* Description : Write a block of bytes to Flash* Input : 	vol			: Pointer identifying drive			*      		address		: Card address to write to			*      		buffer		: Address of data to write			*			length		: Number of bytes to write			*			overwrite	: TRUE if overwriting old Flash contents	*			  				FALSE if old contents are known to be erased	* Output : none* Returns : 0 on success, failed otherwise* Options : none*******************************************************************/static FLStatus am29lv320Write(FLFlash vol,			   CardAddress address,			   const void FAR1 *buffer,			   int length,			   FLBoolean overwrite){  int cLength;  FLStatus status = flOK;  FlashWPTR flashPtr,flashTmp;  volatile UINT16 *gBuffer;   if (flWriteProtected(vol.socket))    return flWriteProtect;  if ((length & 1) || (address & 1))	/* Only write words on word-boundary */    return flBadParameter;#ifdef SOCKET_12_VOLTS  checkStatus(flNeedVpp(vol.socket));#endif 	flashTmp = flashPtr = (FlashWPTR) vol.map(&vol, address, vol.interleaving);  	#ifdef MY_TFFS_DEBUG  DEBUG_PRINT("Debug: entering i28f320Write,flashPtr=0x%x address=0x%x\n",(UINT32)flashPtr,(unsigned int)address);#endif    cLength = length/2;    gBuffer = (UINT16 *)buffer;          while (cLength > 0) 	{   		*((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_1) = CMD_UNLOCK_DATA_1;          /*解鎖.*/		*((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_2) = CMD_UNLOCK_DATA_2;            	*((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_1) = CMD_PROGRAM_UNLOCK_DATA;		*flashPtr = *gBuffer;                                                    /*寫入數(shù)據(jù).*/				if(AFlashStatus((UINT16 *)flashPtr)!=STATUS_READY)             /*檢測(cè)寫入是否成功.*/		{		 printf("failed: write flash may failed at:0x%x.\n", (int)flashPtr);		 return(ERROR);		}		cLength--;		flashPtr++;		gBuffer++;	}		#ifdef SOCKET_12_VOLTS  flDontNeedVpp(vol.socket);#endif   /* verify the data */  if (status == flOK && tffscmpWords((void FAR0 *) flashTmp, (void FAR1 *) buffer,length)) {  #ifdef MY_TFFS_DEBUG    DEBUG_PRINT("Debug: write failed for 16-bit am29lv320 media in verification.\n");  #endif    status = flWriteFault;  }  return status;}/******************************************************************** Function Name : static FLStatus am29lv320Erase(FLFlash vol,			   int firstErasableBlock,int numOfErasableBlocks)* Description : Erase one or more contiguous Flash erasable blocks* Input : 	vol		: 			 Pointer identifying drive			*      		firstErasableBlock : Number of first block to erase		*			numOfErasableBlocks: Number of blocks to erase		* Output : none* Returns : FLStatus	: 0 on success, failed otherwise* Options : This routine will be registered as the MTD vol.erase routine*******************************************************************/static FLStatus am29lv320Erase(FLFlash vol,			   int firstErasableBlock,			   int numOfErasableBlocks){  FLStatus status = flOK;	/* unless proven otherwise */  FlashWPTR flashPtr;  UINT32 addr;  int i,flag;    if (flWriteProtected(vol.socket))    return flWriteProtect;    #ifdef SOCKET_12_VOLTS  checkStatus(flNeedVpp(vol.socket));#endif  /*flashPtr = (FlashWPTR) flMap(vol.socket,(firstErasableBlock) * vol.erasableBlockSize);*/  flashPtr = (FlashWPTR) vol.map (&vol,(firstErasableBlock) * vol.erasableBlockSize,vol.interleaving);#ifdef MY_TFFS_DEBUG  DEBUG_PRINT("Debug: entering i28f320Erase,flashPtr=0x%x firstErasableBlock=0x%x numOfErasableBlocks=0x%x\n",(UINT32)flashPtr,               firstErasableBlock,numOfErasableBlocks);#endif  	  for(i=0;i<numOfErasableBlocks;i++)   {	addr = (UINT32)flashPtr + (UINT32)(i * vol.erasableBlockSize);    *((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_1) = CMD_UNLOCK_DATA_1;			/*連續(xù)解鎖.*/	*((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_2) = CMD_UNLOCK_DATA_2;	*((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_1) = CMD_SECTOR_ERASE_UNLOCK_DATA;	*((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_1) = CMD_UNLOCK_DATA_1;	*((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_2) = CMD_UNLOCK_DATA_2;		flag=AFlashStatus((UINT16 *)flashPtr);		*(volatile UINT16 *)flashPtr = CMD_SECTOR_ERASE_UNLOCK_DATA_2;			/*寫入擦除命令.*/	if((flag=AFlashStatus((UINT16 *)flashPtr))!=STATUS_READY)	 {	  if(flag==STATUS_TIMEOUT)	  {	   printf("warning: Chip Erase time out!\n");		   return ERROR;	  }	  else if(flag==STATUS_BUSY)	  {		   printf("warning: Chip Erase busy!\n");		   return ERROR;	  }	  else if(flag==STATUS_ERSUSP)	  {	   printf("warning: Chip Erase suspended!\n");	   return ERROR;	  }	  else	  {	   ;	  }	 }   }#ifdef SOCKET_12_VOLTS  flDontNeedVpp(vol.socket);#endif  return status;}/******************************************************************** Function Name : FLStatus am29lv320Identify(FLFlash vol)* Description : Identifies media based on am29lv320Identify and registers as an MTD * Input : 	vol	: Pointer identifying drive	* Output : none* Returns : FLStatus	: 0 on positive identificaion, failed otherwise* Options : This routine will be placed on the MTD list in custom.h. It must be	*			an extern routine.*******************************************************************/FLStatus am29lv320Identify(FLFlash vol){  FlashWPTR flashPtr;  UINT16 manCode=0;  UINT16 devCode=0;#ifdef MY_TFFS_DEBUG  DEBUG_PRINT("Debug: entering 16-bit am29lv320 media identification routine.\n");#endif  flSetWindowBusWidth(vol.socket,16);/* use 16-bits */  flSetWindowSpeed(vol.socket,120);  /* 120 nsec. */  flSetWindowSize(vol.socket,2);	/*  KBytes */   /* flashPtr = (FlashWPTR) flMap(vol.socket,(CardAddress)0);*/  flashPtr = (FlashWPTR)vol.map (&vol, (CardAddress)0, vol.interleaving);     *((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_1) = CMD_UNLOCK_DATA_1;         /*解鎖.*/  *((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_2) = CMD_UNLOCK_DATA_2;#ifdef MY_TFFS_DEBUG  DEBUG_PRINT("Debug: in am29lv320Identify flashPtr=0x%x\n",(UINT32)flashPtr);#endif  vol.noOfChips = 0;  *((volatile UINT16 *)AM29LV320_START_ADDR + ADDR_UNLOCK_1) = CMD_AUTOSELECT;  manCode=*((volatile UINT16*)(flashPtr+ADDR_MANUFACTURER_ID));  devCode=*((volatile UINT16*)(flashPtr+ADDR_DEVICE_ID));  #ifdef MY_TFFS_DEBUG  DEBUG_PRINT("Debug: man_ID=0x%x device_ID=0x%x\n",manCode,devCode);#endif    if (manCode == MANUFACTURER_ID && (devCode==AM29LV320DB_ID || devCode==AM29LV320MB_ID))   {    /* Word mode */    vol.type = MANUFACTURER_ID;    vol.interleaving = 1;    flashPtr[0] = AMD_READ_ARRAY;   }  else   {    if (vol.interleaving == 1)      vol.type = NOT_FLASH;	/* We cannot handle byte-mode interleaving-1 */   }  if (vol.type == MANUFACTURER_ID)   {    vol.chipSize = 0x400000L;    vol.erasableBlockSize = 0x10000L * vol.interleaving;      vol.noOfChips =0x1;	                                              /*one chip.*/        vol.write = am29lv320Write;    vol.erase = am29lv320Erase;    vol.map   = am29lv320MTDMap;    flashPtr[0] = AMD_READ_ARRAY;  #ifdef MY_TFFS_DEBUG    DEBUG_PRINT("Debug: identified 16-bit am29lv320 media.\n");  #endif    return flOK;   }  else   {  #ifdef MY_TFFS_DEBUG    DEBUG_PRINT("Debug: failed to identify 16-bit am29lv320 media.\n");  #endif    return flUnknownMedia; 	/* not ours */   }}#if	1/*----------------------------------------------------------------------*//*                   f l R e g i s t e r 28f320			*//*									*//* Registers this MTD for use						*//*									*//* Parameters:                                                          *//*	None								*//*                                                                      *//* Returns:								*//*	FLStatus	: 0 on success, otherwise failure		*//*----------------------------------------------------------------------*/FLStatus flRegisterAm29lv320(void){  if (noOfMTDs >= MTDS)    return flTooManyComponents;  mtdTable[noOfMTDs++] = am29lv320Identify;  return flOK;}#endif	/* FALSE */#ifdef	__cplusplus}#endif	/* end of __cplusplus */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情六月婷婷综合| 日韩av在线免费观看不卡| 国产精品456露脸| 精品国产91九色蝌蚪| 国产另类ts人妖一区二区| 日韩一区二区免费视频| 激情综合色丁香一区二区| 2021国产精品久久精品| 成人午夜av影视| 亚洲综合一二三区| 91麻豆精品91久久久久同性| 精品一区二区三区在线播放视频 | 色香蕉成人二区免费| 一区二区三区在线观看动漫| 欧美日韩精品久久久| 久久99国内精品| 国产精品视频在线看| 欧美亚一区二区| 欧美bbbbb| 国产精品入口麻豆九色| 欧美色综合影院| 美女mm1313爽爽久久久蜜臀| 久久久久高清精品| www.欧美色图| 丝袜亚洲另类丝袜在线| 国产无人区一区二区三区| 91国内精品野花午夜精品| 免费xxxx性欧美18vr| 国产精品久久久爽爽爽麻豆色哟哟| 色噜噜狠狠色综合中国| 日本伊人精品一区二区三区观看方式| 26uuu久久综合| 91免费国产视频网站| a级高清视频欧美日韩| 久久嫩草精品久久久精品| 一区二区三区在线播放| 欧美大片在线观看| 一本一道久久a久久精品| 极品销魂美女一区二区三区| 一区二区三区日本| 久久久久久久久久久黄色| 欧美视频在线观看一区二区| 国产河南妇女毛片精品久久久| 亚洲一卡二卡三卡四卡无卡久久| 久久婷婷成人综合色| 欧美日韩国产bt| 99国产精品久| 国产福利不卡视频| 免费观看久久久4p| 亚洲高清视频在线| 亚洲欧洲日韩av| 久久新电视剧免费观看| 欧美日韩在线播放三区四区| 99久久久久久99| 国产电影一区二区三区| 日本欧美一区二区| 亚洲国产成人tv| 国产精品不卡在线观看| 久久久国产一区二区三区四区小说 | 美女高潮久久久| 一级日本不卡的影视| 国产精品丝袜91| 国产偷v国产偷v亚洲高清| 欧美一区二区啪啪| 欧美日韩中文字幕精品| 色婷婷av久久久久久久| 91在线播放网址| 成人黄色av电影| 韩日av一区二区| 精品亚洲国产成人av制服丝袜| 日韩在线一区二区三区| 亚洲成av人片一区二区| 亚洲va韩国va欧美va精品| 一区二区三区在线视频免费 | 蜜桃av一区二区三区电影| 亚洲国产精品嫩草影院| 亚洲伊人色欲综合网| 亚洲综合在线视频| 亚洲国产视频在线| 亚洲激情av在线| 亚洲一区二区偷拍精品| 亚洲国产另类精品专区| 亚洲成人资源网| 日韩av电影免费观看高清完整版| 婷婷中文字幕一区三区| 青青草原综合久久大伊人精品| 美女在线视频一区| 精品在线免费视频| 国产99久久久国产精品| 9色porny自拍视频一区二区| 91免费版在线看| 欧美日韩综合在线免费观看| 欧美精品在线一区二区三区| 欧美日韩国产三级| 日韩一区二区精品| 久久久久97国产精华液好用吗| 国产精品丝袜久久久久久app| 中文字幕中文乱码欧美一区二区 | 五月婷婷激情综合| 日本在线观看不卡视频| 韩国女主播成人在线观看| 成人午夜免费视频| 欧美在线一二三| 欧美一级专区免费大片| 国产婷婷精品av在线| 亚洲精品视频观看| 男人的j进女人的j一区| 国产一区二区在线电影| 色综合亚洲欧洲| 欧美成人猛片aaaaaaa| 国产精品系列在线| 亚洲一区影音先锋| 国产一区二区三区久久久| 91亚洲精品久久久蜜桃网站 | 亚洲日本成人在线观看| 午夜欧美一区二区三区在线播放| 九九热在线视频观看这里只有精品| 国产福利一区二区| 欧美色图一区二区三区| 久久久久久久久伊人| 亚洲一二三区不卡| 国产成人精品综合在线观看 | 日韩视频在线一区二区| 亚洲国产激情av| 天天操天天色综合| aaa国产一区| 精品免费一区二区三区| 亚洲欧美偷拍卡通变态| 国产在线国偷精品免费看| 欧美性色黄大片| 欧美国产欧美综合| 美女网站色91| 欧洲视频一区二区| 中文字幕欧美激情| 免费高清视频精品| 欧美色综合影院| 国产精品护士白丝一区av| 精品在线亚洲视频| 7777精品伊人久久久大香线蕉超级流畅 | 国产日韩欧美制服另类| 水野朝阳av一区二区三区| av电影在线观看不卡| 91精品国产欧美日韩| 一区二区三区小说| 成人免费观看视频| 欧美一二三在线| 亚洲丝袜另类动漫二区| 高清不卡一区二区| 久久综合九色综合欧美就去吻| 视频一区二区三区中文字幕| 91福利视频网站| 亚洲欧美日韩国产中文在线| 国产馆精品极品| 久久久一区二区三区捆绑**| 蜜臀91精品一区二区三区| 欧美日韩高清影院| 亚洲综合区在线| 91丨porny丨国产入口| 国产欧美日韩综合精品一区二区| 毛片av中文字幕一区二区| 这里只有精品99re| 日韩成人免费电影| 91精品蜜臀在线一区尤物| 五月激情六月综合| 欧美群妇大交群中文字幕| 亚洲一二三区在线观看| 欧美色图片你懂的| 亚洲一区二区高清| 欧美剧情片在线观看| 视频在线观看一区| 欧美一区二区三区日韩视频| 日本欧美在线观看| 日韩精品一区在线观看| 精品一区精品二区高清| 久久在线免费观看| 国产不卡在线一区| 国产精品色哟哟| av在线播放不卡| 亚洲精品免费电影| 欧美综合欧美视频| 午夜精品福利视频网站| 91精品国产欧美一区二区18| 精品在线播放免费| 国产欧美一区二区精品忘忧草| voyeur盗摄精品| 亚洲综合在线免费观看| 欧美一级爆毛片| 国产成人8x视频一区二区| 国产精品对白交换视频| 欧美三区在线观看| 久久精品国产999大香线蕉| 国产丝袜欧美中文另类| 91日韩一区二区三区| 天天免费综合色| 国产亚洲婷婷免费| 一本色道亚洲精品aⅴ| 日韩精品91亚洲二区在线观看| 久久综合九色欧美综合狠狠| 91日韩一区二区三区| 日本不卡的三区四区五区|