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

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

?? stk500protocol.c

?? usb 轉 232 ISP AMEGA8源程序
?? C
字號:
/* * Name: stk500protocol.c * Project: AVR-Doper * Author: Christian Starkjohann <cs@obdev.at> * Creation Date: 2006-06-19 * Tabsize: 4 * Copyright: (c) 2006 by Christian Starkjohann, all rights reserved. * License: Proprietary, see documentation. * Revision: $Id: stk500protocol.c 223 2006-07-18 09:28:13Z cs $ */#include "hardware.h"#include <avr/pgmspace.h>#include <string.h>#include "oddebug.h"#include "stk500protocol.h"#include "utils.h"#include "isp.h"#include "hvprog.h"#include "timer.h"#include "vreg.h"#define BUFFER_SIZE     281 /* results in 275 bytes max body size */#define RX_TIMEOUT      200 /* timeout in milliseconds */#define STK_TXMSG_START 5static uchar        rxBuffer[BUFFER_SIZE];static uint         rxPos;static utilWord_t   rxLen;static uchar        txBuffer[BUFFER_SIZE];static uint         txPos, txLen;stkParam_t      stkParam = {{                    0, 0, 0, 0, 0, 0, 0, 0,                    0, 0, 0, 0, 0, 0, 0, 0,                    1, 2, 4, 0, 50, 0, 1, 0x80,                    0, 0, 0xaa, 0, 0, 0, 0, 0,                }};utilDword_t     stkAddress;/* ------------------------------------------------------------------------- */void    stkIncrementAddress(void){    stkAddress.dword++;}/* ------------------------------------------------------------------------- */static void stkSetTxMessage(uint len){uchar   *p = txBuffer, sum = 0;    *p++ = STK_STX;    *p++ = rxBuffer[1];  /* sequence number */    *p++ = utilHi8(len);    *p++ = len;    *p++ = STK_TOKEN;    txPos = 0;    len += 6;    txLen = len--;    p = txBuffer;    while(len--){        sum ^= *p++;    }    *p = sum;    DBG1(0xe0, txBuffer, txLen);}/* ------------------------------------------------------------------------- */static void setParameter(uchar index, uchar value){    if(index == STK_PARAM_OSC_PSCALE){        TCCR2 = (TCCR2 & ~7) | (value & 7);    }else if(index == STK_PARAM_OSC_CMATCH){        OCR2 = value;    }    index &= 0x1f;    stkParam.bytes[index] = value;}static uchar getParameter(uchar index){    if(index == STK_PARAM_OSC_PSCALE)        return TCCR2 & 7;    if(index == STK_PARAM_OSC_CMATCH)        return OCR2;    index &= 0x1f;    return stkParam.bytes[index];}/* ------------------------------------------------------------------------- *//* Use defines for the switch statement so that we can choose between an * if()else if() and a switch/case based implementation. switch() is more * efficient for a LARGE set of sequential choices, if() is better in all other * cases. */#if 0#define SWITCH_START        if(0){#define SWITCH_CASE(value)  }else if(cmd == (value)){#define SWITCH_CASE2(v1,v2) }else if(cmd == (v1) || cmd == (v2)){#define SWITCH_CASE3(v1,v2,v3) }else if(cmd == (v1) || cmd == (v2) || (cmd == v3)){#define SWITCH_CASE4(v1,v2,v3,v4) }else if(cmd == (v1) || cmd == (v2) || cmd == (v3) || cmd == (v4)){#define SWITCH_DEFAULT      }else{#define SWITCH_END          }#else#define SWITCH_START        switch(cmd){{#define SWITCH_CASE(value)  }break; case (value):{#define SWITCH_CASE2(v1,v2) }break; case (v1): case(v2):{#define SWITCH_CASE3(v1,v2,v3) }break; case (v1): case(v2): case(v3):{#define SWITCH_CASE4(v1,v2,v3,v4) }break; case (v1): case(v2): case(v3): case(v4):{#define SWITCH_DEFAULT      }break; default:{#define SWITCH_END          }}#endifvoid stkEvaluateRxMessage(void) /* not static to prevent inlining */{uchar       i, cmd;utilWord_t  len = {2};  /* defaults to cmd + error code */void        *param;    DBG1(0xf1, rxBuffer, rxLen.bytes[0]);    cmd = rxBuffer[STK_TXMSG_START];    txBuffer[STK_TXMSG_START] = cmd;    txBuffer[STK_TXMSG_START + 1] = STK_STATUS_CMD_OK;    param = &rxBuffer[STK_TXMSG_START + 1];    SWITCH_START    SWITCH_CASE(STK_CMD_SIGN_ON)        static PROGMEM uchar string[] = {8, 'S', 'T', 'K', '5', '0', '0', '_', '2', 0};        uchar *p = &txBuffer[STK_TXMSG_START + 2];        strcpy_P(p, string);        len.bytes[0] = 11;    SWITCH_CASE(STK_CMD_SET_PARAMETER)        setParameter(rxBuffer[STK_TXMSG_START + 1], rxBuffer[STK_TXMSG_START + 2]);    SWITCH_CASE(STK_CMD_GET_PARAMETER)        txBuffer[STK_TXMSG_START + 2] = getParameter(rxBuffer[STK_TXMSG_START + 1]);        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_OSCCAL)        txBuffer[STK_TXMSG_START + 1] = STK_STATUS_CMD_FAILED;        /* not yet implemented */    SWITCH_CASE(STK_CMD_LOAD_ADDRESS)        for(i=0;i<4;i++){            stkAddress.bytes[3-i] = rxBuffer[STK_TXMSG_START + 1 + i];        }    SWITCH_CASE(STK_CMD_SET_CONTROL_STACK)        /* AVR Studio sends:        1b 08 00 21 0e 2d         4c 0c 1c 2c 3c 64 74 66        68 78 68 68 7a 6a 68 78        78 7d 6d 0c 80 40 20 10        11 08 04 02 03 08 04 00        bf        */        /* dummy: ignore */    SWITCH_CASE(STK_CMD_ENTER_PROGMODE_HVSP)        hvspEnterProgmode(param);    SWITCH_CASE(STK_CMD_LEAVE_PROGMODE_HVSP)        hvspLeaveProgmode(param);    SWITCH_CASE(STK_CMD_CHIP_ERASE_HVSP)        txBuffer[STK_TXMSG_START + 1] = hvspChipErase(param);    SWITCH_CASE(STK_CMD_PROGRAM_FLASH_HVSP)        txBuffer[STK_TXMSG_START + 1] = hvspProgramMemory(param, 0);    SWITCH_CASE(STK_CMD_READ_FLASH_HVSP)        len.word = 1 + hvspReadMemory(param, (void *)&txBuffer[STK_TXMSG_START + 1], 0);    SWITCH_CASE(STK_CMD_PROGRAM_EEPROM_HVSP)        txBuffer[STK_TXMSG_START + 1] = hvspProgramMemory(param, 1);    SWITCH_CASE(STK_CMD_READ_EEPROM_HVSP)        len.word = 1 + hvspReadMemory(param, (void *)&txBuffer[STK_TXMSG_START + 1], 1);    SWITCH_CASE(STK_CMD_PROGRAM_FUSE_HVSP)        txBuffer[STK_TXMSG_START + 1] = hvspProgramFuse(param);    SWITCH_CASE(STK_CMD_READ_FUSE_HVSP)        txBuffer[STK_TXMSG_START + 2] = hvspReadFuse(param);        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_PROGRAM_LOCK_HVSP)        txBuffer[STK_TXMSG_START + 1] = hvspProgramLock(param);    SWITCH_CASE(STK_CMD_READ_LOCK_HVSP)        txBuffer[STK_TXMSG_START + 2] = hvspReadLock();        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_READ_SIGNATURE_HVSP)        txBuffer[STK_TXMSG_START + 2] = hvspReadSignature(param);        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_READ_OSCCAL_HVSP)        txBuffer[STK_TXMSG_START + 2] = hvspReadOsccal();        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_ENTER_PROGMODE_PP)        ppEnterProgmode(param);    SWITCH_CASE(STK_CMD_LEAVE_PROGMODE_PP)        ppLeaveProgmode(param);    SWITCH_CASE(STK_CMD_CHIP_ERASE_PP)        txBuffer[STK_TXMSG_START + 1] = ppChipErase(param);    SWITCH_CASE(STK_CMD_PROGRAM_FLASH_PP)        txBuffer[STK_TXMSG_START + 1] = ppProgramMemory(param, 0);    SWITCH_CASE(STK_CMD_READ_FLASH_PP)        len.word = 1 + ppReadMemory(param, (void *)&txBuffer[STK_TXMSG_START + 1], 0);    SWITCH_CASE(STK_CMD_PROGRAM_EEPROM_PP)        txBuffer[STK_TXMSG_START + 1] = ppProgramMemory(param, 1);    SWITCH_CASE(STK_CMD_READ_EEPROM_PP)        len.word = 1 + ppReadMemory(param, (void *)&txBuffer[STK_TXMSG_START + 1], 1);    SWITCH_CASE(STK_CMD_PROGRAM_FUSE_PP)        txBuffer[STK_TXMSG_START + 1] = ppProgramFuse(param);    SWITCH_CASE(STK_CMD_READ_FUSE_PP)        txBuffer[STK_TXMSG_START + 2] = ppReadFuse(param);        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_PROGRAM_LOCK_PP)        txBuffer[STK_TXMSG_START + 1] = ppProgramLock(param);    SWITCH_CASE(STK_CMD_READ_LOCK_PP)        txBuffer[STK_TXMSG_START + 2] = ppReadLock();        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_READ_SIGNATURE_PP)        txBuffer[STK_TXMSG_START + 2] = ppReadSignature(param);        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_READ_OSCCAL_PP)        txBuffer[STK_TXMSG_START + 2] = ppReadOsccal();        len.bytes[0] = 3;    SWITCH_CASE(STK_CMD_ENTER_PROGMODE_ISP)        txBuffer[STK_TXMSG_START + 1] = ispEnterProgmode(param);    SWITCH_CASE(STK_CMD_LEAVE_PROGMODE_ISP)        ispLeaveProgmode(param);    SWITCH_CASE(STK_CMD_CHIP_ERASE_ISP)        txBuffer[STK_TXMSG_START + 1] = ispChipErase(param);    SWITCH_CASE(STK_CMD_PROGRAM_FLASH_ISP)        txBuffer[STK_TXMSG_START + 1] = ispProgramMemory(param, 0);    SWITCH_CASE(STK_CMD_READ_FLASH_ISP)        len.word = 1 + ispReadMemory(param, (void *)&txBuffer[STK_TXMSG_START + 1], 0);    SWITCH_CASE(STK_CMD_PROGRAM_EEPROM_ISP)        txBuffer[STK_TXMSG_START + 1] = ispProgramMemory(param, 1);    SWITCH_CASE(STK_CMD_READ_EEPROM_ISP)        len.word = 1 + ispReadMemory(param, (void *)&txBuffer[STK_TXMSG_START + 1], 1);    SWITCH_CASE(STK_CMD_PROGRAM_FUSE_ISP)        txBuffer[STK_TXMSG_START + 1] = ispProgramFuse(param);    SWITCH_CASE4(STK_CMD_READ_FUSE_ISP, STK_CMD_READ_LOCK_ISP, STK_CMD_READ_SIGNATURE_ISP, STK_CMD_READ_OSCCAL_ISP)        txBuffer[STK_TXMSG_START + 2] = ispReadFuse(param);        txBuffer[STK_TXMSG_START + 3] = STK_STATUS_CMD_OK;        len.bytes[0] = 4;    SWITCH_CASE(STK_CMD_PROGRAM_LOCK_ISP)        txBuffer[STK_TXMSG_START + 1] = ispProgramFuse(param);    SWITCH_CASE(STK_CMD_SPI_MULTI)        len.word = 1 + ispMulti(param, (void *)&txBuffer[STK_TXMSG_START + 1]);    SWITCH_DEFAULT  /* unknown command */        DBG1(0xf8, 0, 0);        txBuffer[STK_TXMSG_START + 1] = STK_STATUS_CMD_FAILED;    SWITCH_END    stkSetTxMessage(len.word);}/* ------------------------------------------------------------------------- */void    stkSetRxChar(uchar c){    if(timerLongTimeoutOccurred()){        rxPos = 0;    }    if(rxPos == 0){     /* only accept STX as the first character */        if(c == STK_STX)            rxBuffer[rxPos++] = c;    }else{        if(rxPos < BUFFER_SIZE){            rxBuffer[rxPos++] = c;            if(rxPos == 4){     /* do we have length byte? */                rxLen.bytes[0] = rxBuffer[3];                rxLen.bytes[1] = rxBuffer[2];                rxLen.word += 6;                if(rxLen.word > BUFFER_SIZE){    /* illegal length */                    rxPos = 0;      /* reset state */                }            }else if(rxPos == 5){   /* check whether this is the token byte */                if(c != STK_TOKEN){                    rxPos = 0;  /* reset state */                }            }else if(rxPos > 4 && rxPos == rxLen.word){ /* message is complete */                uchar sum = 0;                uchar *p = rxBuffer;                while(rxPos){ /* decrement rxPos down to 0 -> reset state */                    sum ^= *p++;                    rxPos--;                }                if(sum == 0){   /* check sum is correct, evaluate rx message */                    stkEvaluateRxMessage();                }else{          /* checksum error */                    DBG2(0xf2, rxBuffer, rxLen.word);                    txBuffer[STK_TXMSG_START] = STK_ANSWER_CKSUM_ERROR;                    txBuffer[STK_TXMSG_START + 1] = STK_ANSWER_CKSUM_ERROR;                    stkSetTxMessage(2);                }            }        }else{  /* overflow */            rxPos = 0;  /* reset state */        }    }    timerSetupLongTimeout(RX_TIMEOUT);}int stkGetTxCount(void){    return txLen - txPos;}int stkGetTxByte(void){uchar   c;    if(txLen == 0){        return -1;    }    c = txBuffer[txPos++];    if(txPos >= txLen){         /* transmit ready */        txPos = txLen = 0;    }    return c;}/* ------------------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图欧洲色图| 日韩一级高清毛片| 欧美久久高跟鞋激| 欧美成人三级电影在线| 国产精品无圣光一区二区| 亚洲日本va午夜在线影院| 午夜影院久久久| 国产高清视频一区| 欧美日韩国产在线观看| 国产清纯白嫩初高生在线观看91| 一区二区三区中文免费| 捆绑调教美女网站视频一区| 91一区二区三区在线播放| 欧美日韩免费不卡视频一区二区三区 | 欧美日韩在线观看一区二区| 精品国产一区二区三区不卡| 亚洲区小说区图片区qvod| 另类欧美日韩国产在线| 成人av资源在线观看| 日韩亚洲欧美在线观看| 亚洲精品日产精品乱码不卡| 九九**精品视频免费播放| 色综合久久久久综合体| 26uuu国产日韩综合| 一区二区欧美在线观看| 国产精品主播直播| 69av一区二区三区| 亚洲欧美韩国综合色| 国产一区二区女| 555www色欧美视频| 一区二区三区在线观看国产| 国产成人免费视| 日韩一区二区三区电影 | 色哟哟一区二区三区| 精品噜噜噜噜久久久久久久久试看| 亚洲视频在线一区二区| 精品一区二区日韩| 欧美视频一区二区三区在线观看| 欧美国产综合一区二区| 麻豆91小视频| 欧美久久一二三四区| 成人欧美一区二区三区黑人麻豆| 激情综合网最新| 777奇米成人网| 亚洲国产成人va在线观看天堂| 成人免费高清视频在线观看| 精品成人一区二区| 五月婷婷久久丁香| 欧美在线free| 亚洲欧洲av色图| 高清在线观看日韩| 久久久亚洲高清| 看电影不卡的网站| 欧美精品黑人性xxxx| 一区二区三区日本| 91丝袜高跟美女视频| 国产精品日产欧美久久久久| 国产盗摄一区二区| 久久久无码精品亚洲日韩按摩| 亚洲美女区一区| 欧美一区二区三区在线观看视频| 亚洲欧美激情小说另类| a级高清视频欧美日韩| 久久久综合视频| 久久97超碰色| 精品欧美乱码久久久久久| 奇米精品一区二区三区四区| 欧美色倩网站大全免费| 亚洲一区二区三区视频在线播放 | 国产丝袜在线精品| 国产美女在线精品| 国产亚洲人成网站| 高清成人在线观看| 中文字幕制服丝袜一区二区三区 | 国产精品传媒视频| 成人精品视频一区| 日韩毛片在线免费观看| 91玉足脚交白嫩脚丫在线播放| 国产精品乱人伦一区二区| 99久久99久久精品免费观看| 亚洲欧美区自拍先锋| 色八戒一区二区三区| 一区二区三区在线观看欧美| 欧美日韩一区二区三区高清| 亚洲18影院在线观看| 91精品国产91久久久久久一区二区 | 国产精品一区二区果冻传媒| 国产夜色精品一区二区av| 成人免费精品视频| 亚洲乱码国产乱码精品精98午夜 | 天天色天天操综合| 精品成人佐山爱一区二区| 国产精品一区二区你懂的| 国产日本欧洲亚洲| 色综合久久88色综合天天| 午夜亚洲国产au精品一区二区| 91.com视频| 国产精品一二三四五| 中文字幕中文字幕在线一区 | 午夜精品久久久久| 精品国产91久久久久久久妲己| 国产精品主播直播| 亚洲欧美日韩国产成人精品影院| 欧美日韩视频在线一区二区| 久久99精品久久久久久动态图| 国产日韩精品一区二区浪潮av| 91农村精品一区二区在线| 香蕉影视欧美成人| 久久久蜜桃精品| 在线观看亚洲一区| 蜜臀av一区二区| 日韩一区在线免费观看| 欧美精品三级日韩久久| 高清av一区二区| 亚洲最大成人网4388xx| 欧美mv日韩mv国产网站app| 99视频精品全部免费在线| 青娱乐精品在线视频| 国产精品美女久久福利网站 | 青青青爽久久午夜综合久久午夜| 久久麻豆一区二区| 精品视频一区三区九区| 激情六月婷婷综合| 一区二区三区在线视频观看58| 欧美成人一级视频| 在线观看国产91| 国产精品77777竹菊影视小说| 亚洲国产一区二区视频| 国产亚洲精品资源在线26u| 欧美精品自拍偷拍| 91在线云播放| 国产乱色国产精品免费视频| 亚洲永久免费av| 欧美激情在线一区二区三区| 欧美精品亚洲一区二区在线播放| 国产成人一区二区精品非洲| 午夜精品在线看| 日韩伦理电影网| 久久精品夜色噜噜亚洲aⅴ| 69堂精品视频| 在线观看国产91| 成人97人人超碰人人99| 精品亚洲成a人在线观看| 亚洲小说欧美激情另类| 国产精品美女久久久久aⅴ| 2024国产精品| 91精品国产丝袜白色高跟鞋| 色老头久久综合| 99久久国产综合精品女不卡| 国产在线精品一区二区夜色| 午夜伦欧美伦电影理论片| 亚洲欧美一区二区三区极速播放 | 丁香婷婷综合网| 老鸭窝一区二区久久精品| 亚洲mv在线观看| 一区二区不卡在线播放| 成人欧美一区二区三区白人 | 99久久免费视频.com| 国产黄人亚洲片| 极品少妇xxxx精品少妇偷拍| 日韩高清在线一区| 婷婷综合久久一区二区三区| 一区二区三区在线播| 亚洲人成电影网站色mp4| 国产精品美女久久久久aⅴ国产馆| 久久综合色之久久综合| 日韩一区二区免费视频| 欧美人妖巨大在线| 欧美午夜在线一二页| 日本久久精品电影| 91麻豆精品在线观看| 99久精品国产| 色综合久久九月婷婷色综合| 99v久久综合狠狠综合久久| jlzzjlzz欧美大全| 不卡的av电影在线观看| 粉嫩av亚洲一区二区图片| 成人网在线播放| 成人激情电影免费在线观看| 国产盗摄视频一区二区三区| 国产91精品一区二区麻豆网站 | 国产日韩欧美不卡在线| 久久久久久久性| 国产欧美一区二区三区在线看蜜臀| 久久蜜桃一区二区| 国产欧美日韩亚州综合| 欧美极品少妇xxxxⅹ高跟鞋 | 成人综合婷婷国产精品久久蜜臀| 国产精品香蕉一区二区三区| 国产精品亚洲成人| 成人av综合在线| 一本到三区不卡视频| 欧美在线播放高清精品| 在线不卡中文字幕播放| 日韩欧美亚洲国产另类| 精品入口麻豆88视频| 久久久精品影视| 国产精品麻豆网站| 亚洲欧美日韩国产手机在线 | 欧美一区二区视频在线观看2020|