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

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

?? epcs.c

?? Universal Bootloader which support OMAP2420.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * (C) Copyright 2004, Psyent Corporation <www.psyent.com> * Scott McNutt <smcnutt@psyent.com> * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#include <common.h>#if defined(CFG_NIOS_EPCSBASE)#include <command.h>#include <nios2.h>#include <nios2-io.h>#include <nios2-epcs.h>/*-----------------------------------------------------------------------*/#define SHORT_HELP\	"epcs    - read/write Cyclone EPCS configuration device.\n"#define LONG_HELP\	"\n"\	"epcs erase start [end]\n"\	"    - erase sector start or sectors start through end.\n"\	"epcs info\n"\	"    - display EPCS device information.\n"\	"epcs protect on | off\n"\	"    - turn device protection on or off.\n"\	"epcs read addr offset count\n"\	"    - read count bytes from offset to addr.\n"\	"epcs write addr offset count\n"\	"    - write count bytes to offset from addr.\n"\	"epcs verify addr offset count\n"\	"    - verify count bytes at offset from addr.\n"/*-----------------------------------------------------------------------*//* Operation codes for serial configuration devices */#define EPCS_WRITE_ENA		0x06	/* Write enable */#define EPCS_WRITE_DIS		0x04	/* Write disable */#define EPCS_READ_STAT		0x05	/* Read status */#define EPCS_READ_BYTES		0x03	/* Read bytes */#define EPCS_READ_ID		0xab	/* Read silicon id */#define EPCS_WRITE_STAT		0x01	/* Write status */#define EPCS_WRITE_BYTES	0x02	/* Write bytes */#define EPCS_ERASE_BULK		0xc7	/* Erase entire device */#define EPCS_ERASE_SECT		0xd8	/* Erase sector *//* Device status register bits */#define EPCS_STATUS_WIP		(1<<0)	/* Write in progress */#define EPCS_STATUS_WEL		(1<<1)	/* Write enable latch *//* Misc */#define EPCS_TIMEOUT		100	/* 100 msec timeout */static nios_spi_t *epcs =	(nios_spi_t *)CACHE_BYPASS(CFG_NIOS_EPCSBASE);/*********************************************************************** * Device access ***********************************************************************/static int epcs_cs (int assert){	ulong start;	if (assert) {		epcs->control |= NIOS_SPI_SSO;	} else {		/* Let all bits shift out */		start = get_timer (0);		while ((epcs->status & NIOS_SPI_TMT) == 0)			if (get_timer (start) > EPCS_TIMEOUT)				return (-1);		epcs->control &= ~NIOS_SPI_SSO;	}	return (0);}static int epcs_tx (unsigned char c){	ulong start;	start = get_timer (0);	while ((epcs->status & NIOS_SPI_TRDY) == 0)		if (get_timer (start) > EPCS_TIMEOUT)			return (-1);	epcs->txdata = c;	return (0);}static int epcs_rx (void){	ulong start;	start = get_timer (0);	while ((epcs->status & NIOS_SPI_RRDY) == 0)		if (get_timer (start) > EPCS_TIMEOUT)			return (-1);	return (epcs->rxdata);}static unsigned char bitrev[] = {	0x00, 0x08, 0x04, 0x0c, 0x02, 0x0a, 0x06, 0x0e,	0x01, 0x09, 0x05, 0x0d, 0x03, 0x0b, 0x07, 0x0f};static unsigned char epcs_bitrev (unsigned char c){	unsigned char val;	val  = bitrev[c>>4];	val |= bitrev[c & 0x0f]<<4;	return (val);}static void epcs_rcv (unsigned char *dst, int len){	while (len--) {		epcs_tx (0);		*dst++ = epcs_rx ();	}}static void epcs_rrcv (unsigned char *dst, int len){	while (len--) {		epcs_tx (0);		*dst++ = epcs_bitrev (epcs_rx ());	}}static void epcs_snd (unsigned char *src, int len){	while (len--) {		epcs_tx (*src++);		epcs_rx ();	}}static void epcs_rsnd (unsigned char *src, int len){	while (len--) {		epcs_tx (epcs_bitrev (*src++));		epcs_rx ();	}}static void epcs_wr_enable (void){	epcs_cs (1);	epcs_tx (EPCS_WRITE_ENA);	epcs_rx ();	epcs_cs (0);}static unsigned char epcs_status_rd (void){	unsigned char status;	epcs_cs (1);	epcs_tx (EPCS_READ_STAT);	epcs_rx ();	epcs_tx (0);	status = epcs_rx ();	epcs_cs (0);	return (status);}static void epcs_status_wr (unsigned char status){	epcs_wr_enable ();	epcs_cs (1);	epcs_tx (EPCS_WRITE_STAT);	epcs_rx ();	epcs_tx (status);	epcs_rx ();	epcs_cs (0);	return;}/*********************************************************************** * Device information ***********************************************************************/static struct epcs_devinfo_t devinfo[] = {	{ "EPCS1 ", 0x10, 17, 4, 15, 8, 0x0c },	{ "EPCS4 ", 0x12, 19, 8, 16, 8, 0x1c },	{ 0, 0, 0, 0, 0, 0 }};epcs_devinfo_t *epcs_dev_find (void){	unsigned char buf[4];	unsigned char id;	int i;	struct epcs_devinfo_t *dev = NULL;	/* Read silicon id requires 3 "dummy bytes" before it's put	 * on the wire.	 */	buf[0] = EPCS_READ_ID;	buf[1] = 0;	buf[2] = 0;	buf[3] = 0;	epcs_cs (1);	epcs_snd (buf,4);	epcs_rcv (buf,1);	if (epcs_cs (0) == -1)		return (NULL);	id = buf[0];	/* Find the info struct */	i = 0;	while (devinfo[i].name) {		if (id == devinfo[i].id) {			dev = &devinfo[i];			break;		}		i++;	}	return (dev);}/*********************************************************************** * Misc Utilities ***********************************************************************/int epcs_cfgsz (void){	int sz = 0;	unsigned char buf[128];	unsigned char *p;	struct epcs_devinfo_t *dev = epcs_dev_find ();	if (!dev)		return (-1);	/* Read in the first 128 bytes of the device */	buf[0] = EPCS_READ_BYTES;	buf[1] = 0;	buf[2] = 0;	buf[3] = 0;	epcs_cs (1);	epcs_snd (buf,4);	epcs_rrcv (buf, sizeof(buf));	epcs_cs (0);	/* Search for the starting 0x6a which is followed by the	 * 4-byte 'register' and 4-byte bit-count.	 */	p = buf;	while (p < buf + sizeof(buf)-8) {		if ( *p == 0x6a ) {			/* Point to bit count and extract */			p += 5;			sz = *p++;			sz |= *p++ << 8;			sz |= *p++ << 16;			sz |= *p++ << 24;			/* Convert to byte count */			sz += 7;			sz >>= 3;		} else if (*p == 0xff) {			/* 0xff is ok ... just skip */			p++;			continue;		} else {			/* Not 0xff or 0x6a ... something's not			 * right ... report 'unknown' (sz=0).			 */			break;		}	}	return (sz);}int epcs_erase (unsigned start, unsigned end){	unsigned off, sectsz;	unsigned char buf[4];	struct epcs_devinfo_t *dev = epcs_dev_find ();	if (!dev || (start>end))		return (-1);	/* Erase the requested sectors. An address is required	 * that lies within the requested sector -- we'll just	 * use the first address in the sector.	 */	printf ("epcs erasing sector %d ", start);	if (start != end)		printf ("to %d ", end);	sectsz = (1 << dev->sz_sect);	while (start <= end) {		off = start * sectsz;		start++;		buf[0] = EPCS_ERASE_SECT;		buf[1] = off >> 16;		buf[2] = off >> 8;		buf[3] = off;		epcs_wr_enable ();		epcs_cs (1);		epcs_snd (buf,4);		epcs_cs (0);		printf ("."); /* Some user feedback */		/* Wait for erase to complete */		while (epcs_status_rd() & EPCS_STATUS_WIP)			;	}	printf (" done.\n");	return (0);}int epcs_read (ulong addr, ulong off, ulong cnt){	unsigned char buf[4];	struct epcs_devinfo_t *dev = epcs_dev_find ();	if (!dev)		return (-1);	buf[0] = EPCS_READ_BYTES;	buf[1] = off >> 16;	buf[2] = off >> 8;	buf[3] = off;	epcs_cs (1);	epcs_snd (buf,4);	epcs_rrcv ((unsigned char *)addr, cnt);	epcs_cs (0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲h动漫在线| 波多野洁衣一区| 国产麻豆成人精品| 国产成人av一区二区三区在线 | 欧美三区免费完整视频在线观看| 欧美日韩亚洲综合在线| 精品国产乱码久久久久久免费| 国产欧美一区二区精品性色超碰| 亚洲欧美日韩成人高清在线一区| 性久久久久久久久久久久| 国产九色精品成人porny| 91网页版在线| 日韩精品一区二区三区在线观看| 中文字幕精品在线不卡| 婷婷久久综合九色综合绿巨人| 国产一区二三区| 欧美艳星brazzers| 日韩欧美亚洲国产另类| 国产精品电影一区二区| 免费观看在线色综合| 成人黄色在线看| 91精品国产全国免费观看| 亚洲高清免费视频| 韩日精品视频一区| 色呦呦日韩精品| 精品国产免费人成在线观看| 亚洲柠檬福利资源导航| 久久99精品国产91久久来源| 色综合欧美在线视频区| 久久久久久影视| 亚洲超碰精品一区二区| av电影在线观看不卡| 日韩一区二区在线观看视频| 日韩美女视频一区二区| 精品制服美女丁香| 欧美三片在线视频观看 | 成人性生交大片| 欧美一区二区三区在线看| 中文字幕视频一区二区三区久| 日本欧美一区二区| 在线看一区二区| 久久精品男人天堂av| 天堂成人国产精品一区| 91麻豆文化传媒在线观看| 久久久噜噜噜久久中文字幕色伊伊| 午夜精品一区二区三区免费视频 | 亚洲人成网站精品片在线观看| 久久99这里只有精品| 欧美日韩在线直播| 日韩一区欧美一区| 国产成人在线视频免费播放| 日韩一区二区在线观看视频 | 91麻豆精品国产自产在线观看一区 | 亚洲人亚洲人成电影网站色| 国产精品一区二区x88av| 69成人精品免费视频| 亚洲国产一区二区在线播放| 99re成人在线| 国产精品欧美久久久久一区二区| 日本中文字幕一区二区有限公司| 欧美性大战久久久| 亚洲欧美另类综合偷拍| aaa国产一区| 亚洲国产高清在线观看视频| 国产精品18久久久久| 欧美sm美女调教| 韩国在线一区二区| 久久久夜色精品亚洲| 黑人精品欧美一区二区蜜桃| 久久综合色鬼综合色| 经典一区二区三区| 精品国产凹凸成av人网站| 麻豆精品一区二区综合av| 欧美一卡二卡三卡四卡| 欧美特级限制片免费在线观看| 亚洲丝袜另类动漫二区| a美女胸又www黄视频久久| 国产精品乱人伦中文| 成人的网站免费观看| 国产目拍亚洲精品99久久精品| 国产成人在线网站| 中文字幕乱码日本亚洲一区二区| 菠萝蜜视频在线观看一区| 欧美国产97人人爽人人喊| 懂色av中文一区二区三区| 国产精品欧美久久久久一区二区| 99精品欧美一区| 一区二区日韩av| 欧美人妖巨大在线| 美女在线视频一区| 久久亚洲精精品中文字幕早川悠里| 国产伦精一区二区三区| 国产免费成人在线视频| av日韩在线网站| 亚洲综合在线电影| 欧美老年两性高潮| 欧美a一区二区| 久久久久久久久97黄色工厂| 粉嫩aⅴ一区二区三区四区 | 日本高清成人免费播放| 亚洲第一av色| 精品粉嫩aⅴ一区二区三区四区| 国产精品一级黄| 综合激情网...| 精品视频免费在线| 久久精品国产精品亚洲红杏| 欧美—级在线免费片| 色妞www精品视频| 天天色综合天天| 久久久蜜桃精品| 91成人免费网站| 精品中文字幕一区二区| 亚洲欧洲另类国产综合| 欧美另类久久久品| 国产精品亚洲第一| 一区二区三区波多野结衣在线观看| 日韩一区二区免费在线电影| 成人午夜视频福利| 亚洲成人一二三| 久久久精品免费观看| 日本精品裸体写真集在线观看| 日本不卡视频一二三区| 日本成人中文字幕在线视频| 国产亚洲一区二区三区四区 | 五月婷婷另类国产| 久久精品在线观看| 在线观看亚洲一区| 国产一区二区不卡老阿姨| 一二三区精品视频| 精品毛片乱码1区2区3区| 91免费看`日韩一区二区| 久久99深爱久久99精品| 一区二区三区欧美亚洲| 久久久亚洲欧洲日产国码αv| 欧美在线视频全部完| 国产成人在线免费观看| 亚洲一区二区三区视频在线| 国产欧美日韩综合| 欧美一区二区三区性视频| 99久久婷婷国产综合精品| 美女脱光内衣内裤视频久久影院| 亚洲三级小视频| 26uuu成人网一区二区三区| 在线日韩av片| 成人免费视频网站在线观看| 麻豆精品一区二区三区| 亚洲成av人片在线| 国产精品国产a| 日韩精品在线看片z| 欧美日韩三级一区| 99精品视频在线观看免费| 蜜臀a∨国产成人精品| 亚洲国产精品综合小说图片区| 欧美国产精品中文字幕| 久久亚洲综合色| 884aa四虎影成人精品一区| 99精品在线免费| 国产不卡在线一区| 极品美女销魂一区二区三区| 日韩制服丝袜av| 亚洲一区二区三区四区五区中文| 中文字幕av资源一区| 久久久午夜精品理论片中文字幕| 日韩欧美在线不卡| 777奇米四色成人影色区| 欧美最新大片在线看| 99re这里都是精品| 成人免费观看av| 国产成人精品综合在线观看 | 中文字幕在线不卡国产视频| 久久综合五月天婷婷伊人| 日韩免费高清视频| 亚洲综合久久久| 中文字幕人成不卡一区| 中文字幕制服丝袜一区二区三区 | av在线播放成人| 成人性生交大片免费| 国产99久久精品| 丁香一区二区三区| 成人夜色视频网站在线观看| 成人晚上爱看视频| 97精品电影院| 色综合久久88色综合天天6| 一本色道久久综合亚洲精品按摩 | 亚洲资源中文字幕| 亚洲综合另类小说| 午夜免费欧美电影| 午夜精品久久久久久久久| 午夜激情综合网| 日本三级韩国三级欧美三级| 九九精品一区二区| 国产伦精品一区二区三区免费| 国产一区二区三区免费在线观看 | 亚洲国产电影在线观看| 欧美极品aⅴ影院| 最新热久久免费视频| 亚洲乱码精品一二三四区日韩在线| 一区二区三区在线视频免费观看| 亚洲精品免费在线播放| 亚洲一区二区在线免费看|