久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: ISP下載器 電路圖 原代碼 驅動程序 [打印本頁]

作者: happy112    時間: 2016-6-7 15:58
標題: ISP下載器 電路圖 原代碼 驅動程序



       該ISP編程器采用ATMEGA8_DIP28作為主控制芯片,預留MOSI,MISO,RET,SCK,VCC,GND。6PIN接口,方便使用者根據需要連接目標板。

同時預留PROGRAMMING編程接口,用戶可自行升級下載器固件。

ISP下載器電路原理圖截圖:



ISP下載器源碼:
  1. /*
  2.   USBasp - USB in-circuit programmer for Atmel AVR controllers

  3.   Thomas Fischl <tfischl@gmx.de>

  4.   License:
  5.   The project is built with AVR USB driver by Objective Development, which is
  6.   published under an own licence based on the GNU General Public License (GPL).
  7.   USBasp is also distributed under this enhanced licence. See Documentation.

  8.   Target.........: ATMega8 at 12 MHz
  9.   Creation Date..: 2005-02-20
  10.   Last change....: 2006-12-29

  11.   PC2 SCK speed option. GND  -> slow (8khz SCK),
  12.                         open -> fast (375kHz SCK)
  13. */

  14. #include <avr/io.h>
  15. #include <avr/interrupt.h>
  16. #include <avr/pgmspace.h>
  17. #include <avr/wdt.h>

  18. #include "usbdrv.h"
  19. #include "isp.h"
  20. #include "clock.h"

  21. #define USBASP_FUNC_CONNECT     1
  22. #define USBASP_FUNC_DISCONNECT  2
  23. #define USBASP_FUNC_TRANSMIT    3
  24. #define USBASP_FUNC_READFLASH   4
  25. #define USBASP_FUNC_ENABLEPROG  5
  26. #define USBASP_FUNC_WRITEFLASH  6
  27. #define USBASP_FUNC_READEEPROM  7
  28. #define USBASP_FUNC_WRITEEEPROM 8

  29. #define PROG_STATE_IDLE         0
  30. #define PROG_STATE_WRITEFLASH   1
  31. #define PROG_STATE_READFLASH    2
  32. #define PROG_STATE_READEEPROM   3
  33. #define PROG_STATE_WRITEEEPROM  4

  34. #define PROG_BLOCKFLAG_FIRST    1
  35. #define PROG_BLOCKFLAG_LAST     2

  36. #define ledRedOn()    PORTC &= ~(1 << PC1)
  37. #define ledRedOff()   PORTC |= (1 << PC1)
  38. #define ledGreenOn()  PORTC &= ~(1 << PC0)
  39. #define ledGreenOff() PORTC |= (1 << PC0)

  40. static uchar replyBuffer[8];

  41. static uchar prog_state = PROG_STATE_IDLE;

  42. static unsigned int prog_address;
  43. static unsigned int prog_nbytes = 0;
  44. static unsigned int prog_pagesize; //TP: Mega128 fix
  45. static uchar prog_blockflags;
  46. static uchar prog_pagecounter;


  47. uchar usbFunctionSetup(uchar data[8]) {

  48.   uchar len = 0;

  49.   if(data[1] == USBASP_FUNC_CONNECT){

  50.     /* set SCK speed */
  51.     if ((PINC & (1 << PC2)) == 0) {
  52.       ispSetSCKOption(ISP_SCK_SLOW);
  53.     } else {
  54.       ispSetSCKOption(ISP_SCK_FAST);
  55.     }

  56.     ispConnect();
  57.     ledRedOn();

  58.   } else if (data[1] == USBASP_FUNC_DISCONNECT) {
  59.     ispDisconnect();
  60.     ledRedOff();

  61.   } else if (data[1] == USBASP_FUNC_TRANSMIT) {
  62.           if(chip==ATM){
  63.             replyBuffer[0] = ispTransmit(data[2]);
  64.             replyBuffer[1] = ispTransmit(data[3]);
  65.             replyBuffer[2] = ispTransmit(data[4]);
  66.             replyBuffer[3] = ispTransmit(data[5]);
  67.           }else{
  68.                   if(data[2]==0x24){
  69.                           replyBuffer[0] = ispTransmit(data[2]);
  70.                     replyBuffer[1] = ispTransmit(data[3]);
  71.                     replyBuffer[2] = ispTransmit(data[4]);
  72.                           switch(ispTransmit(data[5])&0x1C){
  73.                                   case(0x00):replyBuffer[3]=0xE0;break;
  74.                                   case(0x04):replyBuffer[3]=0xE5;break;
  75.                                   case(0x0C):replyBuffer[3]=0xEE;break;
  76.                                   case(0x1C):replyBuffer[3]=0xFF;break;
  77.                                   }
  78.                   }
  79.                   else if(data[2]==0x30){
  80.                           replyBuffer[0] = ispTransmit(0x28);
  81.                     replyBuffer[1] = ispTransmit(data[3]);
  82.                     replyBuffer[2] = ispTransmit(data[4]);
  83.                     replyBuffer[3] = ispTransmit(data[5]);
  84.                   }
  85.                   else{
  86.                           replyBuffer[0] = ispTransmit(data[2]);
  87.                     replyBuffer[1] = ispTransmit(data[3]);
  88.                     replyBuffer[2] = ispTransmit(data[4]);
  89.                     replyBuffer[3] = ispTransmit(data[5]);
  90.             }
  91.     }
  92.     len = 4;

  93.   } else if (data[1] == USBASP_FUNC_READFLASH) {
  94.     prog_address = (data[3] << 8) | data[2];
  95.     prog_nbytes = (data[7] << 8) | data[6];
  96.     prog_state = PROG_STATE_READFLASH;
  97.     len = 0xff; /* multiple in */

  98.   } else if (data[1] == USBASP_FUNC_READEEPROM) {
  99.     prog_address = (data[3] << 8) | data[2];
  100.     prog_nbytes = (data[7] << 8) | data[6];
  101.     prog_state = PROG_STATE_READEEPROM;
  102.     len = 0xff; /* multiple in */

  103.   } else if (data[1] == USBASP_FUNC_ENABLEPROG) {
  104.     replyBuffer[0] = ispEnterProgrammingMode();;
  105.     len = 1;

  106.   } else if (data[1] == USBASP_FUNC_WRITEFLASH) {
  107.     prog_address = (data[3] << 8) | data[2];
  108.     prog_pagesize = data[4];
  109.     prog_blockflags = data[5] & 0x0F;
  110.     prog_pagesize += (((unsigned int)data[5] & 0xF0)<<4); //TP: Mega128 fix
  111.     if (prog_blockflags & PROG_BLOCKFLAG_FIRST) {
  112.       prog_pagecounter = prog_pagesize;
  113.     }
  114.     prog_nbytes = (data[7] << 8) | data[6];
  115.     prog_state = PROG_STATE_WRITEFLASH;
  116.     len = 0xff; /* multiple out */

  117.   } else if (data[1] == USBASP_FUNC_WRITEEEPROM) {
  118.     prog_address = (data[3] << 8) | data[2];
  119.     prog_pagesize = 0;
  120.     prog_blockflags = 0;
  121.     prog_nbytes = (data[7] << 8) | data[6];
  122.     prog_state = PROG_STATE_WRITEEEPROM;
  123.     len = 0xff; /* multiple out */
  124.   }

  125.   usbMsgPtr = replyBuffer;

  126.   return len;
  127. }


  128. uchar usbFunctionRead(uchar *data, uchar len) {

  129.   uchar i;

  130.   /* check if programmer is in correct read state */
  131.   if ((prog_state != PROG_STATE_READFLASH) &&
  132.       (prog_state != PROG_STATE_READEEPROM)) {
  133.     return 0xff;
  134.   }

  135.   /* fill packet */
  136.   for (i = 0; i < len; i++) {
  137.     if (prog_state == PROG_STATE_READFLASH) {
  138.       data[i] = ispReadFlash(prog_address);
  139.     } else {
  140.       data[i] = ispReadEEPROM(prog_address);
  141.     }
  142.     prog_address++;
  143.   }

  144.   /* last packet? */
  145.   if (len < 8) {
  146.     prog_state = PROG_STATE_IDLE;
  147.   }

  148.   return len;
  149. }


  150. uchar usbFunctionWrite(uchar *data, uchar len) {

  151.   uchar retVal = 0;
  152.   uchar i;

  153.   /* check if programmer is in correct write state */
  154.   if ((prog_state != PROG_STATE_WRITEFLASH) &&
  155.       (prog_state != PROG_STATE_WRITEEEPROM)) {
  156.     return 0xff;
  157.   }


  158.   for (i = 0; i < len; i++) {

  159.     if (prog_state == PROG_STATE_WRITEFLASH) {
  160.       /* Flash */

  161.       if (prog_pagesize == 0) {
  162.         /* not paged */
  163.         ispWriteFlash(prog_address, data[i], 1);
  164.       } else {
  165.         /* paged */
  166.         ispWriteFlash(prog_address, data[i], 0);
  167.         prog_pagecounter --;
  168.         if (prog_pagecounter == 0) {
  169.           ispFlushPage(prog_address, data[i]);
  170.           prog_pagecounter = prog_pagesize;
  171.         }
  172.       }

  173.     } else {
  174.       /* EEPROM */
  175.       ispWriteEEPROM(prog_address, data[i]);
  176.     }

  177.     prog_nbytes --;

  178.     if (prog_nbytes == 0) {
  179.       prog_state = PROG_STATE_IDLE;
  180.       if ((prog_blockflags & PROG_BLOCKFLAG_LAST) &&
  181.           (prog_pagecounter != prog_pagesize)) {

  182.         /* last block and page flush pending, so flush it now */
  183.         ispFlushPage(prog_address, data[i]);
  184.       }
  185.           
  186.           retVal = 1; // Need to return 1 when no more data is to be received
  187.     }

  188.     prog_address ++;
  189.   }

  190.   return retVal;
  191. }


  192. int main(void)
  193. {
  194.   uchar   i, j;

  195.   PORTD = 0;
  196.   PORTB = 0;                /* no pullups on USB and ISP pins */
  197.   DDRD = ~(1 << 2);        /* all outputs except PD2 = INT0 */

  198.   DDRB = ~0;            /* output SE0 for USB reset */
  199.   j = 0;
  200.   while(--j){           /* USB Reset by device only required on Watchdog Reset */
  201.       i = 0;
  202.       while(--i);       /* delay >10ms for USB reset */
  203.   }
  204.   DDRB = 0;             /* all USB and ISP pins inputs */

  205.   DDRC = 0x03;          /* all inputs except PC0, PC1 */
  206.   PORTC = 0xfe;
  207.        
  208.         chip=ATM;
  209.        
  210.   clockInit();          /* init timer */

  211.   ispSetSCKOption(ISP_SCK_FAST);

  212.   usbInit();
  213.   sei();
  214.   for(;;){                /* main event loop */
  215.     usbPoll();
  216.   }
  217.   return 0;
  218. }

