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

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

?? 39vf6401.c

?? vxworksst39vf6401驅動及TFFS
?? C
字號:
#include "tffs/flflash.h"
#include "tffs/backgrnd.h"
#include "stdio.h"
#include "config.h"
#include "intLib.h"

/*需與sysTffs.c中相同定義一致*/
#define	TFLASH_BASE_ADRS	    (0x00200000)
#define	TFLASH_SIZE		    (0x00600000)

typedef struct 
{
	FlashWPTR	unlockAddr1;
	FlashWPTR  	unlockAddr2;
} Vars;

static Vars mtdVars[DRIVES];

#define thisVars   ((Vars *) vol.mtdVars)

#define SETUP_ERASE		0x80
#define SETUP_WRITE		0xa0
#define READ_ID 		0x90
#define SECTOR_ERASE	        0x30
#define BLOCK_ERASE		0x50		/*塊擦除*/
#define READ_ARRAY		0xf0        /*軟件ID讀模式退出*/

#define UNLOCK_1		0xaa        /*解鎖寫入值*/
#define UNLOCK_2	        0x55

#define UNLOCK_ADDR1    	0x5555		   /*解鎖偏移地址[字]*/
#define UNLOCK_ADDR2	        0x2aaa

/* JEDEC ids for this MTD */
#define  LV6401B_DEID           0x236d     	/*設備ID*/

#define DEBUG_PRINT		printErr

static STATUS  lv6401OpOverDetect(void * ptr,  int timeCounter);




