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

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

?? isp.c

?? usb 轉 232 ISP AMEGA8源程序
?? C
字號:
/* * Name: isp.c * Project: AVR-Doper * Author: Christian Starkjohann <cs@obdev.at> * Creation Date: 2006-06-21 * Tabsize: 4 * Copyright: (c) 2006 by Christian Starkjohann, all rights reserved. * License: Proprietary, see documentation. * Revision: $Id: isp.c 223 2006-07-18 09:28:13Z cs $ */#include "hardware.h"#include <avr/io.h>#include <avr/wdt.h>#include <avr/interrupt.h>#include "utils.h"#include <util/delay.h>#include "isp.h"#include "timer.h"#include "oddebug.h"static uchar    ispClockDelay;static uchar    cmdBuffer[4];/* ------------------------------------------------------------------------- *//* We disable interrupts while transfer a byte. This ensures that we execute * at nominal speed, in spite of aggressive USB polling. */static uchar ispBlockTransfer(uchar *block, uchar len){uchar   cnt, shift, port, delay = ispClockDelay;/* minimum clock pulse width: * 5 + 4 * delay clock cycles           -> Tmin = 750 ns * total clock period: 12 + 8 * delay   -> fmax = 600 kHz *//*    DBG2(0x40, block, len); */    cli();    port = PORT_OUT(HWPIN_ISP_MOSI) & ~(1 << PORT_BIT(HWPIN_ISP_MOSI));    do{        cnt = 8;        shift = *block++;        do{            if(shift & 0x80){                port |= (1 << PORT_BIT(HWPIN_ISP_MOSI));            }            PORT_OUT(HWPIN_ISP_MOSI) = port;            sei();            timerTicksDelay(delay);            cli();            PORT_PIN_SET(HWPIN_ISP_SCK);            shift <<= 1;            port &= ~(1 << PORT_BIT(HWPIN_ISP_MOSI));            if(!PORT_PIN_VALUE(HWPIN_ISP_MISO)) /* driver is inverting */                shift |= 1;            sei();            timerTicksDelay(delay);            cli();            PORT_PIN_CLR(HWPIN_ISP_SCK);        }while(--cnt);    }while(--len);    sei();/*    DBG2(0x41, &shift, 1); */    return shift;}/* ------------------------------------------------------------------------- */static uchar    deviceIsBusy(void){    cmdBuffer[0] = 0xf0;    cmdBuffer[1] = 0;    return ispBlockTransfer(cmdBuffer, 4) & 1;}static uchar    waitUntilReady(uchar msTimeout){    timerSetupTimeout(msTimeout);    while(deviceIsBusy()){        if(timerTimeoutOccurred())            return STK_STATUS_RDY_BSY_TOUT;    }    return STK_STATUS_CMD_OK;}/* ------------------------------------------------------------------------- */static void ispAttachToDevice(uchar stk500Delay, uchar stabDelay){    PORT_PIN_SET(HWPIN_LED);    if(!PORT_PIN_VALUE(HWPIN_JUMPER)){      /* Jumper is set -> request clock below 8 kHz */        ispClockDelay = (uchar)(70/TIMER_TICK_US);   /* 140 us -> 7.14 kHz clock rate */    }else if(stk500Delay == 0){ /* 1.8 MHz nominal */        ispClockDelay = 0;    }else if(stk500Delay == 1){ /* 460 kHz nominal */        ispClockDelay = 1;    }else if(stk500Delay == 2){ /* 115 kHz nominal */        ispClockDelay = 2;    }else if(stk500Delay == 3){ /* 58 kHz nominal */        ispClockDelay = 3;    }else{        ispClockDelay = 1 + stk500Delay/4 + stk500Delay/16;    }    /* setup initial condition: SCK, MOSI = 0 */    PORT_OUT(HWPIN_ISP_SCK) &= ~((1 << PORT_BIT(HWPIN_ISP_SCK)) | (1 << PORT_BIT(HWPIN_ISP_MOSI)));    PORT_PIN_SET(HWPIN_ISP_RESET);  /* set RESET */    PORT_DDR_CLR(HWPIN_ISP_DRIVER); /* make input: use internal pullup to control driver */    PORT_PIN_SET(HWPIN_ISP_DRIVER); /* attach to device: */    TCCR2 |= (1 << COM20);  /* set toggle on compare match mode -> activate clock */    timerMsDelay(stabDelay);    timerTicksDelay(ispClockDelay);    /* stabDelay may have been 0 */    /* We now need to give a positive pulse on RESET since we can't guarantee     * that SCK was low during power up (according to instructions in Atmel's     * data sheets).     */    PORT_PIN_CLR(HWPIN_ISP_RESET);  /* give a positive RESET pulse */    timerTicksDelay(ispClockDelay);    PORT_PIN_SET(HWPIN_ISP_RESET);}static void ispDetachFromDevice(uchar removeResetDelay){    PORT_OUT(HWPIN_ISP_SCK) &= ~((1 << PORT_BIT(HWPIN_ISP_SCK)) | (1 << PORT_BIT(HWPIN_ISP_MOSI)));    PORT_PIN_SET(HWPIN_ISP_RESET);    timerMsDelay(removeResetDelay);    TCCR2 &= ~(1 << COM20);  /* clear toggle on compare match mode */    PORT_PIN_CLR(HWPIN_ISP_DRIVER); /* detach from device */    PORT_DDR_SET(HWPIN_ISP_DRIVER); /* set pin level to low-Z 0 */    PORT_PIN_CLR(HWPIN_ISP_RESET);    PORT_PIN_CLR(HWPIN_LED);}/* ------------------------------------------------------------------------- */uchar   ispEnterProgmode(stkEnterProgIsp_t *param){uchar   i, rval;    ispAttachToDevice(stkParam.s.sckDuration, param->stabDelay);    timerMsDelay(param->cmdExeDelay);    for(i = param->synchLoops; i--;){        wdt_reset();        rval = ispBlockTransfer(param->cmd, param->pollIndex);        if(param->pollIndex < 4)            ispBlockTransfer(param->cmd + param->pollIndex, 4 - param->pollIndex);        if(rval == param->pollValue){   /* success: we are in sync */            return STK_STATUS_CMD_OK;        }        /* insert one clock pulse and try again: */        PORT_PIN_SET(HWPIN_ISP_SCK);        timerTicksDelay(ispClockDelay);        PORT_PIN_CLR(HWPIN_ISP_SCK);        timerTicksDelay(ispClockDelay);    }    ispDetachFromDevice(0);    return STK_STATUS_CMD_FAILED;   /* failure */}void    ispLeaveProgmode(stkLeaveProgIsp_t *param){    ispDetachFromDevice(param->preDelay);    timerMsDelay(param->postDelay);}/* ------------------------------------------------------------------------- */uchar   ispChipErase(stkChipEraseIsp_t *param){uchar   maxDelay = param->eraseDelay;uchar   rval = STK_STATUS_CMD_OK;    ispBlockTransfer(param->cmd, 4);    if(param->pollMethod != 0){        if(maxDelay < 10)   /* allow at least 10 ms */            maxDelay = 10;        rval = waitUntilReady(maxDelay);    }else{        timerMsDelay(maxDelay);    }    return rval;}/* ------------------------------------------------------------------------- */uchar   ispProgramMemory(stkProgramFlashIsp_t *param, uchar isEeprom){utilWord_t  numBytes;uchar       rval = STK_STATUS_CMD_OK;uchar       valuePollingMask, rdyPollingMask;uint        i;    numBytes.bytes[1] = param->numBytes[0];    numBytes.bytes[0] = param->numBytes[1];    if(param->mode & 1){    /* page mode */        valuePollingMask = 0x20;        rdyPollingMask = 0x40;    }else{                  /* word mode */        valuePollingMask = 4;        rdyPollingMask = 8;    }    for(i = 0; rval == STK_STATUS_CMD_OK && i < numBytes.word; i++){        uchar x;        wdt_reset();        cmdBuffer[1] = stkAddress.bytes[1];        cmdBuffer[2] = stkAddress.bytes[0];        cmdBuffer[3] = param->data[i];        x = param->cmd[0];        if(!isEeprom){            if((uchar)i & 1){                x |= 0x08;                stkIncrementAddress();            }else{                x &= ~0x08;            }        }else{            stkIncrementAddress();        }        cmdBuffer[0] = x;//        if(cmdBuffer[3] == 0xff && !(param->mode & 1) && !isEeprom)   /* skip 0xff in word mode *///            continue;        ispBlockTransfer(cmdBuffer, 4);        if(param->mode & 1){            /* is page mode */            if(i < numBytes.word - 1 || !(param->mode & 0x80))                continue;               /* not last byte written */            cmdBuffer[0] = param->cmd[1];     /* write program memory page */            ispBlockTransfer(cmdBuffer, 4);        }        /* poll for ready after each byte (word mode) or page (page mode) */        if(param->mode & valuePollingMask){ /* value polling */            uchar x = param->cmd[2];     /* read flash */            if((uchar)i & 1){                x |= 0x08;            }else{                x &= ~0x08;            }            cmdBuffer[0] = x;            timerSetupTimeout(param->delay);            while(ispBlockTransfer(cmdBuffer, 4) != param->poll[0]){                if(timerTimeoutOccurred()){                    rval = STK_STATUS_CMD_TOUT;                    break;                }            }        }else if(param->mode & rdyPollingMask){ /* rdy/bsy polling */            rval = waitUntilReady(param->delay);        }else{                          /* must be timed delay */            timerMsDelay(param->delay);        }    }    return rval;}/* ------------------------------------------------------------------------- */uint    ispReadMemory(stkReadFlashIsp_t *param, stkReadFlashIspResult_t *result, uchar isEeprom){utilWord_t  numBytes;uchar       *p, cmd0;uint        i;    cmdBuffer[3] = 0;    numBytes.bytes[1] = param->numBytes[0];    numBytes.bytes[0] = param->numBytes[1];    p = result->data;    result->status1 = STK_STATUS_CMD_OK;    cmd0 = param->cmd;    for(i = 0; i < numBytes.word; i++){        wdt_reset();        cmdBuffer[1] = stkAddress.bytes[1];        cmdBuffer[2] = stkAddress.bytes[0];        if(!isEeprom){            if((uchar)i & 1){                cmd0 |= 0x08;                stkIncrementAddress();            }else{                cmd0 &= ~0x08;            }        }else{            stkIncrementAddress();        }        cmdBuffer[0] = cmd0;        *p++ = ispBlockTransfer(cmdBuffer, 4);    }    *p = STK_STATUS_CMD_OK; /* status2 */    return numBytes.word + 2;}/* ------------------------------------------------------------------------- */uchar   ispProgramFuse(stkProgramFuseIsp_t *param){    ispBlockTransfer(param->cmd, 4);    return STK_STATUS_CMD_OK;}/* ------------------------------------------------------------------------- */uchar   ispReadFuse(stkReadFuseIsp_t *param){uchar   rval;    rval = ispBlockTransfer(param->cmd, param->retAddr);    if(param->retAddr < 4)        ispBlockTransfer(param->cmd + param->retAddr, 4 - param->retAddr);    return rval;}/* ------------------------------------------------------------------------- */uint    ispMulti(stkMultiIsp_t *param, stkMultiIspResult_t *result){uchar   cnt1, i, *p;    cnt1 = param->numTx;    if(cnt1 > param->rxStartAddr)        cnt1 = param->rxStartAddr;    ispBlockTransfer(param->txData, cnt1);    p = result->rxData;    for(i = 0; i < param->numTx - cnt1; i++){        uchar b = ispBlockTransfer(&param->txData[cnt1] + i, 1);        if(i < param->numRx)            *p++ = b;        wdt_reset();    }        for(; i < param->numRx; i++){        cmdBuffer[0] = 0;        *p++ = ispBlockTransfer(cmdBuffer, 1);        wdt_reset();    }    *p = result->status1 = STK_STATUS_CMD_OK;    return (uint)param->numRx + 2;}/* ------------------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久香蕉的特点 | 亚洲精品日产精品乱码不卡| 一区二区三区在线免费视频| 蜜臂av日日欢夜夜爽一区| 成人avav影音| 777奇米四色成人影色区| 国产欧美精品日韩区二区麻豆天美| 一区二区高清在线| 成人丝袜视频网| 精品日韩一区二区| 亚洲一区免费视频| a美女胸又www黄视频久久| 久久免费午夜影院| 蜜臀久久久久久久| 欧美三片在线视频观看| 亚洲色图.com| 成人免费黄色大片| 日韩精品自拍偷拍| 青青草伊人久久| 91精品国产综合久久久蜜臀粉嫩| 亚洲资源在线观看| 91香蕉视频在线| 国产精品美女久久久久久久久| 紧缚捆绑精品一区二区| 日韩一级免费观看| 秋霞影院一区二区| 91精品久久久久久久91蜜桃| 亚洲国产日韩在线一区模特| 色猫猫国产区一区二在线视频| 欧美国产精品一区二区三区| 国产精品香蕉一区二区三区| 久久久无码精品亚洲日韩按摩| 蜜臀av一区二区在线观看 | 91麻豆免费观看| 国产精品福利av| 91影院在线观看| 日韩毛片在线免费观看| 99久久精品免费看| 亚洲美女在线一区| 欧美日韩国产高清一区| 日韩电影在线一区二区三区| 日韩一区二区电影在线| 韩国三级电影一区二区| 国产欧美一区二区精品性色超碰| 国产ts人妖一区二区| 国产精品狼人久久影院观看方式| 91免费国产在线| 亚洲国产日产av| 日韩欧美成人激情| 国产一区二区三区在线观看免费| 久久综合九色综合97婷婷| 精品一区二区日韩| 中文字幕一区二区三区在线观看 | 中文一区二区完整视频在线观看 | 91免费版在线看| 欧美激情一区三区| 在线观看视频一区二区| 一区二区视频在线| 欧美一区二区三区免费| 七七婷婷婷婷精品国产| 国产日产欧美精品一区二区三区| 国产成人综合在线播放| 亚洲国产欧美一区二区三区丁香婷| 欧美日韩一区国产| 国产91丝袜在线18| 中文字幕一区二区三区在线播放| 欧美日韩精品一区二区天天拍小说 | 91在线观看视频| 日本网站在线观看一区二区三区| 91精品欧美一区二区三区综合在| 国产精品影视网| 成人免费一区二区三区在线观看| 欧美日本国产视频| 国产一区二区在线视频| 一区二区三区欧美激情| 日韩欧美在线网站| 97se亚洲国产综合在线| 日韩经典中文字幕一区| 国产精品福利一区二区三区| 不卡电影一区二区三区| 日本欧美在线看| 国产精品午夜免费| 欧美丰满一区二区免费视频| 成人短视频下载| 日本美女视频一区二区| 成人欧美一区二区三区白人 | 99麻豆久久久国产精品免费| 日韩va亚洲va欧美va久久| 国产精品热久久久久夜色精品三区 | 91精品国产手机| 日本精品免费观看高清观看| 九九热在线视频观看这里只有精品| 国产农村妇女毛片精品久久麻豆| 欧美另类videos死尸| 国产一区二区三区最好精华液| 亚洲大片精品永久免费| 欧美精品一区二区久久久| 欧美日韩亚洲综合在线| 成人性生交大片免费看中文 | 狠狠v欧美v日韩v亚洲ⅴ| 亚洲第一精品在线| 欧美极品美女视频| 欧美国产国产综合| 91.com视频| 欧美片网站yy| 色诱亚洲精品久久久久久| 国产成人精品免费| 五月激情综合色| 亚洲成人自拍偷拍| 亚洲你懂的在线视频| 中文字幕日韩av资源站| 久久欧美中文字幕| 久久视频一区二区| 欧美精品第一页| 91精品国产色综合久久不卡电影| 91国产精品成人| 欧美天天综合网| 91视频免费播放| 欧美在线综合视频| 99久久99久久免费精品蜜臀| 99国产精品久久久久久久久久久| 国产不卡视频在线播放| 成人h精品动漫一区二区三区| 国产麻豆精品在线观看| 国产不卡在线一区| 成人永久看片免费视频天堂| 成人午夜视频在线观看| 国产精品影视网| 不卡一区二区中文字幕| 99精品久久免费看蜜臀剧情介绍| 成人av综合在线| 一本色道a无线码一区v| 欧美色电影在线| 欧美日韩国产另类一区| 精品日韩99亚洲| 26uuu精品一区二区三区四区在线| 国产清纯在线一区二区www| 国产午夜精品在线观看| 亚洲激情第一区| 亚洲成人激情综合网| 精品影视av免费| 国产成人精品综合在线观看| 91毛片在线观看| 欧美日韩国产一区| 2024国产精品视频| 国产精品人人做人人爽人人添| 亚洲精品日日夜夜| 日韩高清在线电影| 国产美女视频一区| 97国产一区二区| 欧美午夜电影网| 精品国免费一区二区三区| 欧美国产日韩在线观看| 国产精品妹子av| 亚洲国产精品人人做人人爽| 日韩精品国产欧美| 老司机午夜精品| 日本精品一区二区三区高清| 精品国产91洋老外米糕| 国产蜜臀av在线一区二区三区| 亚洲成人精品在线观看| 精品亚洲免费视频| 精品视频一区三区九区| 精品国产乱子伦一区| 亚洲国产乱码最新视频| 寂寞少妇一区二区三区| 欧美亚洲日本国产| 2023国产一二三区日本精品2022| 亚洲综合图片区| 国产成人在线观看| 日韩欧美在线不卡| 中文字幕亚洲在| 成人中文字幕电影| 99re这里只有精品首页| 久久老女人爱爱| 亚洲成人免费看| a级高清视频欧美日韩| 久久婷婷国产综合精品青草| 尤物在线观看一区| 91网站黄www| 国产亚洲精品免费| 国产最新精品免费| 91精品中文字幕一区二区三区| 亚洲激情五月婷婷| ㊣最新国产の精品bt伙计久久| 国产黄色成人av| 欧美日韩一级黄| 一区二区三区欧美日| 99精品久久久久久| 国产性色一区二区| 国产一区三区三区| 欧美一区二区美女| 美女精品一区二区| 欧美另类videos死尸| 亚洲va天堂va国产va久| 精品一区二区三区视频在线观看| 日韩一区二区三区观看| 丝袜脚交一区二区| 欧美美女一区二区三区| 日韩经典中文字幕一区|