Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mAVRISP by
main.cpp
- Committer:
- jeroenmbed
- Date:
- 2015-01-31
- Revision:
- 3:df6782d01720
- Parent:
- 1:276f6df4be7a
- Child:
- 4:ceee1eb7062e
File content as of revision 3:df6782d01720:
/**
* Program an AVR with an mbed.
*/
#include "AVR910.h"
//LocalFileSystem local("local");
Serial pc(USBTX, USBRX);
//AVR910 mAVRISP(PA_7, PA_6, PA_5, PB_6); //mosi, miso, sclk, nreset.
//AVR910 mAVRISP(PB_5, PB_4, PB_3, PA_10); //mosi, miso, sclk, nreset.
AVR910 mAVRISP(PB_15, PB_14, PB_13, PB_2); //mosi, miso, sclk, nreset.
DigitalOut working(LED1);
int main()
{
working = 1;
int success = -1;
int response = 0;
pc.printf("Starting\n");
//Read the vendor code [0x1E == Atmel].
response = mAVRISP.readVendorCode();
printf("vendorcode=%d\n",response);
if (response == ATMEL_VENDOR_CODE) {
pc.printf("Microcontroller is an Atmel [0x%02x]\n", response);
} else if (response == DEVICE_LOCKED) {
pc.printf("Device is locked\n");
return -1;
} else {
pc.printf("Microcontroller is not an Atmel\n");
return -1;
}
//Read part family and flash size - see datasheet for code meaning.
response = mAVRISP.readPartFamilyAndFlashSize();
if (response == 0xFF) {
pc.printf("Device code erased or target missing\n");
} else if (response == 0x01) {
pc.printf("Device locked\n");
return -1;
} else {
pc.printf("Part family and flash size code is: 0x%02x\n", response);
}
//Read part number.
response = mAVRISP.readPartNumber();
if (response == 0xFF) {
pc.printf("Device code erased or target missing\n");
} else if (response == 0x02) {
pc.printf("Device locked\n");
return -1;
} else {
pc.printf("Part number code is: 0x%02x\n", response);
}
//Open binary file to write to AVR.
//FILE *fp = fopen(PATH_TO_BINARY, "rb");
printf("@");
int hs, ls;
while (!pc.readable());
hs = pc.getc();
printf("hs=%d\n",hs);
while (!pc.readable());
ls = pc.getc();
printf("ls=%d\n",ls);
int fileSize = (hs<<8) + ls;
printf ("file size = %d\n", fileSize);
printf("#");
char *myFile;
myFile = new char [fileSize];
int readChar=0;
while (readChar < fileSize) {
if (pc.readable()) {
myFile[readChar]=pc.getc();
readChar++;
}
}
for (int i=0; i<fileSize; i++) {
printf("r %d: 0x%02x\n",i, myFile[i]);
}
wait_ms(1000);
success = mAVRISP.programData(myFile, fileSize, ATMEGA328P_PAGESIZE, ATMEGA328P_NUM_PAGES);
// if (fp == NULL) {
// pc.printf("Failed to open binary. Please check the file path\n");
// return -1;
// } else {
// //Program it!
// pc.printf("Binary file opened successfully\n");
// success = mAVRISP.program(fp,
// ATMEGA328P_PAGESIZE,
// ATMEGA328P_NUM_PAGES);
// fclose(fp);
// }
if (success < 0) {
printf("Programming failed.\n");
} else {
printf("Programming was successful!\n");
}
}
/* Python file for on the pc:
import serial
import sys
import os
fileName=sys.argv[1]
fileSize=os.path.getsize(fileName)
serdev='/dev/ttyACM0'
s = serial.Serial(serdev)
while True:
if s.readable():
c = s.read()
if '@' in c:
print "Start sending file size\n"
hs = (fileSize>>8) & 0xff
s.write(chr(hs))
ls = fileSize & 0xff
s.write(chr(ls))
if '#' in c:
print "Start sending file\n"
with open(fileName, "rb") as f:
byte = f.read(1)
while byte != "":
# while not s.writable():
# pass
# print "send: 0x",format(ord(byte),'02x')
s.write(byte)
byte = f.read(1)
else:
sys.stdout.write(c)
*/
/* avr test file:
#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
// Set Port D pins as all outputs
DDRD = 0xff;
// Set all Port D pins as HIGH
while (1) {
PORTD = 0xFF;
_delay_ms(500.);
PORTD = 0x00;
_delay_ms(500.);
}
return 1;
}
*/
