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

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

?? avr.c

?? 無線通信的主要編程軟件,是無線通信工作人員的必備工具,關天相關教程我會在后續傳上.
?? C
字號:
// $Id: Avr.C,v 1.3 2003/10/07 21:46:13 idgay Exp $/* * $Id: Avr.C,v 1.3 2003/10/07 21:46:13 idgay Exp $ * **************************************************************************** * * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers. * Copyright (C) 1999, 2000, 2001, 2002, 2003  Uros Platise * * 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 * **************************************************************************** *//*	Avr.C		Top class of the AVR micro controllers 	Uros Platise (c) 1999*/#include "config.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include "Avr.h"#include "Error.h"#define TARGET_MISSING 0xff#define DEVICE_LOCKED  0x1/* ATMEL AVR codes */TAvr::TPart TAvr::parts [] = {  /* device         sig. bytes   flash page EEPROM twdFL twdEE  flags */  { "AT90S1200",    0x90, 0x01,   1024,   0,   64,  4000, 4000, AVR_1200 },  { "ATtiny12",     0x90, 0x05,   1024,   0,   64,  1700, 3400, AVR_TN12 },  { "ATtiny15",     0x90, 0x06,   1024,   0,   64,  2000, 4000, AVR_TN15 },#if 0  /* 12V serial programming only; here just for the evidence */  /* ATtiny10 = QuickFlash(TM) OTP */  { "ATtiny10",     0x90, 0x03,   1024,   0,    0,  8000,    0, 0 },  { "ATtiny11",     0x90, 0x04,   1024,   0,    0,  8000,    0, 0 },#endif  { "AT90S2313",    0x91, 0x01,   2048,   0,  128,  4000, 4000, AVR_2313 },  { "AT90S2343",    0x91, 0x03,   2048,   0,  128,  4000, 4000, AVR_8535 },  { "AT90S2323",    0x91, 0x02,   2048,   0,  128,  4000, 4000, AVR_8535 },  /* no longer in production?  2333 -> 4433, tiny22 -> 2343? */  { "AT90S2333",    0x91, 0x05,   2048,   0,  128,  4000, 4000, AVR_4433 },  { "ATtiny22",     0x91, 0x06,   2048,   0,  128,  4000, 4000, AVR_TN22 },  { "ATtiny26",     0x91, 0x09,   2048,  32,  128,  4500, 9000, AVR_TN26 },#if 0  /* 12V parallel programming only; here just for the evidence */  { "ATtiny28",     0x91, 0x07,   2048,   0,    0,  8000,    0, 0 },#endif  { "AT90S4433",    0x92, 0x03,   4096,   0,  256,  4000, 4000, AVR_4433 },  /* no longer in production? -> use 8515, 8535 instead */  { "AT90S4414",    0x92, 0x01,   4096,   0,  256,  4000, 4000, AVR_2313 },  { "AT90S4434",    0x92, 0x02,   4096,   0,  256,  4000, 4000, AVR_8535 },  { "AT90S8515",    0x93, 0x01,   8192,   0,  512,  4000, 4000, AVR_2313 },  { "AT90S8535",    0x93, 0x03,   8192,   0,  512,  4000, 4000, AVR_8535 },#if 0  /* aka AT90S8555 - probably doesn't exist, use ATmega8535 */  { "ATmega83",     0x93, 0x05,   8192, 128,  512, 11000, 4000, AVR_M163 },#endif  { "ATmega8515",   0x93, 0x06,   8192,  64,  512,  4500, 9000, AVR_M163 },  { "ATmega8",      0x93, 0x07,   8192,  64,  512,  4500, 9000, AVR_M163 },  { "ATmega8535",   0x93, 0x08,   8192,  64,  512,  4500, 9000, AVR_M163 },#if 0  /* 12V parallel programming only; here just for the evidence */  { "AT90C8534",    0x93, 0x04,   8192,   0,  512,  8000, 4000, 0 }, #endif  { "ATmega161",    0x94, 0x01,  16384, 128,  512, 11000, 4000, AVR_M161 },  { "ATmega163",    0x94, 0x02,  16384, 128,  512, 15000, 3800, AVR_M163 },  { "ATmega16",     0x94, 0x03,  16384, 128,  512,  4500, 9000, AVR_M163 },  { "ATmega162",    0x94, 0x04,  16384, 128,  512,  4500, 9000, AVR_M128 },  { "ATmega169",    0x94, 0x05,  16384, 128,  512,  4500, 9000, AVR_M128 },  { "ATmega323",    0x95, 0x01,  32768, 128, 1024, 15000, 3800, AVR_M163 },  { "ATmega32",     0x95, 0x02,  32768, 128, 1024,  4500, 9000, AVR_M163 },  { "ATmega64",     0x96, 0x02,  65536, 256, 2048,  4500, 9000, AVR_M128 },  { "ATmega103",    0x97, 0x01, 131072, 256, 4096, 22000, 4000, AVR_M103 },  { "ATmega128",    0x97, 0x02, 131072, 256, 4096,  4500, 9000, AVR_M128 },  { "ATmega103-old",0x01, 0x01, 131072, 256, 4096, 22000, 4000, AVR_M103 },#if 0  { "ATmega603",    0x96, 0x01,  65536, 256, 2048, 22000, 4000, AVR_M103 },  { "ATmega603-old",0x06, 0x01,  65536, 256, 2048, 22000, 4000, AVR_M103 },#endif#if 0 /* not yet */  { "AT89S52",      0x52, 0x06,   8192,   0,    0,  1000,    0, AT89S52 },#endif  { "",          TARGET_MISSING, 0,  0,   0,    0,     0,    0, 0 },  { "locked",    DEVICE_LOCKED,  0,  0,   0,    0,     0,    0, 0 },  { "",          0x0,            0,  0,   0,    0,     0,    0, 0 }};const char* TAvr::segment_names[] = {"flash", "eeprom", "fuse", NULL};/* Private Functions*/TAddr TAvr::GetWritePageSize(){  if (device_locked){return 0;}  assert(part!=NULL);  return part->flash_page_size;}/* Protected Functions*/void TAvr::OverridePart(const char *part_name){  int i;  for (i = 0; parts[i].name[0]; i++) {    if (strcasecmp(parts[i].name, part_name) == 0)      break;  }  if (parts[i].name[0]) {    if (vendor_code != 0x1e	|| part_family != parts[i].part_family	|| part_number != parts[i].part_number) {      vendor_code = 0x1e;      part_family = parts[i].part_family;      part_number = parts[i].part_number;      Info(3, "Override signature bytes, device %s assumed.\n",	   parts[i].name);    }  } else    throw Error_Device("Unknown device specified", part_name);}void TAvr::Identify(){  const char* vendor = "Device";  Info(3, "Vendor Code: 0x%02x\nPart Family: 0x%02x\nPart Number: 0x%02x\n",    vendor_code, part_family, part_number);    /* Identify AVR Part according to the vendor_code ... */  if (vendor_code==0x1e){vendor = "Atmel AVR";}    if (vendor_code==0 && part_family==DEVICE_LOCKED && part_number==0x02){    device_locked=true;    Info(0, "Cannot identify device because it is locked.\n");    /* XXX hack to avoid "invalid parameter" errors if device is locked */    GetCmdParam("-dt_wd_eeprom");    GetCmdParam("-dt_wd_flash");    GetCmdParam("-dvoltage");#if 0    return;#endif  } else{device_locked=false;}  if (part_family==TARGET_MISSING){    Info(0, "An error has occurred during the AVR initialization.\n"	    " * Target status:\n"	    "   Vendor Code = 0x%02x, Part Family = 0x%02x, Part Number = 0x%02x\n\n",	    vendor_code, part_family, part_number);    throw       Error_Device("Probably the wiring is incorrect or target"        " might be `damaged'.");  }  int i,n;  for(i=0; parts[i].part_family != 0x0; i++){    if (part_family == parts[i].part_family){      for (n=i; parts[n].part_family==part_family; n++){        if (part_number == parts[n].part_number){i=n; break;}      }      if (i==n){Info(1, "%s %s is found.\n", vendor, parts[i].name);}      else{Info(1, "%s similar to the %s is found.\n", vendor, parts[i].name);}      part = &parts[i];      break;    }  }  if (parts[i].part_family == 0x0) {    throw Error_Device ("Probably the AVR MCU is not in the RESET state.\n"			"Check it out and run me again.");}  if (!GetCmdParam("--download", false))    SetWriteTimings();}/* This looks like a good approximation to make the device table simpler   (only specify the 5V timings).  */#define CALC_FLASH_T_wd(voltage) ((long) \  ((part ? part->t_wd_flash_50 : 22000) * (5.0 * 5.0) / (voltage * voltage)))#define CALC_EEPROM_T_wd(voltage) ((long) \  ((part ? part->t_wd_eeprom_50 : 4000) * (5.0 * 5.0) / (voltage * voltage)))void TAvr::SetWriteTimings(){  const char* val;  page_size = GetWritePageSize();  if (page_size)    Info(3, "Page Write Enabled, size=%d\n", (int) page_size);  else    Info(3, "Page Write Disabled\n");  /* defaults */  t_wd_flash = CALC_FLASH_T_wd(AVR_DEFAULT_VOLTAGE);  t_wd_eeprom = CALC_EEPROM_T_wd(AVR_DEFAULT_VOLTAGE);        /* set FLASH write delay */    if ((val=GetCmdParam("-dt_wd_flash"))){    t_wd_flash = atol(val);    Info(0, "t_wd_flash = %ld\n", t_wd_flash);    if (t_wd_flash < CALC_FLASH_T_wd(AVR_MAX_VOLTAGE)){      Info(0, " * According to the Atmel specs the t_wd_flash\n"              "   should be at least %ld us\n", 	      CALC_FLASH_T_wd(AVR_MAX_VOLTAGE));#if 0      throw Error_Device("-dt_wd_flash: Value out of range.");#endif    }  }    /* set EEPROM write delay */    if ((val=GetCmdParam("-dt_wd_eeprom"))){    t_wd_eeprom = atol(val);    if (t_wd_eeprom < CALC_EEPROM_T_wd(AVR_MAX_VOLTAGE)){      Info(0, " * According to the Atmel specs the t_wd_eeprom\n"              "   should be at least %ld us\n", 	      CALC_EEPROM_T_wd(AVR_MAX_VOLTAGE));#if 0      throw Error_Device("-dt_wd_eeprom: Value out of range.");#endif    }  }  /* Set Timings according to the Power Supply Voltage */  if ((val=GetCmdParam("-dvoltage"))){    double voltage = atof(val);    if (voltage < AVR_MIN_VOLTAGE || voltage > AVR_MAX_VOLTAGE){      Info(0, " * Atmel AVR MCUs operate in range from %.1f to %.1f V\n",           AVR_MIN_VOLTAGE, AVR_MAX_VOLTAGE);	         throw Error_Device("-dvoltage: Value out of range.");    }        t_wd_flash = CALC_FLASH_T_wd(voltage);    t_wd_eeprom = CALC_EEPROM_T_wd(voltage);  }    Info(3, "FLASH Write Delay (t_wd_flash): %ld us\n"          "EEPROM Write Delay (t_wd_eeprom): %ld us\n",	  t_wd_flash, t_wd_eeprom);}const char* TAvr::GetPartName(){  return part->name;}TAddrTAvr::GetSegmentSize(){  switch (segment) {  case SEG_FLASH: return part->flash_size;  case SEG_EEPROM: return part->eeprom_size;  case SEG_FUSE: return 5;  }  throw Error_MemoryRange();}boolTAvr::TestFeatures(unsigned int mask){  return ((part->flags & mask) == mask);}void TAvr::CheckMemoryRange(TAddr addr){  if (device_locked){    Info(0, "Device is locked.\n");    throw Error_MemoryRange();  }  if (addr >= GetSegmentSize()) {    throw Error_MemoryRange();  }}long TAvr::Get_t_wd_flash() const {  return t_wd_flash;}long TAvr::Get_t_wd_eeprom() const {  return t_wd_eeprom;}long TAvr::Get_t_wd_erase() const{#if 0  return 3*t_wd_flash;	/* right factor is 2, but just in case */#else  /* Device might be locked and not possible to identify, assume 200ms     which should be long enough for any device, and is not that long     compared to the program time itself.  */  return 200000;#endif}/* Device Interface Functions*/bool TAvr::SetSegment(const char* segment_name){  for (int i=0; segment_names[i]!=NULL; i++){    if (strcmp(segment_names[i], segment_name)==0){      segment=i;       return true;    }  }  return false;}const char* TAvr::TellActiveSegment(){  return segment_names[segment];}const char* TAvr::ListSegment(unsigned index){  if (index>3){return NULL;}  return segment_names[index];}const char* TAvr::ReadByteDescription(TAddr addr){  static const char* no_desc = "No description available.";  CheckMemoryRange(addr);  return no_desc;}/* Constructor/Destructor*/TAvr::TAvr():  part(NULL),   page_size(0), page_addr_fetched(false),  page_poll_byte(0xFF),  segment(SEG_FLASH){}TAvr::~TAvr(){}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码中文字幕| 亚洲成人久久影院| 国产情人综合久久777777| 538在线一区二区精品国产| 欧美三级在线视频| 91传媒视频在线播放| 欧美在线色视频| 在线观看网站黄不卡| 91黄色激情网站| 欧洲一区二区av| 欧美日韩国产天堂| 777色狠狠一区二区三区| 欧美一区二区精品在线| 日韩精品一区二区在线| 久久日一线二线三线suv| 久久久精品黄色| 中文字幕日韩一区二区| 亚洲丝袜自拍清纯另类| 亚洲午夜一区二区| 视频一区中文字幕| 久久精品99国产精品| 国产毛片精品视频| 成人免费毛片a| 色成年激情久久综合| 欧美日韩国产经典色站一区二区三区 | 777精品伊人久久久久大香线蕉| 国产自产2019最新不卡| 亚洲综合色丁香婷婷六月图片| 自拍偷拍国产精品| 欧美人动与zoxxxx乱| 欧美另类一区二区三区| 国产成人自拍高清视频在线免费播放| 日韩成人免费看| 国产资源在线一区| 93久久精品日日躁夜夜躁欧美| 欧美曰成人黄网| 日韩午夜三级在线| 国产日韩av一区| 一区二区在线看| 美女在线视频一区| 成人av网在线| 91精品国产综合久久久蜜臀粉嫩| 久久久精品国产免大香伊| 亚洲美女精品一区| 日韩电影在线免费看| 国产一区二区精品久久| 在线中文字幕一区二区| 日韩欧美中文一区| 亚洲欧美日韩在线播放| 秋霞成人午夜伦在线观看| 成人av免费网站| 制服.丝袜.亚洲.中文.综合| 国产欧美视频一区二区三区| 一区二区三区精品视频| 国产一区二区三区在线观看精品 | 亚洲激情综合网| 久国产精品韩国三级视频| 91美女精品福利| 精品久久人人做人人爰| 亚洲在线观看免费视频| 国产一区二区久久| 欧美日韩高清一区二区三区| 亚洲国产精品成人综合色在线婷婷| 午夜精品久久久久久久蜜桃app| 成人国产精品免费网站| 日韩一级片在线观看| 一区二区在线免费| 大桥未久av一区二区三区中文| 欧美一级在线视频| 一区二区三区视频在线观看 | 精品日韩在线观看| 亚洲国产视频一区二区| jlzzjlzz亚洲女人18| 欧美不卡一区二区三区四区| 亚洲一区二区三区在线看| 成人h动漫精品| 久久综合色8888| 婷婷久久综合九色综合绿巨人| 99r精品视频| 国产亚洲综合在线| 九九视频精品免费| 制服丝袜亚洲网站| 亚洲综合视频在线| 91日韩在线专区| 中文字幕精品一区| 国产精品正在播放| 欧美电影免费观看高清完整版在| 午夜久久久影院| 欧美少妇bbb| 一区二区三区四区五区视频在线观看| 成人黄色电影在线| 国产精品免费av| 国产成人av一区二区| 欧美精品一区二区三区四区| 奇米影视在线99精品| 欧美日韩国产一级二级| 亚洲成人免费视| 欧美日韩一区成人| 亚洲aⅴ怡春院| 欧美日韩免费不卡视频一区二区三区| 亚洲激情五月婷婷| 色婷婷综合久久久久中文 | 久久久噜噜噜久噜久久综合| 久久精品国产澳门| 精品国产三级电影在线观看| 另类小说综合欧美亚洲| 精品久久久久久最新网址| 久久不见久久见免费视频7| 日韩欧美国产精品| 精品在线一区二区三区| 2020国产精品自拍| 国产传媒欧美日韩成人| 中文字幕av一区二区三区高 | 欧美主播一区二区三区| 亚洲一级二级在线| 欧美日韩国产精品自在自线| 日本亚洲一区二区| 精品女同一区二区| 国产米奇在线777精品观看| 国产丝袜在线精品| av资源网一区| 亚洲一区二三区| 欧美一级淫片007| 国产毛片精品一区| 国产精品夫妻自拍| 欧美在线免费观看亚洲| 日本欧美加勒比视频| 亚洲精品一线二线三线| 丁香桃色午夜亚洲一区二区三区 | 成人小视频在线观看| 亚洲欧美一区二区三区极速播放| 欧美综合天天夜夜久久| 男女性色大片免费观看一区二区| 精品久久一区二区三区| 成人精品亚洲人成在线| 一区二区久久久久| 日韩欧美精品在线视频| 国产福利一区在线| 综合久久国产九一剧情麻豆| 欧美日韩国产高清一区二区 | 日韩精品中文字幕一区二区三区 | 7777精品伊人久久久大香线蕉的 | 国内外精品视频| 自拍偷自拍亚洲精品播放| 欧美日本一区二区在线观看| 国产乱淫av一区二区三区 | 黑人精品欧美一区二区蜜桃| 自拍偷自拍亚洲精品播放| 777奇米四色成人影色区| 国产成人av一区二区三区在线 | 国产亲近乱来精品视频| 91福利小视频| 国产一区二区成人久久免费影院 | 成人久久视频在线观看| 亚洲成a人v欧美综合天堂 | 亚洲第一狼人社区| 久久久精品日韩欧美| 欧美日韩在线播放三区| 国产精品一区在线观看你懂的| 亚洲自拍偷拍麻豆| 国产亚洲欧美一级| 在线成人av影院| 91在线视频免费91| 久久精品免费观看| 亚洲综合无码一区二区| 欧美韩日一区二区三区| 51精品久久久久久久蜜臀| 99久久久国产精品免费蜜臀| 寂寞少妇一区二区三区| 亚洲欧美另类久久久精品2019| 久久奇米777| 欧美一区二区私人影院日本| 97精品视频在线观看自产线路二| 精品亚洲欧美一区| 亚洲成a人v欧美综合天堂下载| 国产精品久久久久久久久快鸭| 日韩精品资源二区在线| 欧美三片在线视频观看| 91香蕉国产在线观看软件| 国产揄拍国内精品对白| 日本va欧美va瓶| 亚洲国产精品影院| 亚洲免费电影在线| 国产精品欧美久久久久一区二区| 日韩欧美国产综合在线一区二区三区| 在线视频亚洲一区| 成人91在线观看| 国产精品99久久久久久有的能看| 日韩专区中文字幕一区二区| 亚洲综合久久av| 亚洲视频一区二区免费在线观看| 久久精品水蜜桃av综合天堂| 亚洲精品一区二区在线观看| 69久久99精品久久久久婷婷 | 欧美唯美清纯偷拍| 在线一区二区三区四区五区| 99国产精品国产精品久久| 成人免费看片app下载| 国产91丝袜在线播放九色| 国产一区 二区|