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
- Committer:
- qiangbo
- Date:
- 2012-01-05
- Revision:
- 0:064004c069be
File content as of revision 0:064004c069be:
#include "mbed.h"
#include "AVRISP.h"
#define FUSE_LOW 0xD0
#define FUSE_HIGH 0xD9
#define FUSE_EXTENDED 0xFF
#define LOCK_BYTE 0xFF
LocalFileSystem local("local");
AVRISP avrisp(p11,p12,p13,p14);
Serial pc(USBTX, USBRX);
int main()
{
bool ifSuccessful;
pc.printf("Press any button to program the AVR.\n");
char c = pc.getc();
ifSuccessful = avrisp.EnableProgrammingMode();
if(ifSuccessful)
{
pc.printf("Enter Programming Mode: Successful.\n");
}
else
{
pc.printf("Enter Programming Mode: Failed.\n");
}
int signatureByte1 = avrisp.ReadChipSignatureByte1();
int signatureByte2 = avrisp.ReadChipSignatureByte2();
int signatureByte3 = avrisp.ReadChipSignatureByte3();
pc.printf("Chip signature is %x %x %x\n",signatureByte1,signatureByte2,signatureByte3);
pc.printf("Erase Chip.\n");
avrisp.ChipErase();
pc.printf("Write Fuse Low Byte.\n");
avrisp.WriteFuseLow(FUSE_LOW);
pc.printf("Fuse Low Byte Readback = %x.\n",avrisp.ReadFuseLow());
pc.printf("Write Fuse High Byte.\n");
avrisp.WriteFuseLow(FUSE_HIGH);
pc.printf("Fuse High Byte Readback = %x.\n",avrisp.ReadFuseHigh());
pc.printf("Write Fuse Extended Byte.\n");
avrisp.WriteFuseLow(FUSE_EXTENDED);
pc.printf("Fuse Extended Byte Readback = %x.\n",avrisp.ReadFuseExtended());
pc.printf("Write Lock Byte.\n");
avrisp.WriteLockByte(LOCK_BYTE);
pc.printf("Lock Byte Readback = %x.\n",avrisp.ReadLockByte());
ifSuccessful = avrisp.ProgramFlash("/local/avr1");
if(ifSuccessful)
{
pc.printf("Program Flash: Successful.\n");
}
else
{
pc.printf("Program Flash: Failed.\n");
}
avrisp.LeaveProgrammingMode();
}