From 8cb3d09484e6b304abbd905ffa1073683ffc2fcf Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Wed, 18 Sep 2019 10:45:39 -0400 Subject: stm32: Move usb_request_bootloader() to chip specific code Signed-off-by: Kevin O'Connor --- src/stm32/stm32f1.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/stm32/stm32f1.c') diff --git a/src/stm32/stm32f1.c b/src/stm32/stm32f1.c index e5defd96..e1ef56aa 100644 --- a/src/stm32/stm32f1.c +++ b/src/stm32/stm32f1.c @@ -5,6 +5,8 @@ // This file may be distributed under the terms of the GNU GPLv3 license. #include "autoconf.h" // CONFIG_CLOCK_REF_8M +#include "board/irq.h" // irq_disable +#include "board/usb_cdc.h" // usb_request_bootloader #include "internal.h" // enable_pclock #define FREQ_PERIPH (CONFIG_CLOCK_FREQ / 2) @@ -104,6 +106,21 @@ gpio_peripheral(uint32_t gpio, uint32_t mode, int pullup) AFIO->MAPR = AFIO_MAPR_SWJ_CFG_DISABLE; } +// Handle USB reboot requests +void +usb_request_bootloader(void) +{ + if (!CONFIG_STM32_FLASH_START_2000) + return; + // Enter "stm32duino" bootloader + irq_disable(); + RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN; + PWR->CR |= PWR_CR_DBP; + BKP->DR10 = 0x01; + PWR->CR &=~ PWR_CR_DBP; + NVIC_SystemReset(); +} + // Main clock setup called at chip startup void clock_setup(void) -- cgit v1.2.3-70-g09d2