diff options
author | Jenna Fox <a@creativepony.com> | 2012-09-24 13:49:41 +1000 |
---|---|---|
committer | Jenna Fox <a@creativepony.com> | 2012-09-24 13:49:41 +1000 |
commit | 1539320a76f6be5f14a426461b1999b5ce401001 (patch) | |
tree | f7f08f18d1f3942836663007d57a51a1a0a24344 /firmware/main.c | |
parent | ab6db42bceb1e50bdc77c720109d5e9fbac4ff7d (diff) | |
download | micronucleus-1539320a76f6be5f14a426461b1999b5ce401001.tar.gz micronucleus-1539320a76f6be5f14a426461b1999b5ce401001.tar.bz2 micronucleus-1539320a76f6be5f14a426461b1999b5ce401001.zip |
Making progress fixing issue where it never properly erases first page
Diffstat (limited to 'firmware/main.c')
-rw-r--r-- | firmware/main.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/firmware/main.c b/firmware/main.c index 84cc11e..34628c6 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -95,18 +95,32 @@ static addr_t currentAddress; /* in bytes */ /* ------------------------------------------------------------------------ */ +static inline void eraseApplication(void); +static void writeFlashPage(void); +static void writeWordToPageBuffer(uint16_t data); +static void fillFlashWithVectors(void); +static uchar usbFunctionSetup(uchar data[8]); +static uchar usbFunctionWrite(uchar *data, uchar length); +static inline void initForUsbConnectivity(void); +static inline void tiny85FlashInit(void); +static inline void tiny85FlashWrites(void); +static inline __attribute__((noreturn)) void leaveBootloader(void); + static inline void eraseApplication(void) { - // erase all pages starting from end of application section down to page 1 (leaving page 0) - currentAddress = BOOTLOADER_ADDRESS - SPM_PAGESIZE; + // xxxxxx erase all pages starting from end of application section down to page 1 (leaving page 0) + // erase all pages (every last one!) + currentAddress = BOOTLOADER_ADDRESS; + cli(); while (currentAddress) { - cli(); + currentAddress -= SPM_PAGESIZE; + boot_page_erase(currentAddress); boot_spm_busy_wait(); - sei(); - - currentAddress -= SPM_PAGESIZE; } + + fillFlashWithVectors(); + sei(); } static void writeFlashPage(void) { |