From 80e17b1e53801b13ec47a1fd8038641aa4be2e1d Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Wed, 18 Sep 2019 10:49:23 -0400 Subject: [PATCH] stm32: Move VTOR fixup from main() to chip specific code Signed-off-by: Kevin O'Connor --- src/stm32/main.c | 3 --- src/stm32/stm32f1.c | 5 +++++ src/stm32/stm32f4.c | 5 +++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/stm32/main.c b/src/stm32/main.c index 13729216..6d9290fd 100644 --- a/src/stm32/main.c +++ b/src/stm32/main.c @@ -5,7 +5,6 @@ // This file may be distributed under the terms of the GNU GPLv3 license. #include "autoconf.h" // CONFIG_MCU -#include "board/armcm_boot.h" // VectorTable #include "command.h" // DECL_CONSTANT_STR #include "internal.h" // clock_setup #include "sched.h" // sched_main @@ -23,8 +22,6 @@ DECL_COMMAND_FLAGS(command_reset, HF_IN_SHUTDOWN, "reset"); int main(void) { - SCB->VTOR = (uint32_t)VectorTable; - clock_setup(); sched_main(); diff --git a/src/stm32/stm32f1.c b/src/stm32/stm32f1.c index e1ef56aa..8723c6d1 100644 --- a/src/stm32/stm32f1.c +++ b/src/stm32/stm32f1.c @@ -5,6 +5,7 @@ // This file may be distributed under the terms of the GNU GPLv3 license. #include "autoconf.h" // CONFIG_CLOCK_REF_8M +#include "board/armcm_boot.h" // VectorTable #include "board/irq.h" // irq_disable #include "board/usb_cdc.h" // usb_request_bootloader #include "internal.h" // enable_pclock @@ -125,6 +126,10 @@ usb_request_bootloader(void) void clock_setup(void) { + // The SystemInit() code alters VTOR - restore it + SCB->VTOR = (uint32_t)VectorTable; + + // Configure and enable PLL uint32_t cfgr; if (CONFIG_CLOCK_REF_8M) { // Configure 72Mhz PLL from external 8Mhz crystal (HSE) diff --git a/src/stm32/stm32f4.c b/src/stm32/stm32f4.c index e6f3f14d..6dfa2f68 100644 --- a/src/stm32/stm32f4.c +++ b/src/stm32/stm32f4.c @@ -5,6 +5,7 @@ // This file may be distributed under the terms of the GNU GPLv3 license. #include "autoconf.h" // CONFIG_CLOCK_REF_8M +#include "board/armcm_boot.h" // VectorTable #include "board/usb_cdc.h" // usb_request_bootloader #include "command.h" // DECL_CONSTANT_STR #include "internal.h" // enable_pclock @@ -176,6 +177,10 @@ enable_clock_stm32f446(void) void clock_setup(void) { + // The SystemInit() code alters VTOR - restore it + SCB->VTOR = (uint32_t)VectorTable; + + // Configure and enable PLL if (CONFIG_MACH_STM32F405 || CONFIG_MACH_STM32F407) enable_clock_stm32f40x(); else