1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標題: 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://www.raoushi.com/bbs/) Powered by Discuz! X3.1