stm32/powerctrlboot: Provide custom SystemInit for WB55.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au> Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
c551723914
commit
8b3f1d47a6
|
@ -298,6 +298,9 @@ STATIC bool init_sdcard_fs(void) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void stm32_main(uint32_t reset_mode) {
|
void stm32_main(uint32_t reset_mode) {
|
||||||
|
// Low-level MCU initialisation.
|
||||||
|
stm32_system_init();
|
||||||
|
|
||||||
#if !defined(STM32F0) && defined(MICROPY_HW_VTOR)
|
#if !defined(STM32F0) && defined(MICROPY_HW_VTOR)
|
||||||
// Change IRQ vector table if configured differently
|
// Change IRQ vector table if configured differently
|
||||||
SCB->VTOR = MICROPY_HW_VTOR;
|
SCB->VTOR = MICROPY_HW_VTOR;
|
||||||
|
|
|
@ -1311,6 +1311,9 @@ extern PCD_HandleTypeDef pcd_fs_handle;
|
||||||
extern PCD_HandleTypeDef pcd_hs_handle;
|
extern PCD_HandleTypeDef pcd_hs_handle;
|
||||||
|
|
||||||
void stm32_main(uint32_t initial_r0) {
|
void stm32_main(uint32_t initial_r0) {
|
||||||
|
// Low-level MCU initialisation.
|
||||||
|
stm32_system_init();
|
||||||
|
|
||||||
#if defined(STM32H7)
|
#if defined(STM32H7)
|
||||||
// Configure write-once power options, and wait for voltage levels to be ready
|
// Configure write-once power options, and wait for voltage levels to be ready
|
||||||
PWR->CR3 = PWR_CR3_LDOEN;
|
PWR->CR3 = PWR_CR3_LDOEN;
|
||||||
|
|
|
@ -29,6 +29,14 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#if defined(STM32WB)
|
||||||
|
void stm32_system_init(void);
|
||||||
|
#else
|
||||||
|
static inline void stm32_system_init(void) {
|
||||||
|
SystemInit();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void SystemClock_Config(void);
|
void SystemClock_Config(void);
|
||||||
|
|
||||||
NORETURN void powerctrl_mcu_reset(void);
|
NORETURN void powerctrl_mcu_reset(void);
|
||||||
|
|
|
@ -28,6 +28,24 @@
|
||||||
#include "irq.h"
|
#include "irq.h"
|
||||||
#include "powerctrl.h"
|
#include "powerctrl.h"
|
||||||
|
|
||||||
|
#if defined(STM32WB)
|
||||||
|
void stm32_system_init(void) {
|
||||||
|
if (RCC->CR == 0x00000560 && RCC->CFGR == 0x00070005) {
|
||||||
|
// Wake from STANDBY with HSI enabled as system clock. The second core likely
|
||||||
|
// also needs HSI to remain enabled, so do as little as possible here.
|
||||||
|
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
|
||||||
|
// set CP10 and CP11 Full Access.
|
||||||
|
SCB->CPACR |= (3 << (10 * 2)) | (3 << (11 * 2));
|
||||||
|
#endif
|
||||||
|
// Disable all interrupts.
|
||||||
|
RCC->CIER = 0x00000000;
|
||||||
|
} else {
|
||||||
|
// Other start-up (eg POR), use standard system init code.
|
||||||
|
SystemInit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void powerctrl_config_systick(void) {
|
void powerctrl_config_systick(void) {
|
||||||
// Configure SYSTICK to run at 1kHz (1ms interval)
|
// Configure SYSTICK to run at 1kHz (1ms interval)
|
||||||
SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
|
SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
|
||||||
|
|
|
@ -62,8 +62,7 @@ Reset_Handler:
|
||||||
cmp r1, r2
|
cmp r1, r2
|
||||||
bcc .bss_zero_loop
|
bcc .bss_zero_loop
|
||||||
|
|
||||||
/* Initialise the system and jump to the main code */
|
/* Jump to the main code */
|
||||||
bl SystemInit
|
|
||||||
mov r0, r4
|
mov r0, r4
|
||||||
b stm32_main
|
b stm32_main
|
||||||
|
|
||||||
|
|
|
@ -66,8 +66,7 @@ Reset_Handler:
|
||||||
cmp r1, r2
|
cmp r1, r2
|
||||||
bcc .bss_zero_loop
|
bcc .bss_zero_loop
|
||||||
|
|
||||||
/* Initialise the system and jump to the main code */
|
/* Jump to the main code */
|
||||||
bl SystemInit
|
|
||||||
mov r0, r4
|
mov r0, r4
|
||||||
bl stm32_main
|
bl stm32_main
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,7 @@ Reset_Handler:
|
||||||
cmp r1, r2
|
cmp r1, r2
|
||||||
bcc .bss_zero_loop
|
bcc .bss_zero_loop
|
||||||
|
|
||||||
/* Initialise the system and jump to the main code */
|
/* Jump to the main code */
|
||||||
bl SystemInit
|
|
||||||
mov r0, r4
|
mov r0, r4
|
||||||
bl stm32_main
|
bl stm32_main
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue