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

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

?? isp.c

?? 脫機(jī)ISP編程器
?? C
字號(hào):
/*  isp.c - part of USBasp  Autor..........: Thomas Fischl <tfischl@gmx.de>  Description....: Provides functions for communication/programming                   over ISP interface  Licence........: GNU GPL v2 (see Readme.txt)  Creation Date..: 2005-02-23  Last change....: 2007-07-23*//*--------------------------------------  Modify.........: avenbbs(8785116@qq.com)  Date...........: 2008-9-28~2008-10-5----------------------------------------*/#include <avr/io.h>#include "isp.h"//#include "clock.h"#include <util/delay.h>#include <avr/eeprom.h>#include "usart.h"
#include "AT45.h"

#define	ISP_OUT   PORTB#define ISP_IN    PINB#define ISP_DDR   DDRB#define ISP_RST   PB2#define ISP_MOSI  PB3#define ISP_MISO  PB4#define ISP_SCK   PB5#define ISP_DELAY 1#define ISP_SCK_SLOW 0#define ISP_SCK_FAST 1
#define spiHWdisable() SPCR = 0extern unsigned char hex2ascii(unsigned char data);
extern volatile unsigned char error_flag;extern unsigned char buf[];#define avr_bin bufvoid spiHWenable(){	/* enable SPI, master, 375kHz SCK */	SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR1);	SPSR = (1 << SPI2X);}void ispSetSCKOption(uchar option){	if (option == 0)	{			/* use software spi */		//ispTransmit = ispTransmit_sw;		//    spiHWdisable();			}		else	{			// use hardware spi 		ispTransmit = ispTransmit_hw;			}}/*void ispDelay(){	uint8_t starttime = TIMERVALUE;	while ((uint8_t)(TIMERVALUE - starttime) < 16) { }	//_delay_us(64);}*/void ispConnect(){	/* all ISP pins are inputs before */	/* now set output pins */	ISP_DDR |= (1 << ISP_RST) | (1 << ISP_SCK) | (1 << ISP_MOSI);		/* reset device */	ISP_OUT &= ~(1 << ISP_RST);   /* RST low */	ISP_OUT &= ~(1 << ISP_SCK);   /* SCK low */		/* positive reset pulse > 2 SCK (target) */	//ispDelay();	_delay_us(64);	ISP_OUT |= (1 << ISP_RST);    /* RST high */	//ispDelay();	_delay_us(64);	ISP_OUT &= ~(1 << ISP_RST);   /* RST low */		if (ispTransmit == ispTransmit_hw)	{		spiHWenable();	}}void ispDisconnect(){	/* set all ISP pins inputs */	ISP_DDR &= ~((1 << ISP_RST) | (1 << ISP_SCK) | (1 << ISP_MOSI));	/* switch pullups off */	ISP_OUT &= ~((1 << ISP_RST) | (1 << ISP_SCK) | (1 << ISP_MOSI));		/* disable hardware SPI */	spiHWdisable();}/*uchar ispTransmit_sw(uchar send_byte){	uchar rec_byte = 0;	uchar i;		for (i = 0; i < 8; i++)	{			// set MSB to MOSI-pin		if ((send_byte & 0x80) != 0)		{			ISP_OUT |= (1 << ISP_MOSI);  // MOSI high		}			else		{			ISP_OUT &= ~(1 << ISP_MOSI); // MOSI low		}			// shift to next bit		send_byte  = send_byte << 1;			// receive data		rec_byte = rec_byte << 1;			if ((ISP_IN & (1 << ISP_MISO)) != 0)		{			rec_byte++;		}			// pulse SCK		ISP_OUT |= (1 << ISP_SCK);     // SCK high			ispDelay();			ISP_OUT &= ~(1 << ISP_SCK);    // SCK low			ispDelay();	}		return rec_byte;}*/uchar ispTransmit_hw(uchar send_byte){	SPDR = send_byte;	//hex2send(send_byte);		while (!(SPSR & (1 << SPIF)));		return SPDR;}uchar ispEnterProgrammingMode(){	uchar check;	uchar count = 32;		while (count--)	{		ispTransmit(0xAC);		ispTransmit(0x53);		check = ispTransmit(0);		ispTransmit(0);				if (check == 0x53)		{			return 0;		}				spiHWdisable();				/* pulse SCK */		ISP_OUT |= (1 << ISP_SCK);     /* SCK high */		//ispDelay();		_delay_us(64);		ISP_OUT &= ~(1 << ISP_SCK);    /* SCK low */		//ispDelay();		_delay_us(64);				if (ispTransmit == ispTransmit_hw)		{			spiHWenable();		}			}		return 1;  /* error: device dosn't answer */}uchar ispReadFlash(uint32_t address){	//unsigned char tmp=0x55;	//ispConnect();	//ispEnterProgrammingMode();	ispTransmit(0x20|((address & 1) << 3));	ispTransmit(address >> 9);	ispTransmit(address >> 1);	return(ispTransmit(0));	//ispDisconnect();	//return tmp;}/*uchar ispWriteFlash(unsigned long address, uchar data, uchar pollmode){//	 0xFF is value after chip erase, so skip programming//	if (data == 0xFF) {//	  return 0;//	}//	ispTransmit(0x40 | ((address & 1) << 3));	ispTransmit(address >> 9);	ispTransmit(address >> 1);	ispTransmit(data);	if (pollmode == 0)		return 0;	if (data == 0x7F)	{		clockWait(15); // wait 4,8 ms		return 0;	}	else	{		// polling flash		uchar retries = 30;		uint8_t starttime = TIMERVALUE;		while (retries != 0)		{			if (ispReadFlash(address) != 0x7F)			{				return 0;			};			if ((uint8_t)(TIMERVALUE - starttime) > CLOCK_T_320us)			{				starttime = TIMERVALUE;				retries --;			}		}		return 1; // error	}}*//*uchar ispFlushPage(unsigned long address, uchar pollvalue){	ispTransmit(0x4C);	ispTransmit(address >> 9);	ispTransmit(address >> 1);	ispTransmit(0);	if (pollvalue == 0xFF)	{		clockWait(15);		return 0;	}	else	{		// polling flash		uchar retries = 30;		uint8_t starttime = TIMERVALUE;		while (retries != 0)		{			if (ispReadFlash(address) != 0xFF)			{				return 0;			};			if ((uint8_t)(TIMERVALUE - starttime) > CLOCK_T_320us)			{				starttime = TIMERVALUE;				retries --;			}		}		return 1; // error	}}*/uchar ispReadEEPROM(unsigned int address){	ispTransmit(0xA0);	ispTransmit(address >> 8);	ispTransmit(address);	return ispTransmit(0);}uchar ispWriteEEPROM(unsigned int address, uchar data){	ispTransmit(0xC0);	ispTransmit(address >> 8);	ispTransmit(address);	ispTransmit(data);	_delay_ms(10);	//clockWait(30); // wait 9,6 ms		return 0;	/*	if (data == 0xFF) {	  clockWait(30); // wait 9,6 ms	  return 0;	} else {		  // polling eeprom	  uchar retries = 30; // about 9,6 ms	  uint8_t starttime = TIMERVALUE;		  while (retries != 0) {	    if (ispReadEEPROM(address) != 0xFF) {	  return 0;	    };		    if ((uint8_t) (TIMERVALUE - starttime) > CLOCK_T_320us) {	  starttime = TIMERVALUE;	  retries --;	    }		  }	  return 1; // error	}	*/	}void isp_init(void){	//clockInit();          /* init timer */		ispSetSCKOption(ISP_SCK_FAST);}//---------------------------------------------------unsigned char fuse[3]={0};char fuse_ascii[9]={0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0};unsigned char read_fuse(void){	ispConnect();		if (ispEnterProgrammingMode())	{		ispDisconnect();		return 1;	}		ispTransmit_hw(0b01010000);		ispTransmit_hw(0b00000000);	ispTransmit_hw(0b00000000);	fuse[0]=ispTransmit_hw(0b00000000);	ispTransmit_hw(0b01011000);	ispTransmit_hw(0b00001000);	ispTransmit_hw(0b00000000);	fuse[1]=ispTransmit_hw(0b00000000);	ispTransmit_hw(0b01010000);	ispTransmit_hw(0b00001000);	ispTransmit_hw(0b00000000);	fuse[2]=ispTransmit_hw(0b00000000);	ispDisconnect();	fuse_ascii[0]=hex2ascii(fuse[0]>>4);	fuse_ascii[1]=hex2ascii(fuse[0]&0x0f);	fuse_ascii[3]=hex2ascii(fuse[1]>>4);	fuse_ascii[4]=hex2ascii(fuse[1]&0x0f);	fuse_ascii[6]=hex2ascii(fuse[2]>>4);	fuse_ascii[7]=hex2ascii(fuse[2]&0x0f);	return 0;}unsigned char erase_chip(void){	ispConnect();		if (ispEnterProgrammingMode())	{		ispDisconnect();		return 1;	}		ispTransmit_hw(0b10101100);		ispTransmit_hw(0b10000000);	ispTransmit_hw(0b00000000);	ispTransmit_hw(0b00000000);	_delay_ms(10);	ispDisconnect();	return 0;}//讀取芯片IDunsigned char chip_id[3];char chip_id_ascii[9]={0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0};unsigned char read_id(void){	ispConnect();		if (ispEnterProgrammingMode())	{		ispDisconnect();		return 1;	}		//unsigned char tmp;	//uart0_Printf("AVR ID:");	ispTransmit_hw(0x30);		ispTransmit_hw(0x00);		ispTransmit_hw(0x00);		chip_id[0]=ispTransmit_hw(0x00);		//uart0_Printf("%02X ",d);	ispTransmit_hw(0x30);		ispTransmit_hw(0x00);		ispTransmit_hw(0x01);		chip_id[1]=ispTransmit_hw(0x00);		//uart0_Printf("%02X ",d);	ispTransmit_hw(0x30);		ispTransmit_hw(0x00);		ispTransmit_hw(0x02);		chip_id[2]=ispTransmit_hw(0x00);		//uart0_Printf("%02X ",d);	ispDisconnect();		chip_id_ascii[0]=hex2ascii(chip_id[0]>>4);		chip_id_ascii[1]=hex2ascii(chip_id[0]&0x0f);		chip_id_ascii[3]=hex2ascii(chip_id[1]>>4);		chip_id_ascii[4]=hex2ascii(chip_id[1]&0x0f);		chip_id_ascii[6]=hex2ascii(chip_id[2]>>4);		chip_id_ascii[7]=hex2ascii(chip_id[2]&0x0f);		return 0;}//寫頁緩沖數(shù)據(jù)void write_page_cache(unsigned char *pt,unsigned char chiptype){	unsigned char i;	unsigned int one_page_size=1;		for (unsigned char j=0;j<chiptype;j++) one_page_size*=2;		for (i=0;i<0x20*one_page_size;i++)	{		ispTransmit_hw(0x40);		ispTransmit_hw(0x00);		ispTransmit_hw(i);		ispTransmit_hw(*pt++);		ispTransmit_hw(0x48);		ispTransmit_hw(0x00);		ispTransmit_hw(i);		ispTransmit_hw(*pt++);	}}//將頁緩沖數(shù)據(jù)寫入Flashvoid write_page_flash(uint32_t address){	address>>=1;	//hex2send(address>>16);	//hex2send(address>>8);	//hex2send(address);	ispTransmit_hw(0x4C);	ispTransmit_hw(address/256);	ispTransmit_hw(address&0xFF);	ispTransmit_hw(0xFF);	_delay_ms(5);}//逐頁編程void pro_page_1by1(unsigned char chiptype,uint32_t buf_cnt){	unsigned char *pt=avr_bin;	//unsigned char *pt=buf;	//unsigned int one_page_size=1;	//while (pt<avr_bin+sizeof(avr_bin))	//for(unsigned char j=0;j<chiptype+6;j++) one_page_size*=2;	unsigned int i;		for (i=0;i<DF_BUFFER_SIZE;)		//while (pt<buf+256)	{		write_page_cache(&pt[i],chiptype);		//write_page_flash(((uint32_t)pt)-((uint32_t)avr_bin)+buf_cnt*256);		write_page_flash(i+buf_cnt*DF_BUFFER_SIZE);		//usart_tsmt((((unsigned long)pt)-((unsigned long)avr_bin)+buf_cnt*256)>>8);		//write_page_flash(((unsigned long)pt)-((unsigned long)buf));		//hex2send(((uint16_t)pt)>>8);				switch (chiptype)		{				case 0:			//pt+=64;			i+=64;			break;					case 1:			//pt+=128;			i+=128;			break;					case 2:			//pt+=256;			i+=256;			break;		}	}		//校驗(yàn)		for (i=0;i<DF_BUFFER_SIZE;i++)	{		//unsigned char tmp;		if (pt[i]!=ispReadFlash(i+buf_cnt*DF_BUFFER_SIZE))		{			error_flag=1;			return;		}				//else usart_tsmt(tmp);	}}//寫熔絲unsigned char write_fuse(unsigned char low,unsigned char high,unsigned char ext){	ispConnect();		if (ispEnterProgrammingMode())	{		ispDisconnect();		return 1;	}		ispTransmit_hw(0xAC);		ispTransmit_hw(0xA0);	ispTransmit_hw(0xFF);	ispTransmit_hw(low);	_delay_ms(5);	ispTransmit_hw(0xAC);	ispTransmit_hw(0xA8);	ispTransmit_hw(0xFF);	ispTransmit_hw(high);	_delay_ms(5);	ispTransmit_hw(0xAC);	ispTransmit_hw(0xA4);	ispTransmit_hw(0xFF);	ispTransmit_hw(ext);	_delay_ms(5);	ispDisconnect();	return 0;}//寫加密位unsigned char write_lockbit(unsigned char data){	data|=0xC0;	ispConnect();		if (ispEnterProgrammingMode())	{		ispDisconnect();		return 1;	}		ispTransmit_hw(0xAC);		ispTransmit_hw(0xFF);	ispTransmit_hw(0xFF);	ispTransmit_hw(data);	_delay_ms(5);	ispDisconnect();	return 0;}//讀加密位unsigned char read_lockbit(void){	unsigned char data=1;	ispConnect();		if (ispEnterProgrammingMode())	{		ispDisconnect();		return 1;	}		ispTransmit_hw(0b01011000);		ispTransmit_hw(0);	ispTransmit_hw(0);	data=ispTransmit_hw(0);	ispDisconnect();	return(data);}//復(fù)位avrunsigned char reset_avr(void){	ispConnect();		if (ispEnterProgrammingMode())	{		ispDisconnect();		return 1;	}		ispDisconnect();		return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品尤物| 国产精品中文字幕欧美| 亚洲精品乱码久久久久久| 中文字幕欧美日本乱码一线二线| 精品福利一区二区三区 | 日本伊人色综合网| 亚洲一卡二卡三卡四卡| 一级特黄大欧美久久久| 亚洲视频一二三区| 亚洲精品成人a在线观看| 一区二区三区中文在线观看| 亚洲在线观看免费| 日韩国产欧美在线播放| 麻豆成人久久精品二区三区红 | 精品在线观看免费| 国产最新精品精品你懂的| 国产精一区二区三区| 波多野结衣亚洲一区| 91影视在线播放| 欧美三级日韩三级国产三级| 91精品国产欧美一区二区| 欧美成人综合网站| 中文字幕不卡一区| 亚洲精品国产精品乱码不99 | 99久久精品国产一区| 色婷婷综合久久久中文一区二区| 欧美在线免费观看视频| 6080国产精品一区二区| 久久一区二区视频| 自拍av一区二区三区| 亚洲国产一区二区在线播放| 麻豆国产欧美日韩综合精品二区| 国产乱子伦一区二区三区国色天香| 粉嫩av亚洲一区二区图片| 一本色道亚洲精品aⅴ| 欧美高清精品3d| 久久久精品影视| 亚洲精品视频一区二区| 男女性色大片免费观看一区二区 | 91网站视频在线观看| 欧美日韩一卡二卡| 精品av久久707| 亚洲天天做日日做天天谢日日欢| 有码一区二区三区| 另类小说欧美激情| 91蜜桃网址入口| 欧美成人性战久久| 亚洲人一二三区| 久久99精品久久久久久动态图| 欧美日韩你懂的| 国产亚洲综合性久久久影院| 欧美韩国一区二区| 日韩成人精品视频| 99精品视频在线免费观看| 91精品久久久久久久99蜜桃| 国产精品视频九色porn| 日韩高清中文字幕一区| 99久久婷婷国产精品综合| 欧美成人一区二区三区 | 91高清在线观看| 久久青草欧美一区二区三区| 亚洲一二三四久久| 国产91清纯白嫩初高中在线观看| 在线成人午夜影院| 亚洲乱码中文字幕综合| 国内精品国产成人| 欧美男人的天堂一二区| 亚洲精品视频在线观看免费 | 91精品麻豆日日躁夜夜躁| 国产精品久久久久久久久免费樱桃 | 五月激情丁香一区二区三区| 成人av电影免费在线播放| 欧美大片在线观看| 亚洲成在人线免费| 色综合久久久久久久久久久| 国产三区在线成人av| 另类小说视频一区二区| 91精品久久久久久久91蜜桃| 亚洲一区二区三区四区的| 成人国产精品免费观看动漫| 2023国产一二三区日本精品2022| 日一区二区三区| 欧洲亚洲精品在线| 亚洲欧美日韩小说| 国产91丝袜在线观看| 精品国产凹凸成av人网站| 免费在线视频一区| 欧美久久一二区| 亚洲成人高清在线| 色香蕉成人二区免费| 国产精品成人网| 本田岬高潮一区二区三区| 久久蜜臀精品av| 国产在线观看免费一区| 欧美精品一区二区三区蜜桃| 免费成人在线影院| 日韩女优av电影| 蜜臀av一区二区| 日韩欧美国产一二三区| 免费观看在线色综合| 欧美国产精品中文字幕| 国产麻豆视频精品| 久久久久久久久久久久久久久99| 精品一区二区免费视频| 精品久久久久久无| 国内精品自线一区二区三区视频| 精品久久久久久综合日本欧美| 国产最新精品精品你懂的| 亚洲精品在线一区二区| 国产精品亚洲第一区在线暖暖韩国| 久久精品亚洲乱码伦伦中文| 国产福利91精品一区| 国产精品人妖ts系列视频| a在线播放不卡| 亚洲精品成人在线| 欧美自拍偷拍一区| 日韩电影在线观看一区| 91美女视频网站| 亚洲bt欧美bt精品777| 制服丝袜国产精品| 国产一区二区三区在线观看免费| 国产欧美在线观看一区| 99久久精品国产观看| 亚洲一线二线三线视频| 欧美中文字幕一区二区三区 | 亚洲激情第一区| 欧美日韩在线一区二区| 蜜臀久久99精品久久久久久9| 久久综合九色综合97_久久久| 大白屁股一区二区视频| 亚洲精品国产成人久久av盗摄| 4438x成人网最大色成网站| 精品一区在线看| 亚洲欧洲日韩综合一区二区| 欧美亚洲综合网| 久久99精品国产麻豆婷婷 | 韩国在线一区二区| 国产精品久久久久久久久动漫| 在线观看国产91| 久久国产精品露脸对白| 中文字幕在线观看不卡| 欧美乱妇20p| 国产成人丝袜美腿| 亚洲一区二区欧美| 久久精品一区二区三区不卡| 欧美在线免费播放| 国内精品免费在线观看| 一区二区三区四区激情| 精品动漫一区二区三区在线观看| 99riav久久精品riav| 日本欧美在线观看| 亚洲欧洲日韩av| 欧美成人艳星乳罩| 色婷婷一区二区| 91色.com| 韩国三级电影一区二区| 一区二区久久久久久| 337p粉嫩大胆噜噜噜噜噜91av| 91浏览器打开| 国产剧情一区二区| 午夜精品福利一区二区蜜股av | 国产风韵犹存在线视精品| 亚洲午夜激情av| 国产欧美精品一区aⅴ影院| 欧美日韩国产另类一区| 成人午夜在线播放| 久久精品av麻豆的观看方式| 一区二区在线看| 国产网站一区二区| 日韩一区二区在线免费观看| 91日韩在线专区| 粉嫩久久99精品久久久久久夜 | 欧美夫妻性生活| 99精品黄色片免费大全| 国产一区二区三区视频在线播放| 亚洲一区二区欧美日韩 | 成人免费三级在线| 麻豆91在线观看| 亚洲电影视频在线| 亚洲欧美日韩国产一区二区三区 | 日韩av高清在线观看| 又紧又大又爽精品一区二区| 国产精品日产欧美久久久久| 久久伊99综合婷婷久久伊| 日韩小视频在线观看专区| 欧美视频中文字幕| 91片黄在线观看| 成人的网站免费观看| 国产iv一区二区三区| 国产一本一道久久香蕉| 美女一区二区久久| 丝袜亚洲另类欧美综合| 亚洲成人一区在线| 一区二区久久久久久| 一区二区三区美女| 亚洲精品国产无天堂网2021| 亚洲欧美日韩综合aⅴ视频| 国产精品国产三级国产三级人妇| 国产色婷婷亚洲99精品小说| 久久久精品综合|