diff options
author | Keith Packard <keithp@keithp.com> | 2018-05-01 23:44:00 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2018-05-01 23:44:00 -0700 |
commit | 08e543cd8b761e4cbbfa97404fcd5394f65a0e9e (patch) | |
tree | 0d34fe89503d5cc65ebec72dc8febc62d0b24058 | |
parent | 980e3dc43ac4712680a370756e5112e9f330aa9a (diff) |
altos/stmf0: Set 0x0 mapping to Main Flash for boot loader
When DFU finishes loading firmware and jumps to the application, it
leaves the mapping of addresses starting at 0x0 set to System flash,
which prevents the boot loader from receiving interrupts and requires
a power cycle during flash & cal.
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | src/stmf0/ao_interrupt.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/stmf0/ao_interrupt.c b/src/stmf0/ao_interrupt.c index 0d6f6113..a67f6f1a 100644 --- a/src/stmf0/ao_interrupt.c +++ b/src/stmf0/ao_interrupt.c @@ -76,13 +76,17 @@ void start(void) #endif } #endif -#if RELOCATE_INTERRUPT /* Turn on syscfg */ stm_rcc.apb2enr |= (1 << STM_RCC_APB2ENR_SYSCFGCOMPEN); +#if RELOCATE_INTERRUPT memcpy(&__interrupt_start__, &__interrupt_rom__, &__interrupt_end__ - &__interrupt_start__); stm_syscfg.cfgr1 = (stm_syscfg.cfgr1 & ~(STM_SYSCFG_CFGR1_MEM_MODE_MASK << STM_SYSCFG_CFGR1_MEM_MODE)) | (STM_SYSCFG_CFGR1_MEM_MODE_SRAM << STM_SYSCFG_CFGR1_MEM_MODE); +#else + /* Switch to Main Flash mode (DFU loader leaves us in System mode) */ + stm_syscfg.cfgr1 = (stm_syscfg.cfgr1 & ~(STM_SYSCFG_CFGR1_MEM_MODE_MASK << STM_SYSCFG_CFGR1_MEM_MODE)) | + (STM_SYSCFG_CFGR1_MEM_MODE_MAIN_FLASH << STM_SYSCFG_CFGR1_MEM_MODE); #endif memcpy(&__data_start__, &__text_end__, &__data_end__ - &__data_start__); memset(&__bss_start__, '\0', &__bss_end__ - &__bss_start__); |