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

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

?? avrprog.h

?? 上位機軟件 for avricp 根據功能設定熔絲
?? H
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************
*
* Atmel Corporation
*
* File              : AVRInSystemProg.hpp
* Compiler          : Dev-C++ 4.9.8.0 - http://bloodshed.net/dev/
* Revision          : $Revision: 3.0 $
* Date              : $Date: Tuesday, January 17, 2006 18:33:56 UTC $
* Updated by        : $Author: raapeland $
*
* Support mail      : avr@atmel.com
*
* Target platform   : Win32
*
* AppNote           : AVR911 - AVR Open-source Programmer
*
* Description       : A class providing an interface to the AVR ISP described
*                     in Application Note AVR910. This class is derived from AVRPRogrammer.
*
* 
****************************************************************************/
#ifndef AVRPROG_HPP
#define AVRPROG_HPP

#include "CN_COM.h"
#include "AVRDEVICE.h"
#include "HEXparser.h"



class AVRProg
{
protected:
	long pagesize; // Flash page size.
	bool setAddress( long address )
	{
		if(!com.IsOpen())return false;
		char c;
		/* Set current address */
		/* Send command 'A' */
		c = 'A';
		com.Write(&c,1);
		c = (char)(address >> 8);
		com.Write(&c,1);
		c = (char)(address & 0xff);
		com.Write(&c,1);
		/* Should return CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能設定地址(命令:A)!");
			return false;
		}
		return true;
	}
	
	bool writeFlashLowByte( long value ) // Alwyas low byte first...
	{
		
		if(!com.IsOpen())return false;
		char c;
		/* Send command 'c' */
		c = 'c';
		com.Write(&c,1);
		c = (char)(value);
		com.Write(&c,1);
		/* Should return CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能FLASH寫(命令:c)!");
			return false;
		}
		return true;
	}
	bool writeFlashHighByte( long value ) // ...then high byte.
	{
		
		if(!com.IsOpen())return false;
		char c;
		/* Send command 'C' */
		c = 'C';
		com.Write(&c,1);
		c = (char)(value);
		com.Write(&c,1);
		/* Should return CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能FLASH寫(命令:C)!");
			return false;
		}
		return true;
	}
	bool writeFlashPage()
	{
		
		if(!com.IsOpen())return false;
		char c;
		/* Send command 'm' */
		c = 'm';
		com.Write(&c,1);
		/* Should return CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能FLASH頁寫(命令:m)!");
			return false;
		}
		return true;
	}
	bool verifyIsOk(long address,long readc)
	{
		long mem;
		if(address & 0x01)
		{
			mem=hexf.getData( address);
		}
		else
		{
			mem=hexf.getData( address);
			if(address<hexf.getRangeEnd())mem|=hexf.getData( address+1)<<8;
		}
		if( mem != readc )
		{
			char mss[50];
			sprintf(mss,"地址:%04X 讀出:%04X 應該:%04X ! 繼續?",address,readc,mem);
			if(AfxMessageBox( mss,MB_YESNO)==IDYES)	
				return true ;
			else return false;
		}
		else return true;
	}
public:
	cnComm com;
	AVRDevice device;
	HEXFile hexf;
	unsigned char devicesupport[256];
	long devicesupportNumber;
	bool getDeviceSupportList()
	{
			int i = 0;
			devicesupportNumber=0;
			char c='t';
			com.Write(&c,1);
			do
			{
                if(com.GetCharWait(&c))
				{
					devicesupport[i]=c;

				}
				else devicesupport[i]=0;

			    if(devicesupport[i])
				{
					devicesupportNumber++;
				}
			}while (devicesupport[i++]);
			return true;
	}
	
	/* 結構 */
	AVRProg(){;}
	
	/* 析構 */
	~AVRProg()	{;}
	
	/* 方法 */
	CString readProgrammerID( ) // Reads 7-character ID.
	{
		
		CString id( "1234567" ); // Reserve 7 characters.
		
		if(!com.IsOpen())
		{
			AfxMessageBox(  "NULL pointer provided for communication channel!" );
			return id;
		}
		
		char c,s[16];
		
		/* Synchonize with programmer */
		c=27;
		for( int i = 0; i < 10; i++ )
			com.Write(&c,1); // Send ESC
		com.ClearRecvBuff();
		
		//讀軟件標識
		c='S';
		com.Write(&c,1);
		if(com.GetStrWait(s,7)==7)
		{
			id = s;
		}
		else
		{
			//id="";	
			AfxMessageBox(  "沒有發現編程器!" );
		}
		getDeviceSupportList();
		return id;
	}
	
	
	// 設頁尺寸
	void setPagesize( long _pagesize ) { pagesize = _pagesize; }
	// 進入編程模式
	bool enterProgrammingMode()
	{
		if(!com.IsOpen())return false;
		char c;
		/* Must select a device from the AVRISP device code table first */
		c='T';
		com.Write(&c,1);
		c=device.getDeviceCode();
		com.Write(&c,1);
		/* Should return CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能進入編程模式(命令:T)!");
			return false;
		}
		long pgs = device.getPageSize();
		//if( pgs == 0 ) pgs = -1;
		setPagesize( pgs )	;	
		/* Send command 'P' */
		c='P';
		com.Write(&c,1);
		/* Should return CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能進入編程模式(命令:P)!");
			return false;
		}
		return true;
	}
	// 退出編程模式
	bool leaveProgrammingMode()
	{
		if(!com.IsOpen())return false;
		char c;
		/* Send command 'L' */
		c='L';
		com.Write(&c,1);
		/* 應該返回 CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能退出編程模式(命令:L)!");
			return false;
		}
		return true;
	}
	
	// 芯片擦除
	bool chipErase()
	{
		if(!com.IsOpen())return false;
		char c;
		/* Send command 'e' */
		c='e';
		com.Write(&c,1);
		/* 應該返回 CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能擦除(命令:e)!");
			return false;
		}
		return true;
	}
	
	bool readOSCCAL( long pos, long * value )
	{
		if(!com.IsOpen())return false;
		char c;
		/* Send command '.' */
		c = '.';
		com.Write(&c,1);
		c = 0x38;
		com.Write(&c,1);
		c = 0x00;
		com.Write(&c,1);
		c = (char)pos;	
		com.Write(&c,1); 
		c = 0x00;			// Dummy.
		com.Write(&c,1);
		if(com.GetCharWait(&c)) * value = c;
		else {AfxMessageBox( "通用命令超時!");return false;}
		
		/* 應該返回 CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能校正時鐘(命令:.)!");
			return false;
		}
		return true;
	}
	// 讀芯片簽名
	bool readSignature( long * sig0, long * sig1, long * sig2 )
	{
		if(!com.IsOpen())return false;
		char c,s[4];
		com.ClearRecvBuff();
		/* Send command 's' */
		c='s';
		com.Write(&c,1);
		if(com.GetStrWait(s,3)!=3)
		{
			AfxMessageBox( "未知簽名(命令:s)!");
			return false;
		}
		else 
		{
			*sig2=s[0];
			*sig1=s[1];
			*sig0=s[2];
			return true;
		}
		AfxMessageBox( "超時!");
		return false;
		
	}
	bool checkSignature( long sig0, long sig1, long sig2 )
	{
		long sig[3];
		
		/* Get signature */
		readSignature( sig, sig+1, sig+2 );
		
		/* Compare signature */
		if( sig[0] != sig0 || sig[1] != sig1 || sig[2] != sig2 )
		{
			AfxMessageBox( "標識不匹配芯片!");
			return false;
		}
		
		return true; // Indicate supported command.
	}
	bool equalSignature( long sig0, long sig1, long sig2 )
	{
		long sig[3];
		
		/* Get signature */
		device.getSignature( sig, sig+1, sig+2 );	

		/* Compare signature */
		if( sig[0] != sig0 || sig[1] != sig1 || sig[2] != sig2 )
		{
			//AfxMessageBox( "標識不匹配芯片數據表!");
			return false;
		}
		
		return true; // Indicate supported command.
	}
	bool isRightSignature(long * sig0, long * sig1, long * sig2)
	{
		long sig[3];
		readSignature( sig, sig+1, sig+2 );
		*sig2=sig[2];
		*sig1=sig[1];
		*sig0=sig[0];
		return equalSignature( sig[0], sig[1],sig[2] );
	}
	bool isDeviceOK()
	{
		char ts[80];
		bool r = true;
		long sig[3];
		readSignature( sig, sig+1, sig+2 );
		long sig_get[3];
		device.getSignature( sig_get, sig_get+1, sig_get+2 );
		
		if( sig[0] != sig_get[0] || sig[1] != sig_get[1] || sig[2] != sig_get[2] )
		{
			sprintf(ts,"%s 標識不匹配:%02X %02X %02X 不等于 %02X %02X %02X ! 繼續?",
				device.getDeviceName(),
				(unsigned char)sig[0],(unsigned char)sig[1],(unsigned char)sig[2],
				(unsigned char)sig_get[0],(unsigned char)sig_get[1],(unsigned char)sig_get[2]);
			if(AfxMessageBox( ts ,MB_YESNO) == IDNO) r= false;
		}
	return r;
		
	}
	
	bool writeFlashByte( long address, long value )
	{
		if(!com.IsOpen())return false;
		if( address >= 0x20000 )
		{
			AfxMessageBox( "Flash addresses above 128k are currently not supported!");
			return false;
		}
		setAddress( address >> 1 ); // Flash operations use word addresses.
		
		/* Move data if at odd address */
		if( address & 0x01 ) // Odd address?
			value = (value << 8) | 0x00ff; // Move to high byte of one flash word.
		else
			value |= 0xff00; // Ensure no-write for high byte.
		
		/* Send low and high byte */
		writeFlashLowByte( value & 0xff );
		writeFlashHighByte( value >> 8 );
		
		/* Issue page write if required */
		if( pagesize != -1 && pagesize != 0)
		{
			setAddress( address >> 1 ); // The address could be autoincremented.
			writeFlashPage();
		}
		
		return true; // Indicate supported command.
	}
	bool writeEEPROMByte( long address, long value )
	{
		if(!com.IsOpen())return false;
		if( address >= 0x10000 )
		{
			AfxMessageBox( "EEPROM addresses above 64k are currently not supported!");
			return false;
		}
		
		setAddress( address );
		char c;
		/* Send command 'l' */
		c='D';
		com.Write(&c,1);
		c=(char)( value );
		com.Write(&c,1);
		/* 應該返回 CR */
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if(c != '\r' )
		{
			AfxMessageBox( "不能寫EEPROM BYTE(命令:D)!");
			return false;
		}
		
		return true; // Indicate supported command.
	}
	
	bool writeFlash(CProgressCtrl *p)//( HEXFile * data )
	{
		long start, end; // Data address range.
		bool autoincrement; // Bootloader supports address autoincrement?
		long address;
		
		/* Check that pagesize is set */
		if( pagesize == -1 )
			AfxMessageBox( "Programmer pagesize is not set!" );
		
		/* Get range from HEX file */
		start = hexf.getRangeStart();
		end = hexf.getRangeEnd();
		
		/* Check autoincrement support */
		char c;
		c='a';
		com.Write(&c,1);
		
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if( c == 'Y' )
			autoincrement = true;
		else
			autoincrement = false;
		
		/* Set initial address */
		setAddress( start >> 1 ); // Flash operations use word addresses.
		
		/* Need to write one odd byte first? */
		address = start;
		if( address & 1 )
		{
			/* Use only high byte */
			writeFlashLowByte( 0xff ); // No-write in low byte.
			writeFlashHighByte(  hexf.getData( address ) );
			
			address++;
			
			/* Need to write page? */
			if( pagesize != -1  && pagesize != 0)
			{
				if( !(address % pagesize) ) // Just passed page limit?
				{
					setAddress( (address-1) >> 1 ); // Set to an address inside the page.
					writeFlashPage();
					setAddress( address >> 1 );
				}
			}
		}
		
		/* Write words */
		do
		{
			/* Need to set address again? */
			if( !autoincrement )
				setAddress( address >> 1 );
			
			/* Write words */
			writeFlashLowByte(  hexf.getData( address ) );
			writeFlashHighByte(  hexf.getData( address+1 ) );
			
			address += 2;
			
			
			/* Need to write page? */
			if( pagesize != -1  && pagesize != 0)
			{
				if( (address % pagesize) == 0 ) // Just passed a page boundary?
				{
					setAddress( (address-2) >> 1 ); // Set to an address inside the page.
					writeFlashPage();
					setAddress( address >> 1 );
				}
			}
			p->SetPos(100*(address)/(end+1));
		} while( address < end );
		
		/* Need to write one even byte before finished? */
		if( address == end )
		{
			/* Use only low byte */
			writeFlashLowByte(  hexf.getData( address ) );
			writeFlashHighByte( 0xff ); // No-write in high byte.
		}
		
		/* Need to write page? */
		if( pagesize != -1  && pagesize != 0)
		{
			if( address == end || // One extra byte written...
				(end+1)%pagesize != 0 ) // ...or end is not on page boundary.
			{    
				setAddress( (address-2) >> 1 ); // Set to an address inside the page.
				writeFlashPage();
			}
		}
		p->SetPos(0);
		return true; // Indicate supported command.
	}
	bool readFlash(CProgressCtrl *p)//( HEXFile * data )
	{
		long start, end; // Data address range.
		bool autoincrement; // Bootloader supports address autoincrement?
		long address;
		
		if( pagesize == -1 )
			AfxMessageBox( "Programmer pagesize is not set!" );
		
		/* Get range from HEX file */
		start = hexf.getRangeStart();
		end = hexf.getRangeEnd();
		
		/* Check autoincrement support */
		char c;
		c='a';
		com.Write(&c,1);
		
		if(!com.GetCharWait(&c))
		{
			AfxMessageBox( "超時!");
			return false;
		}
		else	if( c == 'Y' )
			autoincrement = true;
		else
			autoincrement = false;
		
		/* Set initial address */
		setAddress( start >> 1 ); // Flash operations use word addresses.
		
		/* Need to read one odd byte first? */
		address = start;
		if( address & 1 )
		{
			/* Read both, but use only high byte */
			c='R';
			com.Write(&c,1);
			
			if(!com.GetCharWait(&c))
			{
				AfxMessageBox( "超時!");
				return false;
			}
			
			hexf.setData( address, c ); // High byte.
			if(!com.GetCharWait(&c))
			{
				AfxMessageBox( "超時!");
				return false;
			} // Dont use low byte.
			
			address++;
		}
		
		/* Get words */
		do
		{
			/* Need to set address again? */
			if( !autoincrement )
				setAddress( address >> 1 );
			
			/* Get words */
			c='R';
			com.Write(&c,1);
			
			if(!com.GetCharWait(&c))
			{
				AfxMessageBox( "超時!");
				return false;
			}
			
			hexf.setData( address+1, c ); // High byte.
			if(!com.GetCharWait(&c))
			{
				AfxMessageBox( "超時!");
				return false;
			}
			hexf.setData( address, c );// Dont use low byte.
			
			
			address += 2;
			
		p->SetPos(100*(address)/(end+1));
			
		} while( address < end );
		
		/* Need to read one even byte before finished? */
		if( address == end )
		{
			/* Read both, but use only low byte */
			c='R';

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频欧美精品| 亚洲精品成人悠悠色影视| 亚洲欧美精品午睡沙发| 日韩成人午夜精品| 91国内精品野花午夜精品| 国产综合色视频| 777a∨成人精品桃花网| 1000部国产精品成人观看| 最好看的中文字幕久久| 国产一区二区免费看| 成人免费三级在线| xnxx国产精品| 奇米四色…亚洲| 制服丝袜亚洲色图| 久久久av毛片精品| 精品一区二区三区视频在线观看| 国产自产2019最新不卡| 91精品视频网| 国产视频亚洲色图| 亚洲女厕所小便bbb| 成人免费三级在线| 国产欧美一区二区三区在线老狼 | 91精品婷婷国产综合久久性色 | 久久综合色之久久综合| 日韩高清中文字幕一区| 欧美日韩一级大片网址| 亚洲午夜久久久久久久久久久| 日韩高清国产一区在线| 国产福利精品一区二区| 精品久久久久一区二区国产| 日本成人在线看| 日韩免费观看高清完整版| 日韩成人精品视频| 日韩欧美国产综合在线一区二区三区| 欧美国产乱子伦| 成人在线视频首页| 亚洲人精品午夜| 色婷婷综合激情| 亚洲成人av一区| 日韩久久精品一区| 国产高清亚洲一区| 88在线观看91蜜桃国自产| 亚洲国产精品久久久久秋霞影院| 国产在线精品免费| 欧美麻豆精品久久久久久| 国产精品乱码一区二三区小蝌蚪| 亚洲18色成人| 欧美精品一区在线观看| 午夜私人影院久久久久| 欧美一区二区三区免费| 最新热久久免费视频| 欧美综合一区二区三区| 日韩激情一二三区| 在线精品亚洲一区二区不卡| 亚洲线精品一区二区三区八戒| 国产suv精品一区二区6| |精品福利一区二区三区| 国产成人免费网站| 欧美成人r级一区二区三区| 国产成人精品综合在线观看 | 91搞黄在线观看| 亚洲成精国产精品女| 精品久久久久久久一区二区蜜臀| 午夜婷婷国产麻豆精品| 国产亚洲人成网站| 欧美性受xxxx黑人xyx性爽| 国产伦精品一区二区三区免费| 3d动漫精品啪啪1区2区免费| 国产一区二区三区黄视频 | 欧美精品黑人性xxxx| 国产精品1区二区.| 亚洲超碰97人人做人人爱| 久久久久久久国产精品影院| 美腿丝袜亚洲综合| 亚洲日韩欧美一区二区在线| 精品理论电影在线观看| 欧美性高清videossexo| 顶级嫩模精品视频在线看| 日韩电影免费在线观看网站| 日韩毛片在线免费观看| www.66久久| 国产精品99久久久久久宅男| 精品国产精品网麻豆系列| 精品在线观看免费| 五月综合激情婷婷六月色窝| 国产欧美精品区一区二区三区| 国产成人啪午夜精品网站男同| 中文久久乱码一区二区| 欧美zozozo| 7777女厕盗摄久久久| 精品午夜久久福利影院| 亚洲一区在线视频观看| 中文字幕中文字幕在线一区| 91麻豆精品视频| 国产91富婆露脸刺激对白 | 色综合久久久网| 亚洲一区二区三区四区的| 91精品国产综合久久久久久久 | 国产精品日产欧美久久久久| 中文字幕欧美激情一区| 国内精品视频666| 一区二区三区四区不卡在线 | 国产成人免费视| 日本网站在线观看一区二区三区| 欧美成人性福生活免费看| 欧美久久久久久久久中文字幕| 蜜臀av性久久久久蜜臀aⅴ | 精品国产一区a| 欧美高清性hdvideosex| 欧美日韩国产精选| 欧美性xxxxxxxx| 色综合亚洲欧洲| 在线看国产一区| 欧美日韩一区二区三区视频| 欧美日韩免费一区二区三区| 欧美综合色免费| 欧美乱熟臀69xxxxxx| 91麻豆精品国产无毒不卡在线观看 | 狠狠色狠狠色合久久伊人| 久久电影网电视剧免费观看| 精品一区二区三区香蕉蜜桃| 国产在线不卡一区| 国产91对白在线观看九色| www.亚洲免费av| 在线一区二区视频| 911精品国产一区二区在线| 国产精品一区二区果冻传媒| 亚洲在线观看免费| 日韩高清一区在线| 国产在线一区二区综合免费视频| 樱花草国产18久久久久| 亚洲超碰精品一区二区| 久久99国产精品免费网站| 国产大陆精品国产| 在线亚洲精品福利网址导航| 欧美日本国产视频| xf在线a精品一区二区视频网站| 欧美理论在线播放| 2021国产精品久久精品| 亚洲免费观看高清在线观看| 久久香蕉国产线看观看99| 中文字幕一区二区不卡 | 亚洲天堂成人在线观看| 亚洲成人手机在线| 韩国三级在线一区| 色94色欧美sute亚洲13| 日韩免费高清视频| 亚洲四区在线观看| 欧美高清在线精品一区| 欧美精品一区二区三区在线| 欧美丰满少妇xxxxx高潮对白 | 丝袜亚洲另类欧美综合| 国产自产高清不卡| 91国产免费看| 久久精品无码一区二区三区| 午夜免费久久看| 成人黄色小视频| 成人免费看片app下载| 欧美裸体bbwbbwbbw| 中文字幕永久在线不卡| 久久99久久精品| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品久久久久毛片软件| 日本一区二区三区在线不卡| 久久久久久久久99精品| 国产三级久久久| 日韩成人免费电影| 美女一区二区三区在线观看| 91丨porny丨蝌蚪视频| 欧美精品一区二区不卡| 亚洲www啪成人一区二区麻豆| 石原莉奈在线亚洲三区| 99精品国产一区二区三区不卡| 972aa.com艺术欧美| 国产午夜精品一区二区三区视频 | 日韩欧美亚洲另类制服综合在线| 91精品综合久久久久久| 一区二区三区资源| 91色porny| 国产精品久久久久精k8| 国产精品乡下勾搭老头1| 日韩欧美久久久| 日韩激情中文字幕| 欧美狂野另类xxxxoooo| 亚洲成人中文在线| 欧美亚洲图片小说| 一区二区免费在线播放| 日本黄色一区二区| 91精品国产综合久久久久| 精品国产免费一区二区三区四区| 国产日韩av一区| 国产精品一区在线观看你懂的| 91在线观看一区二区| 欧美激情一区二区三区四区 | 在线一区二区观看| 亚洲黄色片在线观看| 色爱区综合激月婷婷| 精品少妇一区二区| 麻豆精品视频在线观看| 日韩欧美电影在线|