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

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

?? epcs.c

?? linux下的BOOT程序原碼,有需要的可以來下,保證好用
?? 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一区二区三区免费野_久草精品视频
亚洲综合免费观看高清完整版在线| 欧美一区二区三区精品| 午夜精品久久久久久| 国产精品福利一区| 久久人人爽人人爽| 日韩亚洲欧美成人一区| 欧美精品九九99久久| 色88888久久久久久影院按摩| 亚洲va国产天堂va久久en| 中文字幕一区免费在线观看| 国产亚洲一区字幕| 久久综合资源网| 日韩欧美专区在线| 欧美大白屁股肥臀xxxxxx| 在线电影一区二区三区| 欧美日韩一二三| 欧美老人xxxx18| 91精品综合久久久久久| 91在线视频播放地址| 99久久精品免费观看| 91在线视频播放| 91搞黄在线观看| 欧美三级三级三级爽爽爽| 欧美丰满嫩嫩电影| 欧美日韩欧美一区二区| 欧美一区日韩一区| 亚洲精品一区二区三区四区高清| 欧美videos中文字幕| xf在线a精品一区二区视频网站| 精品国产伦一区二区三区观看体验| 欧美成人一区二区三区| 中文字幕国产一区| 亚洲欧美精品午睡沙发| 偷拍一区二区三区| 久久99精品久久久久久国产越南| 黄色日韩网站视频| 91首页免费视频| 91精品国产品国语在线不卡| 久久综合成人精品亚洲另类欧美| 日本一区二区三级电影在线观看 | 天堂在线一区二区| 日本麻豆一区二区三区视频| 九色综合狠狠综合久久| 99免费精品视频| 日韩一区二区影院| 国产亚洲综合在线| 亚洲第一二三四区| 精品一区二区精品| 成人av网址在线| 欧美高清www午色夜在线视频| 日韩欧美激情在线| 亚洲欧洲一区二区三区| 日本三级亚洲精品| 91年精品国产| xf在线a精品一区二区视频网站| 国产精品少妇自拍| 蜜乳av一区二区三区| 99久久综合国产精品| 日韩精品专区在线影院观看| 夜夜精品视频一区二区| 午夜伦理一区二区| 99久久精品国产麻豆演员表| 91精品国产aⅴ一区二区| 国产精品久久久久四虎| 精品一区二区三区在线播放 | 亚洲欧洲av一区二区三区久久| 午夜精品在线视频一区| 91在线精品一区二区| 久久综合九色欧美综合狠狠| 日韩精品电影一区亚洲| 日本乱人伦一区| 国产精品国产自产拍在线| 久久电影国产免费久久电影| 欧美午夜精品一区二区蜜桃| 综合久久久久久久| 久久99精品网久久| 欧美一区二区视频网站| 亚洲成人免费看| 在线观看视频欧美| 亚洲男人的天堂网| 91无套直看片红桃| 国产亚洲午夜高清国产拍精品| 免费欧美高清视频| 欧美浪妇xxxx高跟鞋交| 亚洲男同性恋视频| 97se亚洲国产综合自在线观| 中文字幕国产精品一区二区| 国产mv日韩mv欧美| 久久久久久夜精品精品免费| 久久精品国产99国产| 欧美一级生活片| 日韩高清国产一区在线| 91精品婷婷国产综合久久性色| 亚洲一区二区偷拍精品| 91国产免费看| 天天综合日日夜夜精品| 欧美日韩精品三区| 欧美体内she精高潮| 亚洲成a人v欧美综合天堂| 国产一区二区在线看| 久久久久88色偷偷免费| 国产乱妇无码大片在线观看| 中文子幕无线码一区tr| 欧美在线免费播放| 久久精品国产亚洲5555| 久久日一线二线三线suv| 一本大道av一区二区在线播放| 亚洲狠狠爱一区二区三区| 精品国产一区二区亚洲人成毛片| 成人性生交大片免费看中文 | 国产成人综合在线播放| 国产精品美女久久久久aⅴ国产馆| 在线看一区二区| 精品一区二区在线观看| 亚洲自拍偷拍综合| 国产欧美日韩综合| 欧美疯狂性受xxxxx喷水图片| 国产jizzjizz一区二区| 日韩精品免费视频人成| 国产精品青草久久| 日韩美女天天操| 在线国产亚洲欧美| 高清av一区二区| 久久精品久久99精品久久| 亚洲精品日日夜夜| 中文欧美字幕免费| 欧美一区二区三区日韩视频| 色婷婷狠狠综合| 国产99久久久久久免费看农村| 视频一区视频二区中文字幕| 亚洲人成网站精品片在线观看| 久久日韩粉嫩一区二区三区 | 久久国产精品露脸对白| 亚洲午夜免费视频| 亚洲精品五月天| 国产精品久久久久影视| 久久精品人人做人人综合| 欧美videos中文字幕| 欧美一级淫片007| 欧美久久久一区| 色欧美片视频在线观看| 免费av网站大全久久| 亚洲激情一二三区| 亚洲欧美日韩人成在线播放| 欧美极品少妇xxxxⅹ高跟鞋| 精品美女在线观看| 精品国产123| 欧美不卡一区二区三区四区| 欧美精品久久天天躁| 欧美另类久久久品| 91精品国产一区二区人妖| 91精品国产综合久久久久久漫画| 欧美日韩一区二区三区在线看| 色婷婷av一区二区三区大白胸| 色先锋aa成人| 欧美午夜在线观看| 欧美精品第1页| 日韩区在线观看| 久久女同互慰一区二区三区| 国产视频一区不卡| 国产精品久久久久久久久久久免费看| 中文乱码免费一区二区| 18成人在线观看| 亚洲国产精品尤物yw在线观看| 日韩精品91亚洲二区在线观看| 看片的网站亚洲| 国产.欧美.日韩| 91蜜桃免费观看视频| 欧美日韩精品免费观看视频 | 高清免费成人av| 色综合久久88色综合天天免费| 日本丶国产丶欧美色综合| 欧美性色黄大片| 精品盗摄一区二区三区| 中文字幕一区二| 偷窥少妇高潮呻吟av久久免费| 精品一区二区三区蜜桃| a在线播放不卡| 欧美人狂配大交3d怪物一区| 久久久久久久久久看片| 亚洲人成小说网站色在线| 日本中文字幕不卡| 国产福利一区二区三区视频在线 | 亚洲一区二区三区美女| 轻轻草成人在线| 91在线视频观看| 欧美本精品男人aⅴ天堂| 国产精品久久久久久久久免费丝袜| 亚洲国产日韩a在线播放性色| 久久99国产精品免费| 在线欧美日韩国产| 亚洲精品一区二区三区蜜桃下载| 亚洲三级在线免费| 精品一区二区三区蜜桃| 在线观看日韩一区| 久久久www成人免费毛片麻豆| 亚洲精品日韩综合观看成人91| 狠狠色综合播放一区二区| 欧美视频自拍偷拍| 中文无字幕一区二区三区 |