From c955d7b824058a797006d3e0a725036214aa4022 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 28 Jun 2018 20:09:57 +1000 Subject: [PATCH] AP_Bootloader: fixed issue loading NuttX firmwares NuttX assumes a lot more about MCU state on startup --- Tools/AP_Bootloader/bl_protocol.cpp | 10 ++++++++++ Tools/AP_Bootloader/support.cpp | 2 -- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Tools/AP_Bootloader/bl_protocol.cpp b/Tools/AP_Bootloader/bl_protocol.cpp index 4f1ef763fa..146095aed5 100644 --- a/Tools/AP_Bootloader/bl_protocol.cpp +++ b/Tools/AP_Bootloader/bl_protocol.cpp @@ -180,7 +180,11 @@ do_jump(uint32_t stacktop, uint32_t entrypoint) SCB_DisableICache(); #endif + chSysLock(); + + // we set sp as well as msp to avoid an issue with loading NuttX asm volatile( + "mov sp, %0 \n" "msr msp, %0 \n" "bx %1 \n" : : "r"(stacktop), "r"(entrypoint) :); @@ -217,6 +221,12 @@ jump_to_app() led_set(LED_OFF); + // resetting the clocks is needed for loading NuttX + rccDisableAPB1(~0, 0); + rccDisableAPB2(~0, 0); + rccResetOTG_FS(); + rccResetOTG_HS(); + // disable all interrupt sources port_disable(); diff --git a/Tools/AP_Bootloader/support.cpp b/Tools/AP_Bootloader/support.cpp index 82971ead2f..79ca46dd91 100644 --- a/Tools/AP_Bootloader/support.cpp +++ b/Tools/AP_Bootloader/support.cpp @@ -369,5 +369,3 @@ void port_setbaud(uint32_t baudrate) sdStart((SerialDriver *)uarts[last_uart], &sercfg); #endif } - -