summaryrefslogtreecommitdiffstats
path: root/firmware/main.c
diff options
context:
space:
mode:
authorJenna Fox <a@creativepony.com>2012-09-24 13:49:41 +1000
committerJenna Fox <a@creativepony.com>2012-09-24 13:49:41 +1000
commit1539320a76f6be5f14a426461b1999b5ce401001 (patch)
treef7f08f18d1f3942836663007d57a51a1a0a24344 /firmware/main.c
parentab6db42bceb1e50bdc77c720109d5e9fbac4ff7d (diff)
downloadmicronucleus-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.c26
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) {