*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
#include <string.h>
#include <ao_boot.h>
+#ifndef IS_FLASH_LOADER
+#error Should define IS_FLASH_LOADER
+#define IS_FLASH_LOADER 0
+#endif
+
+#if !IS_FLASH_LOADER
+#define RELOCATE_INTERRUPT 1
+#endif
+
extern void main(void);
extern char __stack__;
extern char __text_start__, __text_end__;
extern char __data_start__, __data_end__;
extern char __bss_start__, __bss_end__;
+#if RELOCATE_INTERRUPT
+extern char __interrupt_rom__, __interrupt_start__, __interrupt_end__;
+#endif
/* Interrupt functions */
switch (dev_id) {
case 0x445:
- kbytes = 32; /* assume 32kB until we figure this out */
+ kbytes = stm_flash_size_04x.f_size;
break;
}
return (uint32_t) kbytes * 1024;
void start(void)
{
-#if 0
#ifdef AO_BOOT_CHAIN
if (ao_boot_check_chain()) {
#ifdef AO_BOOT_PIN
#endif
}
#endif
+#if RELOCATE_INTERRUPT
+ /* Turn on syscfg */
+ stm_rcc.apb2enr |= (1 << STM_RCC_APB2ENR_SYSCFGCOMPEN);
+
+ 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);
#endif
memcpy(&__data_start__, &__text_end__, &__data_end__ - &__data_start__);
memset(&__bss_start__, '\0', &__bss_end__ - &__bss_start__);
isr(exti4_15)
isr(tsc)
isr(dma_ch1)
-isr(dma_ch2_3_dma2_ch1_2)
-isr(dma_ch4_5_6_7_dma2_ch3_4_5)
+isr(dma_ch2_3)
+isr(dma_ch4_5_6)
isr(adc_comp)
isr(tim1_brk_up_trg_com)
isr(tim1_cc)
i(0x5c, exti4_15),
i(0x60, tsc),
i(0x64, dma_ch1),
- i(0x68, dma_ch2_3_dma2_ch1_2),
- i(0x6c, dma_ch4_5_6_7_dma2_ch3_4_5),
+ i(0x68, dma_ch2_3),
+ i(0x6c, dma_ch4_5_6),
i(0x70, adc_comp),
i(0x74, tim1_brk_up_trg_com),
i(0x78, tim1_cc),