MBED AVR ISP programmer. Targeted for ATMEGA1284p but should work for other AVR chips as well. Inspired by AVR_SPI_Programmer_v2 and AVR910.

Dependencies:   mbed

Committer:
qiangbo
Date:
Thu Jan 05 02:44:12 2012 +0000
Revision:
0:064004c069be
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
qiangbo 0:064004c069be 1 #include "mbed.h"
qiangbo 0:064004c069be 2 #include "AVRISP.h"
qiangbo 0:064004c069be 3
qiangbo 0:064004c069be 4 #define FUSE_LOW 0xD0
qiangbo 0:064004c069be 5 #define FUSE_HIGH 0xD9
qiangbo 0:064004c069be 6 #define FUSE_EXTENDED 0xFF
qiangbo 0:064004c069be 7 #define LOCK_BYTE 0xFF
qiangbo 0:064004c069be 8
qiangbo 0:064004c069be 9 LocalFileSystem local("local");
qiangbo 0:064004c069be 10 AVRISP avrisp(p11,p12,p13,p14);
qiangbo 0:064004c069be 11 Serial pc(USBTX, USBRX);
qiangbo 0:064004c069be 12
qiangbo 0:064004c069be 13 int main()
qiangbo 0:064004c069be 14 {
qiangbo 0:064004c069be 15 bool ifSuccessful;
qiangbo 0:064004c069be 16
qiangbo 0:064004c069be 17 pc.printf("Press any button to program the AVR.\n");
qiangbo 0:064004c069be 18 char c = pc.getc();
qiangbo 0:064004c069be 19
qiangbo 0:064004c069be 20 ifSuccessful = avrisp.EnableProgrammingMode();
qiangbo 0:064004c069be 21 if(ifSuccessful)
qiangbo 0:064004c069be 22 {
qiangbo 0:064004c069be 23 pc.printf("Enter Programming Mode: Successful.\n");
qiangbo 0:064004c069be 24 }
qiangbo 0:064004c069be 25 else
qiangbo 0:064004c069be 26 {
qiangbo 0:064004c069be 27 pc.printf("Enter Programming Mode: Failed.\n");
qiangbo 0:064004c069be 28 }
qiangbo 0:064004c069be 29
qiangbo 0:064004c069be 30 int signatureByte1 = avrisp.ReadChipSignatureByte1();
qiangbo 0:064004c069be 31 int signatureByte2 = avrisp.ReadChipSignatureByte2();
qiangbo 0:064004c069be 32 int signatureByte3 = avrisp.ReadChipSignatureByte3();
qiangbo 0:064004c069be 33 pc.printf("Chip signature is %x %x %x\n",signatureByte1,signatureByte2,signatureByte3);
qiangbo 0:064004c069be 34
qiangbo 0:064004c069be 35 pc.printf("Erase Chip.\n");
qiangbo 0:064004c069be 36 avrisp.ChipErase();
qiangbo 0:064004c069be 37
qiangbo 0:064004c069be 38 pc.printf("Write Fuse Low Byte.\n");
qiangbo 0:064004c069be 39 avrisp.WriteFuseLow(FUSE_LOW);
qiangbo 0:064004c069be 40 pc.printf("Fuse Low Byte Readback = %x.\n",avrisp.ReadFuseLow());
qiangbo 0:064004c069be 41
qiangbo 0:064004c069be 42 pc.printf("Write Fuse High Byte.\n");
qiangbo 0:064004c069be 43 avrisp.WriteFuseLow(FUSE_HIGH);
qiangbo 0:064004c069be 44 pc.printf("Fuse High Byte Readback = %x.\n",avrisp.ReadFuseHigh());
qiangbo 0:064004c069be 45
qiangbo 0:064004c069be 46 pc.printf("Write Fuse Extended Byte.\n");
qiangbo 0:064004c069be 47 avrisp.WriteFuseLow(FUSE_EXTENDED);
qiangbo 0:064004c069be 48 pc.printf("Fuse Extended Byte Readback = %x.\n",avrisp.ReadFuseExtended());
qiangbo 0:064004c069be 49
qiangbo 0:064004c069be 50 pc.printf("Write Lock Byte.\n");
qiangbo 0:064004c069be 51 avrisp.WriteLockByte(LOCK_BYTE);
qiangbo 0:064004c069be 52 pc.printf("Lock Byte Readback = %x.\n",avrisp.ReadLockByte());
qiangbo 0:064004c069be 53
qiangbo 0:064004c069be 54 ifSuccessful = avrisp.ProgramFlash("/local/avr1");
qiangbo 0:064004c069be 55 if(ifSuccessful)
qiangbo 0:064004c069be 56 {
qiangbo 0:064004c069be 57 pc.printf("Program Flash: Successful.\n");
qiangbo 0:064004c069be 58 }
qiangbo 0:064004c069be 59 else
qiangbo 0:064004c069be 60 {
qiangbo 0:064004c069be 61 pc.printf("Program Flash: Failed.\n");
qiangbo 0:064004c069be 62 }
qiangbo 0:064004c069be 63
qiangbo 0:064004c069be 64 avrisp.LeaveProgrammingMode();
qiangbo 0:064004c069be 65 }