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

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

?? avr910protocol.c

?? 可用來自做的AVR-USB-ISP的源碼,內符電路圖,用AVR M8來模擬USB接口
?? C
字號:
/************************************************************************************************
 * Project: USB AVR-ISP
 * Author:  Jens Aehle
 * Contact: christian at ullihome dot de
 *
 * Creation Date: 2007-06....
 * Copyright: (c) 2007 
 * License: GPLv2
 *
 *
 * Achtung diese Version enth鋖t noch keienrlei Sicherheitabfragen!!!
 *
 *
 ***********************************************************************************************/

#include "avr910protocol.h"
#include "usb_uart.h"
#include "isp.h"
#include "timer.h"

uint8_t    	AVR910_Status;

struct {
  uint8_t cmd;
  uint8_t addr[2];
  uint8_t data;
} AVR910_command;

uint8_t AVR910_commandindex;


uint8_t buffer[5];
uint8_t ptr=0;
uint8_t AVR910_device;
char c;

//---------------------------------------------------------------
//
// die DeviceLsite ist nur EINE Auswahl von mir
// die Anzahl abzugleichen ist abzugleichen
//
// Es w鋜e zu 黚erlegen, ob man die paar Bytes nicht einfach in den 
// EEPROM legt. Die h鋞te zwei Vorteile:	- weniger PGM-Platz
//											- Anpassung an AVRDUDE wird einafcher
//								Nachteil:	- das Lesen dauert eine Ewigkeit
//
//---------------------------------------------------------------

const char deviceanzahl = 35;

const char devices[] =
{		    
		    0x51,		//tiny10
			0x50,		//tiny11
			0x55,		//tiny12
			0x56,		//tiny15
			0x58,		//tiny19
			0x5E,		//tiny26
			0x5C,		//tiny28
			0x13,		//S1200
			0x20,		//S2313
			0x48,		//S2323
			0x34,		//S2333
			0x4C,		//S2343
			0x28,		//S4414
			0x30,		//S4433
			0x6C,		//S4434
			0x3A,		//mega8515
			0x3A,		//mega8515B
			0x76,		//mega8
			0x77,		//mega8B
			0x74,		//mega16
			0x75,		//mega16B
			0x72,		//mega32
			0x73,		//mega32B
			0x43,		//mega128
			0x44,		//mega128B
			0x38, 		//S8515
			0x68,		//S8535 
			0x70,		//C8534
			0x71,		//C8544
			0x65,		//mega83
			0x67,		//mega83B
			0x60,		//mega161
			0x61,		//mega161B
			0x64,		//mega163
			0x66,		//mega163B
			0x41		//mega103
};


//---------------------------------------------------------------
//
// f黵 mich geh鰎en die nachfolgenden Routinen in die isp.c!
// geht aber wegen Platzmangel nicht
//
//---------------------------------------------------------------
void autoincrement(){
    uint16_t addr = (AVR910_command.addr[0]<<8) | AVR910_command.addr[1];
	addr++;
    AVR910_command.addr[1] = addr;
	AVR910_command.addr[0] = addr >> 8;
}

char DoISP(){
	ISP_transmit(AVR910_command.cmd);				// Befehl
	ISP_transmit(AVR910_command.addr[0]);			// Adresse
	ISP_transmit(AVR910_command.addr[1]);			// Adresse
    return ISP_transmit(AVR910_command.data);		// Data
}

//---------------------------------------------------------------
//
// Ende des Blocks
//
//---------------------------------------------------------------

void AVR910_init()
{
}

void AVR910_processmessage()
{
}

