Aaron Berk
/
mAVRISP
Program an AVR microcontroller using mbed.
Diff: AVR910.cpp
- Revision:
- 1:276f6df4be7a
- Parent:
- 0:3066745764a5
- Child:
- 2:99c56829a2a8
--- a/AVR910.cpp Tue Aug 31 14:09:53 2010 +0000 +++ b/AVR910.cpp Wed Sep 01 10:22:51 2010 +0000 @@ -60,7 +60,7 @@ //Issue a programming enable command. response = enableProgramming(); - + //Simple debugging to see if we get trapped //in an infinite loop. DigitalOut working(LED1); @@ -79,12 +79,12 @@ response = enableProgramming(); } - + working = 0; } -int AVR910::program(FILE* binary) { +int AVR910::program(FILE* binary, int pageSize, int numPages) { //Clear memory contents. chipErase(); @@ -93,27 +93,60 @@ int pageNumber = 0; int c = 0; int highLow = 0; - - while ((c = getc(binary)) != EOF) { + + //We're dealing with paged memory. + if (numPages > 1) { + + while ((c = getc(binary)) != EOF) { + + //Page is fully loaded, time to write it to flash. + if (pageOffset == (pageSize)) { + writeFlashMemoryPage(pageNumber); - //Page is fully loaded, time to write it to flash. - if (pageOffset == (PAGE_SIZE)) { - writeFlashMemoryPage(pageNumber); + pageNumber++; + if (pageNumber > numPages) { + break; + } + pageOffset = 0; + } - pageNumber++; - pageOffset = 0; + //Write low byte. + if (highLow == 0) { + loadMemoryPage(WRITE_LOW_BYTE, pageOffset, c); + highLow = 1; + } + //Write high byte. + else { + loadMemoryPage(WRITE_HIGH_BYTE, pageOffset, c); + highLow = 0; + pageOffset++; + } + } - //Write low byte. - if (highLow == 0) { - loadMemoryPage(WRITE_LOW_BYTE, pageOffset, c); - highLow = 1; - } - //Write high byte. - else { - loadMemoryPage(WRITE_HIGH_BYTE, pageOffset, c); - highLow = 0; - pageOffset++; + } + //We're dealing with non-paged memory. + else { + + while ((c = getc(binary)) != EOF) { + + //Write low byte. + if (highLow == 0) { + loadMemoryPage(WRITE_LOW_BYTE, pageOffset, c); + highLow = 1; + } + //Write high byte. + else { + loadMemoryPage(WRITE_HIGH_BYTE, pageOffset, c); + highLow = 0; + pageOffset++; + + if (pageOffset > pageSize) { + break; + } + + } + } }