/*------------------------------------------------------------------------
 Procedure:     lv6401MTDMap ID:1
 Purpose:       映射Flash片內地址為CPU全局地址
 Input:         addr-相對地址
 Output:		
 Errors:
------------------------------------------------------------------------*/
static void FAR0 *lv6401MTDMap(FLFlash *vol, CardAddress addr, int length)
{
	UINT32 ret;
	ret = TFLASH_BASE_ADRS + addr;
	return (void FAR0 *)ret;
}
/*------------------------------------------------------------------------
 Procedure:     lv6401OpOverDetect ID:1
 Purpose:       探測write,erase操作是否結束,超時錯誤
 Input:         
 Output:		
 Errors:
------------------------------------------------------------------------*/
static STATUS  lv6401OpOverDetect(void * ptr,  int timeCounter)
{
	FlashWPTR pFlash = ptr;
	INT16 buf1,buf2;
	
	buf1 = *pFlash & 0x40;
	while(1)
	{
		    buf2  = *pFlash & 0x40;
		    if(buf1 == buf2) 
				break;
		    else
			    buf1 = buf2;
		    if(timeCounter-- <= 0) 
		    {
				return ERROR;
		    }
	}

	return OK;
}
/*------------------------------------------------------------------------
 Procedure:     lv6401MTDWrite ID:1
 Purpose:       MTD寫Flash函數
 Input:         
 Output:		
 Errors:
------------------------------------------------------------------------*/
static FLStatus lv6401MTDWrite(FLFlash vol, CardAddress address, const void FAR1 *buffer, int length, FLBoolean overwrite)
{
	int cLength;
	FlashWPTR flashPtr, flashTmp;
	volatile UINT16 *gBuffer;

        int i=intLock();

	flashTmp = flashPtr = (FlashWPTR) vol.map(&vol, address, length);

	if(length&1)
	{
	/*	printf("warning! the data length can not divided by 2.");*/	
	} 
	cLength = length/2;

	gBuffer = (UINT16 *)buffer;

	while (cLength >= 1) 
	{
	    *thisVars->unlockAddr1 = UNLOCK_1;
    	    *thisVars->unlockAddr2 = UNLOCK_2;
	    *thisVars->unlockAddr1 = SETUP_WRITE;

		*flashPtr = *gBuffer;
		
		if(lv6401OpOverDetect((void *)flashPtr, 0x1000000));
		if(*flashPtr != *gBuffer)
		{
			*flashPtr = READ_ARRAY;
			#ifdef DEBUG_PRINT
			DEBUG_PRINT("Debug: lv6401MTDWrite timeout.\n");
			#endif
			return flWriteFault;
		}
		cLength--;
		flashPtr++;
		gBuffer++;
	}

	if (tffscmp((void FAR0 *) flashTmp, buffer,length))
	{
		/* verify the data */
		#ifdef DEBUG_PRINT
		  DEBUG_PRINT("Debug: lv6401MTDWrite fail.\n");
		#endif
		return flWriteFault;
	}

        intUnlock(i);
	return flOK;
}
/*------------------------------------------------------------------------
 Procedure:     lv6401MTDWrite ID:1
 Purpose:       MTD擦除Flash函數
 Input:         
 Output:		
 Errors:
------------------------------------------------------------------------*/
static FLStatus lv6401MTDErase(FLFlash vol, int firstErasableBlock, int numOfErasableBlocks)
{
	int iBlock; 		
	FlashWPTR flashPtr;
	unsigned int offset;
	
        int i=intLock();

	if(numOfErasableBlocks <= 0) return ERROR;

	for (iBlock = 0; iBlock < numOfErasableBlocks; iBlock++) 
	{
		int i;
		offset = (firstErasableBlock + iBlock) * vol.erasableBlockSize;
		flashPtr = (FlashWPTR) vol.map(&vol, offset, vol.interleaving);

		*thisVars->unlockAddr1 = UNLOCK_1;
	       *thisVars->unlockAddr2 = UNLOCK_2;
	       *thisVars->unlockAddr1 = SETUP_ERASE;
		*thisVars->unlockAddr1 = UNLOCK_1;
	       *thisVars->unlockAddr2 = UNLOCK_2;
		*flashPtr = SECTOR_ERASE;

		lv6401OpOverDetect((void *)flashPtr, 0x2000000);				  
		for(i=0; i<vol.erasableBlockSize/2; i++,flashPtr++)  
		{
		   if(*flashPtr != 0xffff)  break;
		}

		*flashPtr = READ_ARRAY;
			
		if(i < vol.erasableBlockSize/2)
		{
			#ifdef DEBUG_PRINT
			  DEBUG_PRINT("Debug: lv6401MTDErase fail.\n");
			#endif
			return flWriteFault;
		}
	}

	 intUnlock(i);

	/*printf("\Erase ok\n");*/
	return flOK;
}
/*------------------------------------------------------------------------
 Procedure:     fllv6401Identify ID:1
 Purpose:       MTD讀Flash標識
 Input:         
 Output:		
 Errors:
------------------------------------------------------------------------*/
 static FLStatus fllv6401Identify(FLFlash vol, UINT32 offset)
{

	FlashWPTR flashPtr;
	
	flashPtr = (FlashWPTR) vol.map(&vol, 0, vol.interleaving);
	/*printf("\nenter the fllv160Identify\n");*/

	 *thisVars->unlockAddr1 = UNLOCK_1;
        *thisVars->unlockAddr2 = UNLOCK_2;
        *thisVars->unlockAddr1 = READ_ID;


/*    printf("\nthisVars->unlockAddr1 %x,*thisVars->unlockAddr2 %x\n", thisVars->unlockAddr1, thisVars->unlockAddr2);*/

    /* 0X01 read device Id, 0X00 manufacture Id.*/
      flashPtr = (FlashWPTR) vol.map(&vol, offset, vol.interleaving);  
 
/*	printf("\nthe flashPtr is %x\n",flashPtr);*/
	
	vol.type = *flashPtr; 
	flashPtr = (FlashWPTR)vol.map(&vol, 0, vol.interleaving) ;
	*flashPtr = READ_ARRAY;    /*回到讀狀態*/


  	return flOK;
}
/*------------------------------------------------------------------------
 Procedure:     lv6401MTDIdentify ID:1
 Purpose:       MTD讀Flash標識[extern]
 Input:         
 Output:		
 Errors:
------------------------------------------------------------------------*/
FLStatus lv6401MTDIdentify(FLFlash vol)
{
	FlashWPTR  baseFlashPtr;
        int i;
	vol.interleaving = 1;

	flSetWindowBusWidth(vol.socket,16);/* use 16-bits */
	flSetWindowSpeed(vol.socket,120);  /* 120 nsec. */
	flSetWindowSize(vol.socket, TFLASH_SIZE>>12);
	vol.chipSize = TFLASH_SIZE;
	vol.map   = lv6401MTDMap;
	vol.mtdVars = &mtdVars[flSocketNoOf(vol.socket)];
	baseFlashPtr = (FlashWPTR)vol.map (&vol, (CardAddress)0, vol.interleaving);

/*	  printf("\nthe baseFlashPtr is %x\n",baseFlashPtr);*/

	/*UNLOCK_ADDR為字地址, 賦值轉換x2*/
        thisVars->unlockAddr1 = (FlashWPTR)((long)baseFlashPtr) + UNLOCK_ADDR1;
	 thisVars->unlockAddr2 = (FlashWPTR)((long)baseFlashPtr) + UNLOCK_ADDR2;
        /*get flash device ID.*/

        i=intLock();/*close interrupt */
		
	 fllv6401Identify(&vol, 2); 
      	
        intUnlock(i);/*release interrupt*/


/*	printf("\nthe thisVars->unlockAddr1 is %x, thisVars->unlockAddr2 is %x\n",thisVars->unlockAddr1,thisVars->unlockAddr2);

        printf("\nthe type is %x\n",vol.type);*/
	if (vol.type != LV6401B_DEID)
	{
	  #ifdef DEBUG_PRINT
	    DEBUG_PRINT("Debug: can not identify SST39VF6401 media.\n");
	  #endif
	    return flUnknownMedia;
	}

	vol.noOfChips =0x1;	                /*one chip.*/
	vol.erasableBlockSize = 0x10000;  	/* 64k bytes.*/
	vol.flags |= SUSPEND_FOR_WRITE;

	/* Register our flash handlers */
	vol.write = lv6401MTDWrite;
	vol.erase = lv6401MTDErase;


/*	printf("\nidentify ok\n");*/
	return flOK;
}
/*
void mount_tffs(void) 
{
 tffsDevFormat(); 
 usrTffsConfig(0,0,"/tffs0");
}
void ftp_tffs(void)
{
 if(ioDefPathSet("/tffs0")!=-1)
{
  if(loginUserAdd("whl","RQcRcRSS9e")!=-1)
   printf("ftp_tffs ok!!!!");
  else  printf("login error!!!!");
}
 else printf("set ftp path error!!!!");
}*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草精品视频| 青青草国产精品亚洲专区无| 欧美一级免费大片| 欧美日韩亚洲国产综合| 91色视频在线| 欧美在线观看一二区| 欧美丝袜丝交足nylons| 91免费视频网| 欧美日韩一区二区在线观看| 91行情网站电视在线观看高清版| 91蜜桃视频在线| 欧美性xxxxxx少妇| 欧美群妇大交群中文字幕| 91精品国产综合久久小美女| 日韩视频一区二区在线观看| 欧美电影免费观看高清完整版在 | 蜜桃视频一区二区三区| 麻豆久久久久久久| 国产999精品久久| 色婷婷综合久久久中文一区二区| 色噜噜狠狠一区二区三区果冻| 欧洲一区二区av| 日韩一区国产二区欧美三区| 久久精品亚洲精品国产欧美kt∨| 国产精品成人免费精品自在线观看| 亚洲情趣在线观看| 日韩精品每日更新| 国产成人综合精品三级| 在线欧美日韩国产| 精品91自产拍在线观看一区| 综合色天天鬼久久鬼色| 日韩成人伦理电影在线观看| 成人自拍视频在线| 在线播放视频一区| 国产精品丝袜91| 视频一区二区三区中文字幕| 国产高清不卡一区| 欧美精品久久天天躁| 国产精品三级av在线播放| 丝袜美腿亚洲综合| 99re视频这里只有精品| 欧美mv日韩mv国产网站| 一区二区在线观看免费| 国产一区二区三区免费看| 在线视频一区二区免费| 久久久www免费人成精品| 亚洲国产欧美在线人成| 国产ts人妖一区二区| 欧美一级黄色片| 亚洲一区自拍偷拍| 成人性视频网站| 欧美一级高清片在线观看| 亚洲靠逼com| 成人在线综合网| 精品国产乱码久久久久久牛牛| 一区二区三区精品| 99久久婷婷国产综合精品| 26uuu国产在线精品一区二区| 一区二区三区在线观看视频| 国产suv精品一区二区三区| 欧美一级高清大全免费观看| 亚洲黄色免费电影| kk眼镜猥琐国模调教系列一区二区| 欧美成人aa大片| 丝袜诱惑亚洲看片 | 亚洲综合丝袜美腿| 成人免费视频视频| 国产欧美日韩麻豆91| 精品一区二区三区免费| 欧美一级夜夜爽| 日日摸夜夜添夜夜添精品视频| 色综合久久88色综合天天6| 中文字幕成人在线观看| 国产白丝精品91爽爽久久| 国产亚洲欧美一级| 国产精品亚洲а∨天堂免在线| 精品对白一区国产伦| 激情国产一区二区| 久久人人爽爽爽人久久久| 激情文学综合丁香| 国产日韩欧美综合一区| 成人激情小说网站| 国产精品第一页第二页第三页| 成人免费毛片片v| 中文字幕一区二区三区在线观看| 97久久超碰精品国产| 亚洲免费观看高清在线观看| 在线精品视频免费播放| 午夜精品一区二区三区免费视频| 欧美肥妇bbw| 精品一区二区在线看| 国产欧美日韩在线| 91免费小视频| 日本欧洲一区二区| 久久久高清一区二区三区| av电影天堂一区二区在线观看| 亚洲欧美日韩在线不卡| 欧美日韩国产精品成人| 久久丁香综合五月国产三级网站| 久久久午夜精品| 色视频一区二区| 美女一区二区久久| 中文字幕免费一区| 欧美日韩一区二区在线观看视频| 经典三级视频一区| 亚洲蜜臀av乱码久久精品| 欧美一区二区成人6969| 成人性视频网站| 日韩激情视频在线观看| 日本一区二区在线不卡| 欧美日韩在线免费视频| 国产美女精品一区二区三区| 亚洲欧美日韩中文播放| 精品国产污污免费网站入口| 91蜜桃网址入口| 国产精品资源站在线| 亚洲国产婷婷综合在线精品| 久久久久久电影| 欧美体内she精高潮| 国产91高潮流白浆在线麻豆| 日欧美一区二区| 亚洲视频中文字幕| 精品裸体舞一区二区三区| 91福利在线看| 成人免费视频app| 精品一区二区三区免费播放| 蜜臀av一区二区在线观看| 国产精品久99| 久久精品夜色噜噜亚洲aⅴ| 在线不卡一区二区| 色噜噜狠狠成人网p站| 国产九色精品成人porny| 热久久一区二区| 亚洲成人一二三| 亚洲欧美日韩国产手机在线| 国产色一区二区| 2021中文字幕一区亚洲| 欧美精品成人一区二区三区四区| 色综合色狠狠综合色| 成人av资源下载| 成人综合在线观看| 国产成人av资源| 国产精品影视网| 国产在线视频不卡二| 日本女优在线视频一区二区| 亚洲制服丝袜一区| 一区二区三区91| 亚洲精品ww久久久久久p站 | 99re亚洲国产精品| 成人高清免费观看| 99久久伊人久久99| 91玉足脚交白嫩脚丫在线播放| 成人精品一区二区三区中文字幕| 国产a久久麻豆| 不卡一区中文字幕| 99re热视频精品| 91视视频在线观看入口直接观看www | 久久久久国产精品厨房| 26uuu成人网一区二区三区| 精品久久久网站| 久久久一区二区| 中文字幕一区二区三区乱码在线| 欧美国产欧美综合| 中文字幕日韩一区| 亚洲一二三区不卡| 日韩精品电影在线| 国产综合久久久久久鬼色| 国产精品一区二区x88av| 欧美日韩不卡视频| 91精品综合久久久久久| 欧美mv日韩mv国产网站app| 国产亚洲精品精华液| 亚洲欧美日韩在线| 日本不卡123| 成人av网在线| 欧美亚洲高清一区二区三区不卡| 欧美一三区三区四区免费在线看 | 欧美亚洲综合色| 欧美一级生活片| 国产精品系列在线| 亚洲高清免费视频| 国产裸体歌舞团一区二区| 99热99精品| 欧美成人官网二区| 亚洲欧美乱综合| 卡一卡二国产精品| 91一区在线观看| 日韩无一区二区| 亚洲精品美腿丝袜| 精品一区二区三区在线观看| 99九九99九九九视频精品| 91精品欧美一区二区三区综合在| 国产日韩成人精品| 日韩av一区二区在线影视| 国产mv日韩mv欧美| 日韩欧美一二三四区| 一区二区三区不卡在线观看| 麻豆久久久久久| 欧美日韩aaaaaa| 亚洲另类中文字|