void AVR910_byterecived(uint8_t data)
{										// avrdude-Reihenfolge S, V, v, p, a, t, T, P
  buffer[ptr] = data;

  switch (buffer[0]) {
	    case 'P': 	ISP_connect();			// Umschalten in den Programmiermodus
					if (ISP_enterprogrammingmode()==0) UART_putc('\r');
					                              else UART_putc('E');
					ptr=0;
		          	break;
					
        case 'S':   UART_puts("AVR ISP"); 	// Name des Dongels in genau 7 Zeichen 
					ptr=0;
		          	break;

	    case 'V':   UART_putc('0');			// Abfrage der SoftWare-Version
                  	UART_putc('1');			// 2Char
					ptr=0;
				  	break;

		case 'v': 	UART_putc('0');			// Abfrage der HardWare-Vversion
                  	UART_putc('1');			// 2Char
					ptr=0;	
			  		break;

		case 'p': 	UART_putc('S');			// Ist der Prommer seriell oder parallel?
                  	ptr=0;					// S = seriel         P = parallel
			  		break;
		
		case 'a': 	UART_putc('Y');			// Kann der . Prommer die Adressen automatisch hochz鋒len?
					ptr = 0;				// N = nein    Y = ja
				  	break;

        case 't':  	for (ptr=0; ptr<deviceanzahl; ptr++)	// eine Liste der unterst黷zten Atmels DEVCODE-AVRDUDE.CONF
					       UART_putc(devices[ptr]);	
					UART_putc(0);			// Liste abschlie遝n						   		
					ptr = 0;
			  		break;

        case 'T':   if (ptr == 0) ptr++;	// AVRDUDE gibt das DEVICE an den Proggie
		            else {
					       AVR910_device = data;
					       ptr = 0;
						   UART_putc('\r');
						 }	
			  		break;

        case 'x':   if (ptr == 0) ptr++;	// Set LEDs - wer es brauch
		            else {
					       ptr = 0;
						   UART_putc('\r');
						 }	
			  		break;

        case 'y':   if (ptr == 0) ptr++;	// Clear LEDs - wer es brauch
		            else {
					       ptr = 0;
						   UART_putc('\r');
						 }	
			  		break;

        case 's':   UART_putc(ISP_readsignaturebyte(0));	// Einlesen der Signatur des Atmel-Devices
		            UART_putc(ISP_readsignaturebyte(1));	// 3 Bytes zur點kschicken
					UART_putc(ISP_readsignaturebyte(2));
					ptr = 0;
			  		break;

        case 'e':   ISP_erase();			// Chip l鰏chen
 				   	UART_putc('\r');
					ptr = 0;
					break;

        case 'A':   if (ptr < 2) ptr++;		// Set Adress
		            else {
						   AVR910_command.addr[0] = buffer[1];
						   AVR910_command.addr[1] = buffer[2];
						   UART_putc('\r');
					       ptr = 0;
						 }	
			  		break;

        case 'C':   if (ptr == 0) ptr++;				// FLASHschreiben - HiByte
		            else {
						   AVR910_command.cmd = 0x48;
						   //  AVR910_command.addr[0]; 	brauchen wir nicht
						   //  AVR910_command.addr[1];
						   AVR910_command.data = data;
						   DoISP();
						   TIMER_delay(4);				// Warteschleife
						   autoincrement();				// nicht vergessen!!!!
						   UART_putc('\r');
					       ptr = 0;
						 }	
			  		break;

        case 'c':   if (ptr == 0) ptr++;				// FLASHschreiben - LoByte
		            else {
						   AVR910_command.cmd = 0x40;
						   //  AVR910_command.addr[0]; 	brauchen wir nicht
						   //  AVR910_command.addr[1];
						   AVR910_command.data = data;
						   DoISP();
						   TIMER_delay(4);				// Warteschleife
						   UART_putc('\r');
					       ptr = 0;
						 }	
			  		break;

        case 'D':   if (ptr == 0) ptr++;				// Schreiben eines Bytes in den EEPROM
		            else {
						   AVR910_command.cmd = 0xC0;	// Befehl laut tabelle
 					       //  AVR910_command.addr[0]; 		brauchen wir nicht
						   //  AVR910_command.addr[1];
						   AVR910_command.data = data;	
						   DoISP();
						   TIMER_delay(4);				// Warteschleife
						   autoincrement();	
					       ptr = 0;
						   UART_putc('\r');
						}	
			  		break;

        case 'd':   									// Lesen eines Bytes aus dem EEPROM
					AVR910_command.cmd = 0xA0;			// Befehl laut tabelle
 					//  AVR910_command.addr[0]; 			brauchen wir nicht
					//  AVR910_command.addr[1];
					AVR910_command.data = data;			
					c = DoISP();
					UART_putc(c);
					ptr = 0;
			  		break;



        case 'R':   AVR910_command.cmd = 0x28;			// FLASH lesen Hi
 				    //  AVR910_command.addr[0]; 		brauchen wir nicht
					//  AVR910_command.addr[1];
					AVR910_command.data = 0x00;			// egal
					c = DoISP();
					UART_putc(c);
					AVR910_command.cmd = 0x20;			// FLASH lesen Lo
 				    //  AVR910_command.addr[0]; 		brauchen wir nicht
					//  AVR910_command.addr[1];
					AVR910_command.data = 0x00;			// egal
					c = DoISP();
					autoincrement();					// ganz wichtig
					UART_putc(c);
					ptr = 0;
			  		break;

        case 'L':   ISP_disconnect(); 					// Programmiermodus verlassen
					UART_putc('\r');					// event. Hardwarenahe umsetzen
					ptr = 0;
			  		break;
       
	    case 'l':	// Hier ist Vorsicht geboten         // Write LOCK-Bits BRUZEL-BRUZEL- ... nix geht mehr
					if (ptr == 0) ptr++;	
		            else {                               // einfach mal nicht die DoISP Struktur nutzen
							ISP_transmit(0xAC);			 // Befehl
 					        ISP_transmit(0xE0); 		     // laut Tabelle: B 111x xxxx
						    ISP_transmit(0x00);			 // egal
							ISP_transmit(0xC0 | data);   // hier passiert es
 						    TIMER_delay(4);				 // Warteschleife

					       	ptr = 0;
						   	UART_putc('\r');
						 }	
			  		break;					

	    case 'm':								         //                              // einfach mal nicht die DoISP Struktur nutzen
					AVR910_command.cmd = 0x4c;			// Befehle
 				    //  AVR910_command.addr[0]; 		brauchen wir nicht
					//  AVR910_command.addr[1];
					AVR910_command.data = 0x00;			// egal
					c = DoISP();					       	
					ptr = 0;
				   	UART_putc('\r');
			  		break;					


        case ':':   if (ptr < 3) ptr++;					// Universal Kommando
		            else {
						   ISP_transmit(buffer[1]);
						   ISP_transmit(buffer[2]);
						   ISP_transmit(buffer[3]);
   						   c = ISP_transmit(0);			// laut Protokoll
						   TIMER_delay(4);				// Warteschleife
						   UART_putc(c);
						   UART_putc('\r');
					       ptr = 0;
						 }	
			  		break;

        case '.':   if (ptr < 4) ptr++;					// New Universal Kommando
		            else {
						   ISP_transmit(buffer[1]);
						   ISP_transmit(buffer[2]);
						   ISP_transmit(buffer[3]);
   						   c = ISP_transmit(buffer[4]); // laut Protokoll
						   TIMER_delay(4);				// Warteschleife
						   UART_putc(c);
						   UART_putc('\r');
					       ptr = 0;
						 }	
			  		break;

		default: if (ptr<5) ptr++;
		         else  {
				    UART_putc('?');
					ptr = 0;
                 }   
  }


}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦精品一区二区三区视频青涩| 国产亚洲综合在线| 亚洲一二三区在线观看| 一本色道久久综合精品竹菊| 国产精品嫩草99a| 99久久久免费精品国产一区二区| 国产视频一区二区在线观看| 不卡的av中国片| 樱桃视频在线观看一区| 欧美日韩国产一级片| 麻豆视频观看网址久久| 久久精品网站免费观看| caoporen国产精品视频| 亚洲福利视频三区| www亚洲一区| 9i在线看片成人免费| 亚洲二区在线观看| 久久人人97超碰com| 99精品桃花视频在线观看| 亚洲国产日韩在线一区模特| 欧美一级黄色录像| 成人性生交大片免费看中文| 一区二区三区在线观看视频| 欧美一区二区三区在线观看视频| 国产一区福利在线| 亚洲日本在线天堂| 欧美一级黄色大片| 成人高清视频在线| 日韩精品电影一区亚洲| 久久久99免费| 欧美日韩国产成人在线免费| 国产黄色精品网站| 亚洲国产成人av好男人在线观看| 久久老女人爱爱| 欧美亚洲高清一区二区三区不卡| 韩日欧美一区二区三区| 亚洲精品中文在线影院| 精品少妇一区二区三区免费观看| 91麻豆精东视频| 国产精品综合在线视频| 亚洲国产精品一区二区www| 久久久久久久网| 欧美乱妇15p| 91视频www| 国产高清不卡一区| 毛片基地黄久久久久久天堂| 一区二区在线观看视频 | 日本精品视频一区二区三区| 激情六月婷婷久久| 午夜电影网一区| 亚洲一区二区三区视频在线| 国产视频在线观看一区二区三区| 欧美一三区三区四区免费在线看| 一本一道综合狠狠老| 国产成人av电影免费在线观看| 麻豆国产精品一区二区三区| 亚洲午夜免费视频| 亚洲女同一区二区| 亚洲国产精品ⅴa在线观看| 日韩三级免费观看| 欧美丰满美乳xxx高潮www| 色94色欧美sute亚洲线路一ni| 国产aⅴ综合色| 国产成人在线观看免费网站| 精品一区二区三区久久| 亚洲高清免费视频| 一区二区三区久久| 亚洲精品一二三四区| 中文欧美字幕免费| 国产女人18水真多18精品一级做| 欧美精品一区二区精品网| 日韩一区二区在线观看视频| 欧美男同性恋视频网站| 欧美日韩中文另类| 欧美特级限制片免费在线观看| 91国产丝袜在线播放| 色94色欧美sute亚洲线路一久| 色8久久精品久久久久久蜜| 99re热视频这里只精品| 91丨九色porny丨蝌蚪| av影院午夜一区| 91香蕉视频mp4| 91老师国产黑色丝袜在线| 日本电影亚洲天堂一区| 欧洲中文字幕精品| 欧美乱妇23p| 26uuu另类欧美亚洲曰本| 久久久噜噜噜久久中文字幕色伊伊| 精品福利视频一区二区三区| 久久综合久久99| 国产精品久久一级| 亚洲男同1069视频| 亚洲午夜精品17c| 蜜桃久久久久久久| 国产成人免费网站| 91丨九色丨黑人外教| 欧美日韩你懂得| 精品久久国产字幕高潮| 久久久久高清精品| 亚洲色大成网站www久久九九| 亚洲午夜在线电影| 精品一区二区三区不卡| 成人app软件下载大全免费| 在线中文字幕一区| 日韩一本二本av| 国产精品美女视频| 中文字幕一区二区三中文字幕| 色综合久久久久综合体桃花网| 亚洲在线观看免费视频| 欧美色精品天天在线观看视频| 5月丁香婷婷综合| 久久久久九九视频| 亚洲一区二区在线播放相泽| 免费观看在线综合| 成人动漫在线一区| 欧美人妖巨大在线| 国产欧美一区视频| 午夜视频在线观看一区二区| 国产一区二区三区日韩| 在线观看三级视频欧美| 精品国产免费一区二区三区香蕉| 中文字幕一区二区三区不卡在线 | 最新成人av在线| 一个色妞综合视频在线观看| 日韩一本二本av| 在线电影国产精品| 亚洲国产精品成人综合| 五月激情六月综合| 成人国产精品免费观看视频| 91精选在线观看| 亚洲欧洲成人自拍| 极品少妇一区二区三区精品视频| www.欧美亚洲| 久久伊99综合婷婷久久伊| 一区二区三区av电影| 国产福利一区二区三区视频在线| 欧美理论电影在线| 亚洲精品少妇30p| 国产成人精品综合在线观看| 欧美老年两性高潮| 国产精品国产三级国产aⅴ入口| 久久精品国产精品亚洲综合| 在线中文字幕不卡| 自拍偷拍亚洲欧美日韩| 国产一区二区网址| 91精品国产欧美一区二区成人| 亚洲欧美综合网| 国产精品一区二区久激情瑜伽 | 欧美日本乱大交xxxxx| 国产精品美女久久久久久久久久久| 麻豆成人久久精品二区三区红 | 国产毛片精品一区| 4438成人网| 亚洲福利一区二区三区| 色综合咪咪久久| 亚洲免费观看高清完整版在线| 国产传媒久久文化传媒| 久久伊99综合婷婷久久伊| 久久99精品久久久久久国产越南| 欧美一区二区三区四区五区| 亚洲一区二区av电影| 日本丶国产丶欧美色综合| 中文字幕一区二区三区四区不卡| 国产91精品久久久久久久网曝门| 久久免费精品国产久精品久久久久| 蜜桃av一区二区三区| 日韩欧美国产综合| 久久精品国产久精国产| 精品美女被调教视频大全网站| 蜜乳av一区二区| 精品久久久久一区二区国产| 精品影院一区二区久久久| 日韩精品中文字幕在线不卡尤物| 美女高潮久久久| 久久久久久免费| 福利91精品一区二区三区| 国产亚洲欧美日韩在线一区| 国产成人鲁色资源国产91色综 | 欧美mv日韩mv国产网站| 国产真实乱子伦精品视频| 26uuuu精品一区二区| 成人在线视频一区二区| 国产精品女同互慰在线看| 91亚洲永久精品| 香蕉成人啪国产精品视频综合网 | 亚洲小少妇裸体bbw| 欧美高清视频www夜色资源网| 秋霞午夜av一区二区三区| 日韩免费看的电影| 国产成人超碰人人澡人人澡| 国产精品天干天干在线综合| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美日韩精品免费观看视频| 日本怡春院一区二区| 久久蜜桃香蕉精品一区二区三区| a在线播放不卡| 视频一区二区三区入口| 久久精品人人做人人综合| 一本大道久久a久久精二百| 亚洲mv在线观看|