復制代碼
全部資料(壓縮包)下載:
windows端驅動.zip (32.27 KB, 下載次數: 16) 固件和AVR單片機源碼.zip (146.18 KB, 下載次數: 16) 原理圖和PCB源文件.zip (122.32 KB, 下載次數: 13)




作者: 唐癡癡    時間: 2016-6-7 16:21
好牛逼




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天躁日日躁狠狠躁 | 精品国产乱码久久久久久88av | 99精品久久久久久中文字幕 | 亚洲福利视频一区 | 久久国产亚洲 | 精品一区二区三区四区 | 伊人影院久久 | 日韩av不卡在线 | 国产精品久久久久久久成人午夜 | 日韩中文字幕在线观看 | 欧美黄色片在线观看 | 欧美精品黄色 | 黄色片免费网站 | 欧美精品亚洲精品 | 毛片网站在线播放 | 亚洲天堂偷拍 | 久久久一本 | 激情影院在线观看 | 看片地址| 黄色大片网站 | 成人午夜免费视频 | 免费精品 | 天天噜 | 国产肉体xxxx裸体784大胆 | 成人免费高清视频 | 精品小视频| 国产无精乱码一区二区三区 | 97超碰在线播放 | 死神来了4无删减版在线观看 | 最近中文字幕在线观看 | 久插视频 | 久久久中文| 免费一级片 | 欧美日韩亚洲另类 | 黄色特级毛片 | 久久国产精品视频 | 亚洲综合另类 | 一区中文字幕 | 精品少妇一区二区三区免费观 | 日本久久久久久久久 | 久久精品欧美一区二区三区不卡 |