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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4735|回復: 1
打印 上一主題 下一主題
收起左側(cè)

ISP下載器 電路圖 原代碼 驅(qū)動程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:124161 發(fā)表于 2016-6-7 15:58 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式



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

同時預留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端驅(qū)動.zip (32.27 KB, 下載次數(shù): 16) 固件和AVR單片機源碼.zip (146.18 KB, 下載次數(shù): 16) 原理圖和PCB源文件.zip (122.32 KB, 下載次數(shù): 13)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:125666 發(fā)表于 2016-6-7 16:21 | 只看該作者
好牛逼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩日韩日韩日韩日韩日韩日韩 | 久久1区 | 日本高清视频在线播放 | 亚洲三区在线观看 | 亚洲一区播放 | 国产a一区二区 | 男人的天堂avav | 国产福利在线小视频 | 视频一区二区国产 | 91在线免费观看网站 | 嫩草影院网址 | 在线视频 亚洲 | 91视频在线网站 | 免费黄色的网站 | 午夜网站视频 | 一区二区视频在线 | 久久久精彩视频 | 国产精品久久久久久久久久免费 | 国产精品免费大片 | 欧美激情精品久久久久久 | 羞羞视频在线免费 | 九九亚洲精品 | 91一区 | 亚洲美女一区二区三区 | 中文字幕日韩欧美一区二区三区 | 欧美乱大交xxxxx另类电影 | 日韩精品一区二区三区免费视频 | 一区二区三区视频 | 91久久久久久久久久久久久 | 色性av| 久久综合九色综合欧美狠狠 | 国产高清在线精品 | 国产99久久精品一区二区永久免费 | 黄色电影在线免费观看 | 成人av高清| 色偷偷噜噜噜亚洲男人 | 欧美日韩在线高清 | 久久久一区二区三区四区 | 色婷婷精品国产一区二区三区 | 日韩成人免费在线视频 | 一区二区三区影院 |