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

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

?? flash.c

?? 嵌入式開發板451的butlod
?? C
字號:
#include "types.h"#include "bioscall.h"#include "flash.h"const struct flash_info table[] = {	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF040,		name: "SST SST39VF040",		size: 0x00080000,		erasesize: 0x01000	},	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF080,		name: "SST SST39VF080",		size: 0x00100000,		erasesize: 0x01000	},	{		mfr_id: MANUFACTURER_SST,		dev_id: SST39VF016,		name: "SST SST39VF016",		size: 0x00200000,		erasesize: 0x01000	}};
struct mtd_info mtd;static unsigned char read8(struct mtd_info *mtd, unsigned long adr){	return *(unsigned char *)((mtd->offset + adr) | NOCACHE_BIT);}static unsigned short read16(struct mtd_info *mtd, unsigned long adr){	return *(unsigned short *)((mtd->offset + adr) | NOCACHE_BIT);}static unsigned long read32(struct mtd_info *mtd, unsigned long adr){	return *(unsigned long *)((mtd->offset + adr) | NOCACHE_BIT);}static void write8(struct mtd_info *mtd, unsigned char d, unsigned long adr){	*(unsigned char *)((mtd->offset + adr) | NOCACHE_BIT) = d;}static void write16(struct mtd_info *mtd, unsigned short d, unsigned long adr){	*(unsigned short *)((mtd->offset + adr) | NOCACHE_BIT) = d;}static void write32(struct mtd_info *mtd, unsigned long d, unsigned long adr){	*(unsigned long *)((mtd->offset + adr) | NOCACHE_BIT) = d;}static wide_read(struct mtd_info *mtd, unsigned long addr){	if (mtd->buswidth == 1) {		return read8(mtd, addr);	} else if (mtd->buswidth == 2) {		return read16(mtd, addr);	} else if (mtd->buswidth == 4) {		return read32(mtd, addr);        }	return 0;}static void wide_write(struct mtd_info *mtd, unsigned long val, unsigned long addr){	if (mtd->buswidth == 1) {		write8(mtd, val, addr);	} else if (mtd->buswidth == 2) {		write16(mtd, val, addr);	} else if (mtd->buswidth == 4) {		write32(mtd, val, addr);	}}static unsigned long make_cmd(struct mtd_info *mtd, unsigned long cmd){	return cmd;}static void send_unlock(struct mtd_info *mtd, unsigned long base){	wide_write(mtd, (CMD_UNLOCK_DATA_1 << 16) | CMD_UNLOCK_DATA_1,		   base + (mtd->buswidth * ADDR_UNLOCK_1));	wide_write(mtd, (CMD_UNLOCK_DATA_2 << 16) | CMD_UNLOCK_DATA_2,		   base + (mtd->buswidth * ADDR_UNLOCK_2));}static void send_cmd(struct mtd_info *mtd, unsigned long base, unsigned long cmd){	send_unlock(mtd, base);	wide_write(mtd, make_cmd(mtd, cmd),		   base + (mtd->buswidth * ADDR_UNLOCK_1));}static void send_cmd_to_addr(struct mtd_info *mtd, unsigned long base,				    unsigned long cmd, unsigned long addr){	send_unlock(mtd, base);	wide_write(mtd, make_cmd(mtd, cmd), addr);}static int probe_chip(struct mtd_info *mtd, unsigned long base, struct flchip *chip){	unsigned long mfr_id;	unsigned long dev_id;	int table_size = sizeof(table) / sizeof(table[0]);	int i;	/* Enter autoselect mode. */	send_cmd(mtd, base, CMD_RESET_DATA);	send_cmd(mtd, base, CMD_MANUFACTURER_UNLOCK_DATA);	mfr_id = wide_read(mtd, base + (mtd->buswidth * ADDR_MANUFACTURER));	dev_id = wide_read(mtd, base + (mtd->buswidth * ADDR_DEVICE_ID));	/* Exit autoselect mode. */	send_cmd(mtd, base, CMD_RESET_DATA);	for (i = 0; i < table_size; i++) {		if ((mfr_id == table[i].mfr_id) &&		    (dev_id == table[i].dev_id)) {			if (chip) {				chip->start = base;				chip->size = table[i].size;				chip->erasesize = table[i].erasesize;				printf("Found ");				printf(table[i].name);				printf(" at %08x\r\n", base);			}			break;		}	}	if (i == table_size)		return -1;	return 0;}static int flash_is_busy(struct mtd_info *mtd, unsigned long addr){	return ((wide_read(mtd, addr) & D6_MASK) !=		(wide_read(mtd, addr) & D6_MASK));}static int erase_one_block(struct mtd_info *mtd, struct flchip *chip,	unsigned long adr, unsigned long size){	int times_left;	int ret = 0;	adr += chip->start;	send_cmd(mtd, chip->start, CMD_SECTOR_ERASE_UNLOCK_DATA);	send_cmd_to_addr(mtd, chip->start, CMD_SECTOR_ERASE_UNLOCK_DATA_2, adr);	times_left = 500000;	while (times_left-- && flash_is_busy(mtd, adr));	if (!times_left) {		ret = -1;	}	return 0;}static int flash_erase_internal(struct mtd_info *mtd, unsigned long adr, unsigned long size){	struct flchip *chip;	int chip_start, chip_end;	int i, n;	for (i = 0; i < mtd->numchips; i++) {		chip = &mtd->chips[i];		chip_start = chip->start;		chip_end = chip->start + chip->size;		if ((adr >= chip_end) || (adr + size <= chip_start))			continue;		if (chip_start < adr)			chip_start = adr;		if (chip_end > adr + size)			chip_end = adr + size;		for (n = chip_start; n < chip_end; n += mtd->erasesize) {			erase_one_block(mtd, chip, n - chip->start, mtd->erasesize);		}	}	return 0;}static int flash_read_internal(struct mtd_info *mtd, unsigned long from,	unsigned long len, unsigned long *retlen, unsigned char *buf){	if ((from + len) > mtd->size)		return -1;	memcpy(buf, (char *)((mtd->offset + from) | NOCACHE_BIT), len);	*retlen = len;	return 0;}static int write_one_word(struct mtd_info *mtd, struct flchip *chip,			  unsigned long adr, unsigned long datum){	int times_left;	int ret = 0;	adr += chip->start;	send_cmd(mtd, chip->start, CMD_PROGRAM_UNLOCK_DATA);	wide_write(mtd, datum, adr);	times_left = 500000;	while (times_left-- && flash_is_busy(mtd, adr));	if (!times_left) {		ret = -1;	}	return ret;}static int flash_write_internal(struct mtd_info *mtd, unsigned long to,	unsigned long len, unsigned long *retlen, const unsigned char *buf){	struct flchip *chip;	int chip_start, chip_end;	int i, n;	*retlen = 0;	for (i = 0; i < mtd->numchips; i++) {		chip = &mtd->chips[i];		chip_start = chip->start;		chip_end = chip->start + chip->size;		if ((to >= chip_end) || (to + len <= chip_start))			continue;		if (chip_start < to)			chip_start = to;		if (chip_end > to + len)			chip_end = to + len;		for (n = chip_start; n < chip_end; n++) {			write_one_word(mtd, chip, n - chip->start, buf[n - to]);		}		*retlen += chip_end - chip_start;	}	return 0;}int flash_init(void){	unsigned long flash_base;	struct flchip *chip;	int i;	mtd.offset = bios_rom_base();	mtd.buswidth = 1;	mtd.size = 0;	mtd.numchips = 0;	flash_base = 0;	for (i = 0; i < MAX_CHIPS; i++) {		chip = &mtd.chips[i];		if (probe_chip(&mtd, flash_base, chip) == 0) {			if (i == 0)				mtd.erasesize = chip->erasesize;			else {				if (mtd.erasesize != chip->erasesize)					break;			}			mtd.size += chip->size;			mtd.numchips++;			flash_base+= chip->size;		} else			break;	}	return 0;}int flash_erase(unsigned long adr, unsigned long size){	return flash_erase_internal(&mtd, adr, size);}int flash_read(unsigned long from,	unsigned long len, unsigned long *retlen, unsigned char *buf){	return flash_read_internal(&mtd, from, len, retlen, buf);}int flash_write(unsigned long to,	unsigned long len, unsigned long *retlen, const unsigned char *buf){	return flash_write_internal(&mtd, to, len, retlen, buf);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美另类高清zo欧美| 亚洲激情综合网| 亚洲一卡二卡三卡四卡无卡久久 | 国产精品高清亚洲| 奇米精品一区二区三区四区| 99re成人精品视频| 日韩久久久精品| 三级在线观看一区二区| 日本高清不卡一区| 中文字幕一区日韩精品欧美| 国产一区二区三区在线观看免费视频 | 国产精品18久久久久久vr| 欧美日韩一区二区三区高清| 自拍av一区二区三区| 国产一区二区免费在线| 777xxx欧美| 亚洲国产精品久久久久秋霞影院| 成人性视频网站| 久久久不卡影院| 国内精品免费**视频| 777午夜精品免费视频| 亚洲v日本v欧美v久久精品| 色婷婷亚洲综合| 亚洲精品一卡二卡| 欧美中文字幕亚洲一区二区va在线| 国产精品初高中害羞小美女文| 国产激情一区二区三区桃花岛亚洲| 精品福利av导航| 激情综合网av| 久久久久久夜精品精品免费| 精品一区二区三区香蕉蜜桃| 日韩欧美国产午夜精品| 美女久久久精品| 日韩一区二区三区电影| 免费在线看成人av| 欧美一级午夜免费电影| 裸体歌舞表演一区二区| 26uuu精品一区二区三区四区在线| 黄页网站大全一区二区| 久久精品在这里| 国产91精品在线观看| 自拍偷拍亚洲综合| 欧美亚洲高清一区二区三区不卡| 亚洲一线二线三线视频| 在线播放国产精品二区一二区四区| 三级欧美在线一区| 精品剧情v国产在线观看在线| 精品一区二区三区欧美| 中文字幕免费在线观看视频一区| 97精品国产97久久久久久久久久久久 | 日韩三级.com| 国产精品18久久久久久vr| 国产精品沙发午睡系列990531| 粉嫩蜜臀av国产精品网站| 亚洲精品日日夜夜| 日韩精品一区二| 成人免费视频一区| 天堂在线一区二区| 久久久午夜精品| 欧美亚洲综合一区| 国产精品夜夜嗨| 亚洲免费大片在线观看| 欧美成人精品福利| k8久久久一区二区三区| 亚洲成人av电影在线| 欧美成人性福生活免费看| www.av亚洲| 日本不卡视频在线观看| 国产精品青草久久| 日韩一区二区视频| 91丨porny丨在线| 老鸭窝一区二区久久精品| 亚洲欧美影音先锋| 精品免费国产一区二区三区四区| 成人深夜视频在线观看| 蜜臀av一区二区在线观看| 国产精品久久久久久久久果冻传媒| 欧美高清视频在线高清观看mv色露露十八 | 日韩成人av影视| 中文字幕av在线一区二区三区| 56国语精品自产拍在线观看| 国产成人免费视频网站高清观看视频 | 国产精品久久久久久久久久免费看| 欧美日韩国产精品自在自线| 99精品视频一区二区| 九九九久久久精品| 亚洲国产wwwccc36天堂| 国产精品久久久久精k8| 日韩一区二区三区观看| 欧美日韩精品欧美日韩精品一综合| 国产精品影视网| 麻豆精品一区二区综合av| ...中文天堂在线一区| 欧美成人欧美edvon| 欧洲生活片亚洲生活在线观看| 国产成人av一区| 青草国产精品久久久久久| 亚洲免费观看高清完整版在线| 精品久久久久久最新网址| 欧美在线观看一二区| 成人小视频在线观看| 日本欧美加勒比视频| 亚洲日本在线观看| 国产精品欧美综合在线| 欧美电影免费观看高清完整版| 91福利资源站| 成人黄页毛片网站| 国产毛片精品国产一区二区三区| 日本中文一区二区三区| 五月激情综合网| 一区二区免费在线播放| 国产精品视频麻豆| 久久久久久日产精品| 日韩欧美电影一二三| 欧美日韩精品三区| 欧美日本在线观看| 91精彩视频在线| 92国产精品观看| caoporn国产精品| 国产91丝袜在线观看| 国产a精品视频| 国产成人精品三级麻豆| 九九视频精品免费| 国产激情一区二区三区| 岛国精品在线观看| 99精品视频一区二区| 97久久精品人人做人人爽| 色素色在线综合| 91久久精品日日躁夜夜躁欧美| 色婷婷久久久综合中文字幕| 99久久精品免费看| 成人激情图片网| 色综合久久久久综合| 色噜噜偷拍精品综合在线| 欧美视频一区二区三区四区| 欧美另类一区二区三区| 日韩一级视频免费观看在线| 精品成人免费观看| 国产女主播视频一区二区| 中文字幕一区二区三区在线观看| 国产欧美一区二区三区沐欲 | 亚洲一区二区在线观看视频| 夜夜精品视频一区二区| 亚洲成人av在线电影| 麻豆freexxxx性91精品| 国产成人99久久亚洲综合精品| 不卡的av网站| 欧美亚男人的天堂| 欧美一区二区三级| 国产精品视频一二三区| 亚洲一区av在线| 久久草av在线| 白白色 亚洲乱淫| 欧美一区二区三区系列电影| 久久在线观看免费| 亚洲精品久久久蜜桃| 午夜国产不卡在线观看视频| 国产美女在线观看一区| 99精品在线观看视频| 欧美一区二区三区视频在线| 久久精品一区四区| 亚洲色图欧美偷拍| 黄色小说综合网站| 91久久精品午夜一区二区| 欧美成人女星排名| 亚洲精品一二三| 国产一区二区三区四区五区入口 | 国产精品一区二区免费不卡 | 成人激情免费网站| 欧美日高清视频| 国产精品乱码一区二区三区软件| 亚洲第一电影网| 成人动漫中文字幕| 欧美精品视频www在线观看 | 91色porny| 2020国产精品自拍| 日产国产高清一区二区三区| aa级大片欧美| 久久久噜噜噜久噜久久综合| 亚洲第一二三四区| 91一区在线观看| 国产午夜精品一区二区三区四区| 性欧美大战久久久久久久久| 成人福利视频网站| 久久综合久色欧美综合狠狠| 天堂蜜桃91精品| 色婷婷久久一区二区三区麻豆| 久久精品夜夜夜夜久久| 伦理电影国产精品| 欧美亚洲愉拍一区二区| 国产精品你懂的| 久久精品国产99国产精品| 欧美美女喷水视频| 亚洲第一福利视频在线| 91国产免费观看| 国产精品高潮呻吟| 成人免费不卡视频| 日本一区二区在线不卡| 国产精品一二三四五| 欧美成人一级视频|