MBED AVR ISP programmer. Targeted for ATMEGA1284p but should work for other AVR chips as well. Inspired by AVR_SPI_Programmer_v2 and AVR910.
main.cpp@0:064004c069be, 2012-01-05 (annotated)
- Committer:
- qiangbo
- Date:
- Thu Jan 05 02:44:12 2012 +0000
- Revision:
- 0:064004c069be
Initial version
Who changed what in which revision?
User | Revision | Line number | New 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 | } |