diff options
author | Bossen WU <bossen.wu@stmicro.corp-partner.google.com> | 2021-05-18 17:21:56 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-06-30 08:36:48 +0000 |
commit | 59b286058cf184e1dfc8b8332aa8adc811d8221d (patch) | |
tree | caa7a17d679e52b6ed81de8eca011a7baccf7beb | |
parent | 55f7cce1dcc9441979426fbe4226b3308a5df60e (diff) | |
download | chrome-ec-59b286058cf184e1dfc8b8332aa8adc811d8221d.tar.gz |
stm32: add stm32l431 ec in chip/stm32 : system / clock / timer
stm32l431 related driver: system / clock / timer.
The stm32l476g-eval is the only board which would be impacted.
BRANCH=main
BUG=b:188117811
TEST=make buildall
Signed-off-by: Bossen WU <bossen.wu@stmicro.corp-partner.google.com>
Change-Id: Idf335005d8188f6959835aa40179a6bd771c5114
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2905165
Reviewed-by: Eric Yilun Lin <yllin@google.com>
-rw-r--r-- | chip/stm32/clock-l4.h | 110 | ||||
-rw-r--r-- | chip/stm32/clock-stm32l4.c | 779 | ||||
-rw-r--r-- | chip/stm32/config-stm32l431.h | 25 | ||||
-rw-r--r-- | chip/stm32/config_chip.h | 9 | ||||
-rw-r--r-- | chip/stm32/hwtimer32.c | 42 | ||||
-rw-r--r-- | chip/stm32/registers-stm32l4.h | 2092 | ||||
-rw-r--r-- | chip/stm32/system.c | 16 |
7 files changed, 2575 insertions, 498 deletions
diff --git a/chip/stm32/clock-l4.h b/chip/stm32/clock-l4.h new file mode 100644 index 0000000000..d237b84580 --- /dev/null +++ b/chip/stm32/clock-l4.h @@ -0,0 +1,110 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Clocks and power management settings */ + +#ifndef __CROS_EC_CLOCK_L4_H +#define __CROS_EC_CLOCK_L4_H + +#include "chipset.h" +#include "clock.h" +#include "common.h" +#include "console.h" +#include "cpu.h" +#include "hooks.h" +#include "hwtimer.h" +#include "registers.h" +#include "system.h" +#include "task.h" +#include "timer.h" +#include "util.h" + +#define STM32L4_RTC_REQ 1000000 +#define STM32L4_LSI_CLOCK 32000 + +/* Lock and unlock RTC write access */ +static inline void rtc_lock_regs(void) +{ + STM32_RTC_WPR = 0xff; +} +static inline void rtc_unlock_regs(void) +{ + STM32_RTC_WPR = 0xca; + STM32_RTC_WPR = 0x53; +} + +struct rtc_time_reg { + uint32_t rtc_ssr; /* subseconds */ + uint32_t rtc_tr; /* hours, minutes, seconds */ + uint32_t rtc_dr; /* years, months, dates, week days */ +}; + +/* Save the RTC alarm wake time */ +struct wake_time { + timestamp_t ts; + uint32_t rtc_alrmar; /* the value of register STM32_RTC_ALRMAR */ +}; + +/* Convert between RTC regs in BCD and seconds */ +uint32_t rtc_to_sec(const struct rtc_time_reg *rtc); + +/* Convert between seconds and RTC regs */ +void sec_to_rtc(uint32_t sec, struct rtc_time_reg *rtc); + +/* Calculate microseconds from rtc sub-second register. */ +uint32_t rtcss_to_us(uint32_t rtcss); + +/* Calculate rtc sub-second register value from microseconds. */ +uint32_t us_to_rtcss(uint32_t us); + +/* Return sub-10-sec time diff between two rtc readings */ +uint32_t get_rtc_diff(const struct rtc_time_reg *rtc0, + const struct rtc_time_reg *rtc1); + +/* Read RTC values */ +void rtc_read(struct rtc_time_reg *rtc); + +/* Set RTC value */ +void rtc_set(uint32_t sec); + +/* Set RTC wakeup, save alarm wakeup time when save_alarm != 0 */ +void set_rtc_alarm(uint32_t delay_s, uint32_t delay_us, + struct rtc_time_reg *rtc, uint8_t save_alarm); + +/* Clear RTC wakeup */ +void reset_rtc_alarm(struct rtc_time_reg *rtc); + +/* + * Return the remaining seconds before the RTC alarm goes off. + * Sub-seconds are ignored. Returns 0 if alarm is not set. + */ +uint32_t get_rtc_alarm(void); + +/* RTC init */ +void rtc_init(void); + +/* Init clock blocks and functionality */ +void clock_init(void); + +/* Init high speed clock config */ +void config_hispeed_clock(void); + +/* Get timer clock frequency (for STM32 only) */ +int clock_get_timer_freq(void); + +/* + * Return 1 if host_wake_time is nonzero and the saved host_wake_time + * is expired at a given time, ts. + */ +bool is_host_wake_alarm_expired(timestamp_t ts); + +/* Set RTC wakeup based on the value saved in host_wake_time */ +void restore_host_wake_alarm(void); + +#ifdef CONFIG_LOW_POWER_IDLE +void low_power_init(void); +#endif + +#endif /* __CROS_EC_CLOCK_L4_H */ diff --git a/chip/stm32/clock-stm32l4.c b/chip/stm32/clock-stm32l4.c index 1bba787779..540695deb1 100644 --- a/chip/stm32/clock-stm32l4.c +++ b/chip/stm32/clock-stm32l4.c @@ -7,18 +7,43 @@ #include "chipset.h" #include "clock.h" +#include "clock-l4.h" #include "common.h" #include "console.h" #include "cpu.h" #include "hooks.h" +#include "host_command.h" #include "registers.h" +#include "rtc.h" +#include "timer.h" +#include "uart.h" #include "util.h" +/* Console output macros */ +#define CPUTS(outstr) cputs(CC_CLOCK, outstr) +#define CPRINTS(format, args...) cprints(CC_CLOCK, format, ## args) + /* High-speed oscillator is 16 MHz */ #define STM32_HSI_CLOCK 16000000 /* Multi-speed oscillator is 4 MHz by default */ #define STM32_MSI_CLOCK 4000000 +/* Real Time Clock (RTC) */ + +#ifdef CONFIG_STM32_CLOCK_HSE_HZ +#define RTC_PREDIV_A 39 +#define RTC_FREQ ((STM32L4_RTC_REQ) / (RTC_PREDIV_A + 1)) /* Hz */ +#else /* from LSI clock */ +#define RTC_PREDIV_A 1 +#define RTC_FREQ (STM32L4_LSI_CLOCK / (RTC_PREDIV_A + 1)) /* Hz */ +#endif +#define RTC_PREDIV_S (RTC_FREQ - 1) +/* + * Scaling factor to ensure that the intermediate values computed from/to the + * RTC frequency are fitting in a 32-bit integer. + */ +#define SCALING 1000 + enum clock_osc { OSC_INIT = 0, /* Uninitialized */ OSC_HSI, /* High-speed internal oscillator */ @@ -71,6 +96,9 @@ static void clock_enable_osc(enum clock_osc osc) break; #ifdef STM32_HSE_CLOCK case OSC_HSE: +#ifdef STM32_HSE_BYP + STM32_RCC_CR |= STM32_RCC_CR_HSEBYP; +#endif ready = STM32_RCC_CR_HSERDY; on = STM32_RCC_CR_HSEON; break; @@ -92,6 +120,7 @@ static void clock_switch_osc(enum clock_osc osc) { uint32_t sw; uint32_t sws; + uint32_t val; switch (osc) { case OSC_HSI: @@ -115,9 +144,11 @@ static void clock_switch_osc(enum clock_osc osc) default: return; } - - STM32_RCC_CFGR = sw; - while ((STM32_RCC_CFGR & STM32_RCC_CFGR_SWS_MASK) != sws) + val = STM32_RCC_CFGR; + val &= ~STM32_RCC_CFGR_SW; + val |= sw; + STM32_RCC_CFGR = val; + while ((STM32_RCC_CFGR & STM32_RCC_CFGR_SWS_MSK) != sws) ; } @@ -135,8 +166,57 @@ static int stm32_configure_pll(enum clock_osc osc, uint8_t m, uint8_t n, uint8_t r) { uint32_t val; + bool pll_unchanged; int f; + val = STM32_RCC_PLLCFGR; + pll_unchanged = true; + + if (osc == OSC_HSI) + if ((val & STM32_RCC_PLLCFGR_PLLSRC_MSK) != + STM32_RCC_PLLCFGR_PLLSRC_HSI) + pll_unchanged = false; + + if (osc == OSC_MSI) + if ((val & STM32_RCC_PLLCFGR_PLLSRC_MSK) != + STM32_RCC_PLLCFGR_PLLSRC_MSI) + pll_unchanged = false; + +#ifdef STM32_HSE_CLOCK + if (osc == OSC_HSE) + if ((val & STM32_RCC_PLLCFGR_PLLSRC_MSK) != + STM32_RCC_PLLCFGR_PLLSRC_HSE) + pll_unchanged = false; +#endif + + if ((val & STM32_RCC_PLLCFGR_PLLM_MSK) != + ((m - 1) << STM32_RCC_PLLCFGR_PLLM_POS)) + pll_unchanged = false; + + if ((val & STM32_RCC_PLLCFGR_PLLN_MSK) != + (n << STM32_RCC_PLLCFGR_PLLN_POS)) + pll_unchanged = false; + + if ((val & STM32_RCC_PLLCFGR_PLLR_MSK) != + (((r >> 1) - 1) << STM32_RCC_PLLCFGR_PLLR_POS)) + pll_unchanged = false; + + if (pll_unchanged == true) { + if (osc == OSC_HSI) + f = STM32_HSI_CLOCK; + else + f = STM32_MSI_CLOCK; + + if (!(STM32_RCC_CR & STM32_RCC_CR_PLLRDY)) { + STM32_RCC_CR |= STM32_RCC_CR_PLLON; + STM32_RCC_PLLCFGR |= STM32_RCC_PLLCFGR_PLLREN; + + while ((STM32_RCC_CR & STM32_RCC_CR_PLLRDY) == 0) + ; + } + /* (f * n) shouldn't overflow based on their max values */ + return (f * n / m / r); + } /* 1 */ STM32_RCC_CR &= ~STM32_RCC_CR_PLLON; @@ -147,7 +227,7 @@ static int stm32_configure_pll(enum clock_osc osc, /* 3 */ val = STM32_RCC_PLLCFGR; - val &= ~STM32_RCC_PLLCFGR_PLLSRC_MASK; + val &= ~STM32_RCC_PLLCFGR_PLLSRC_MSK; switch (osc) { case OSC_HSI: val |= STM32_RCC_PLLCFGR_PLLSRC_HSI; @@ -168,27 +248,27 @@ static int stm32_configure_pll(enum clock_osc osc, } ASSERT(m > 0 && m < 9); - val &= ~STM32_RCC_PLLCFGR_PLLM_MASK; - val |= (m - 1) << STM32_RCC_PLLCFGR_PLLM_SHIFT; + val &= ~STM32_RCC_PLLCFGR_PLLM_MSK; + val |= (m - 1) << STM32_RCC_PLLCFGR_PLLM_POS; /* Max and min values are from TRM */ ASSERT(n > 7 && n < 87); - val &= ~STM32_RCC_PLLCFGR_PLLN_MASK; - val |= n << STM32_RCC_PLLCFGR_PLLN_SHIFT; + val &= ~STM32_RCC_PLLCFGR_PLLN_MSK; + val |= n << STM32_RCC_PLLCFGR_PLLN_POS; - val &= ~STM32_RCC_PLLCFGR_PLLR_MASK; + val &= ~STM32_RCC_PLLCFGR_PLLR_MSK; switch (r) { case 2: - val |= 0 << STM32_RCC_PLLCFGR_PLLR_SHIFT; + val |= 0 << STM32_RCC_PLLCFGR_PLLR_POS; break; case 4: - val |= 1 << STM32_RCC_PLLCFGR_PLLR_SHIFT; + val |= 1 << STM32_RCC_PLLCFGR_PLLR_POS; break; case 6: - val |= 2 << STM32_RCC_PLLCFGR_PLLR_SHIFT; + val |= 2 << STM32_RCC_PLLCFGR_PLLR_POS; break; case 8: - val |= 3 << STM32_RCC_PLLCFGR_PLLR_SHIFT; + val |= 3 << STM32_RCC_PLLCFGR_PLLR_POS; break; default: return -1; @@ -201,7 +281,7 @@ static int stm32_configure_pll(enum clock_osc osc, /* 5 */ val = STM32_RCC_PLLCFGR; - val |= 1 << STM32_RCC_PLLCFGR_PLLREN_SHIFT; + val |= 1 << STM32_RCC_PLLCFGR_PLLREN_POS; STM32_RCC_PLLCFGR = val; /* (f * n) shouldn't overflow based on their max values */ @@ -229,8 +309,8 @@ static void clock_set_osc(enum clock_osc osc, enum clock_osc pll_osc) /* Ensure that HSI is ON */ clock_enable_osc(osc); - /* Disable LPSDSR */ - STM32_PWR_CR &= ~STM32_PWR_CR_LPSDSR; + /* Set HSI as system clock after exiting stop mode */ + STM32_RCC_CFGR |= STM32_RCC_CFGR_STOPWUCK; /* Switch to HSI */ clock_switch_osc(osc); @@ -243,21 +323,23 @@ static void clock_set_osc(enum clock_osc osc, enum clock_osc pll_osc) case OSC_MSI: /* Switch to MSI @ 1MHz */ - STM32_RCC_ICSCR = - (STM32_RCC_ICSCR & ~STM32_RCC_ICSCR_MSIRANGE_MASK) | + STM32_RCC_CR = + (STM32_RCC_CR & ~STM32_RCC_ICSCR_MSIRANGE_MASK) | STM32_RCC_ICSCR_MSIRANGE_1MHZ; /* Ensure that MSI is ON */ clock_enable_osc(osc); + /* + * Set MSI as system clock after exiting stop mode + */ + STM32_RCC_CFGR &= ~STM32_RCC_CFGR_STOPWUCK; + /* Switch to MSI */ clock_switch_osc(osc); /* Disable HSI */ STM32_RCC_CR &= ~STM32_RCC_CR_HSION; - /* Enable LPSDSR */ - STM32_PWR_CR |= STM32_PWR_CR_LPSDSR; - freq = STM32_MSI_CLOCK; break; @@ -279,20 +361,76 @@ static void clock_set_osc(enum clock_osc osc, enum clock_osc pll_osc) #endif case OSC_PLL: /* Ensure that source clock is stable */ - clock_enable_osc(pll_osc); - - /* Configure PLLCFGR */ - freq = stm32_configure_pll(pll_osc, STM32_PLLM, - STM32_PLLN, STM32_PLLR); + if (pll_osc == OSC_INIT) { + if ((STM32_RCC_CFGR & STM32_RCC_CFGR_SWS_MSK) != + STM32_RCC_CFGR_SWS_PLL) { + STM32_RCC_CFGR |= STM32_RCC_CFGR_STOPWUCK; + clock_enable_osc(OSC_HSI); + freq = stm32_configure_pll(OSC_HSI, STM32_PLLM, + STM32_PLLN, + STM32_PLLR); + } else { + /* already set PLL, skip */ + freq = STM32_HSI_CLOCK * STM32_PLLN / + STM32_PLLM / STM32_PLLR; + break; + } + } else { + clock_enable_osc(pll_osc); + /* Configure PLLCFGR */ + freq = stm32_configure_pll(pll_osc, STM32_PLLM, + STM32_PLLN, STM32_PLLR); + } ASSERT(freq > 0); - /* Adjust flash latency as instructed in TRM */ - val = STM32_FLASH_ACR; - val &= ~STM32_FLASH_ACR_LATENCY_MASK; - /* Flash 4 wait state. TODO: Should depend on freq. */ - val |= 4 << STM32_FLASH_ACR_LATENCY_SHIFT; - STM32_FLASH_ACR = val; - while (STM32_FLASH_ACR != val) + /* Change to Range 1 if Freq > 26MHz */ + if (freq > 26000000U) { + /* Set VCO range 1 */ + val = STM32_RCC_CR; + val &= ~PWR_CR1_VOS_MSK; + val |= PWR_CR1_VOS_0; + STM32_RCC_CR = val; + + /* + * Set Flash latency according to frequency + */ + val = STM32_FLASH_ACR; + val &= ~STM32_FLASH_ACR_LATENCY_MASK; + if (freq <= 16000000U) { + val = val; + } else if (freq <= 32000000U) { + val |= 1; + } else if (freq <= 48000000U) { + val |= 2; + } else if (freq <= 64000000U) { + val |= 3; + } else if (freq <= 80000000U) { + val |= 4; + } else { + val |= 4; + CPUTS("Incorrect Frequency setting in VOS1!\n"); + } + STM32_FLASH_ACR = val; + } else { + val = STM32_FLASH_ACR; + val &= ~STM32_FLASH_ACR_LATENCY_MASK; + + if (freq <= 6000000U) { + val = val; + } else if (freq <= 12000000U) { + val |= 1; + } else if (freq <= 18000000U) { + val |= 2; + } else if (freq <= 26000000U) { + val |= 3; + } else { + val |= 4; + CPUTS("Incorrect Frequency setting in VOS2!\n"); + } + STM32_FLASH_ACR = val; + } + + while (val != STM32_FLASH_ACR) ; /* Switch to PLL */ @@ -324,24 +462,114 @@ void clock_enable_module(enum module_id module, int enable) new_mask = clock_mask & ~BIT(module); /* Only change clock if needed */ - if ((!!new_mask) != (!!clock_mask)) { + if (new_mask != clock_mask) { + if (module == MODULE_ADC) { + STM32_RCC_APB2ENR |= STM32_RCC_PB2_SYSCFGEN; + STM32_RCC_APB1ENR1 |= STM32_RCC_PB1_PWREN; - /* Flush UART before switching clock speed */ - cflush(); - - clock_set_osc(new_mask ? OSC_HSI : OSC_MSI, OSC_INIT); + /* ADC select bit 28/29 */ + STM32_RCC_CCIPR &= ~STM32_RCC_CCIPR_ADCSEL_MSK; + STM32_RCC_CCIPR |= (STM32_RCC_CCIPR_ADCSEL_0 | + STM32_RCC_CCIPR_ADCSEL_1); + /* ADC clock enable */ + if (enable) + STM32_RCC_AHB2ENR |= STM32_RCC_HB2_ADC1; + else + STM32_RCC_AHB2ENR &= ~STM32_RCC_HB2_ADC1; + } else if (module == MODULE_SPI_FLASH) { + if (enable) + STM32_RCC_APB1ENR1 |= STM32_RCC_PB1_SPI2; + else + STM32_RCC_APB1ENR1 &= ~STM32_RCC_PB1_SPI2; + } else if (module == MODULE_SPI || + module == MODULE_SPI_CONTROLLER) { + if (enable) + STM32_RCC_APB2ENR |= STM32_RCC_APB2ENR_SPI1EN; + else if ((new_mask & (BIT(MODULE_SPI) | + BIT(MODULE_SPI_CONTROLLER))) == 0) + STM32_RCC_APB2ENR &= ~STM32_RCC_APB2ENR_SPI1EN; + } } clock_mask = new_mask; } +void rtc_init(void) +{ + /* Enable RTC Alarm in EXTI */ + STM32_EXTI_RTSR |= EXTI_RTC_ALR_EVENT; + task_enable_irq(STM32_IRQ_RTC_ALARM); + + /* RTC was initilized, avoid initialization again */ + if (STM32_RTC_ISR & STM32_RTC_ISR_INITS) + return; + + rtc_unlock_regs(); + + /* Enter RTC initialize mode */ + STM32_RTC_ISR |= STM32_RTC_ISR_INIT; + while (!(STM32_RTC_ISR & STM32_RTC_ISR_INITF)) + ; + + /* Set clock prescalars */ + STM32_RTC_PRER = (RTC_PREDIV_A << 16) | RTC_PREDIV_S; + + /* Start RTC timer */ + STM32_RTC_ISR &= ~STM32_RTC_ISR_INIT; + while (STM32_RTC_ISR & STM32_RTC_ISR_INITF) + ; + + /* Enable RTC alarm interrupt */ + STM32_RTC_CR |= STM32_RTC_CR_ALRAIE | STM32_RTC_CR_BYPSHAD; + + rtc_lock_regs(); +} + +#if defined(CONFIG_CMD_RTC) || defined(CONFIG_HOSTCMD_RTC) +void rtc_set(uint32_t sec) +{ + struct rtc_time_reg rtc; + + sec_to_rtc(sec, &rtc); + rtc_unlock_regs(); + + /* Disable alarm */ + STM32_RTC_CR &= ~STM32_RTC_CR_ALRAE; + + /* Enter RTC initialize mode */ + STM32_RTC_ISR |= STM32_RTC_ISR_INIT; + while (!(STM32_RTC_ISR & STM32_RTC_ISR_INITF)) + ; + + /* Set clock prescalars */ + STM32_RTC_PRER = (RTC_PREDIV_A << 16) | RTC_PREDIV_S; + + STM32_RTC_TR = rtc.rtc_tr; + STM32_RTC_DR = rtc.rtc_dr; + /* Start RTC timer */ + STM32_RTC_ISR &= ~STM32_RTC_ISR_INIT; + + rtc_lock_regs(); +} +#endif + + void clock_init(void) { #ifdef STM32_HSE_CLOCK clock_set_osc(OSC_PLL, OSC_HSE); #else +#ifdef STM32_USE_PLL + clock_set_osc(OSC_PLL, OSC_INIT); +#else clock_set_osc(OSC_HSI, OSC_INIT); #endif +#endif + +#ifdef CONFIG_LOW_POWER_IDLE + low_power_init(); + rtc_init(); +#endif } static void clock_chipset_startup(void) @@ -390,3 +618,478 @@ DECLARE_CONSOLE_COMMAND(clock, command_clock, #endif , "Set clock frequency"); + +uint32_t rtcss_to_us(uint32_t rtcss) +{ + return ((RTC_PREDIV_S - (rtcss & 0x7FFF)) * (SECOND / SCALING) / + (RTC_FREQ / SCALING)); +} + +uint32_t us_to_rtcss(uint32_t us) +{ + return (RTC_PREDIV_S - + (us * (RTC_FREQ / SCALING) / (SECOND / SCALING))); +} + + +/* Convert decimal to BCD */ +static uint8_t u8_to_bcd(uint8_t val) +{ + /* Fast division by 10 (when lacking HW div) */ + uint32_t quot = ((uint32_t)val * 0xCCCD) >> 19; + uint32_t rem = val - quot * 10; + + return rem | (quot << 4); +} + +/* Convert between RTC regs in BCD and seconds */ +static uint32_t rtc_tr_to_sec(uint32_t rtc_tr) +{ + uint32_t sec; + + /* convert the hours field */ + sec = (((rtc_tr & RTC_TR_HT) >> RTC_TR_HT_POS) * 10 + + ((rtc_tr & RTC_TR_HU) >> RTC_TR_HU_POS)) * 3600; + /* convert the minutes field */ + sec += (((rtc_tr & RTC_TR_MNT) >> RTC_TR_MNT_POS) * 10 + + ((rtc_tr & RTC_TR_MNU) >> RTC_TR_MNU_POS)) * 60; + /* convert the seconds field */ + sec += ((rtc_tr & RTC_TR_ST) >> RTC_TR_ST_POS) * 10 + + (rtc_tr & RTC_TR_SU); + return sec; +} + +static uint32_t sec_to_rtc_tr(uint32_t sec) +{ + uint32_t rtc_tr; + uint8_t hour; + uint8_t min; + + sec %= SECS_PER_DAY; + /* convert the hours field */ + hour = sec / 3600; + rtc_tr = u8_to_bcd(hour) << 16; + /* convert the minutes field */ + sec -= hour * 3600; + min = sec / 60; + rtc_tr |= u8_to_bcd(min) << 8; + /* convert the seconds field */ + sec -= min * 60; + rtc_tr |= u8_to_bcd(sec); + + return rtc_tr; +} + +/* Register setup before RTC alarm is allowed for update */ +static void pre_work_set_rtc_alarm(void) +{ + rtc_unlock_regs(); + + /* Make sure alarm is disabled */ + STM32_RTC_CR &= ~STM32_RTC_CR_ALRAE; + while (!(STM32_RTC_ISR & STM32_RTC_ISR_ALRAWF)) + ; + STM32_RTC_ISR &= ~STM32_RTC_ISR_ALRAF; + STM32_EXTI_PR = BIT(18); +} + +/* Register setup after RTC alarm is updated */ +static void post_work_set_rtc_alarm(void) +{ + /* Enable alarm and alarm interrupt */ + STM32_EXTI_IMR |= BIT(18); + STM32_EXTI_RTSR |= BIT(18); + STM32_RTC_CR |= (STM32_RTC_CR_ALRAE); + + rtc_lock_regs(); +} + +#ifdef CONFIG_HOSTCMD_RTC +static struct wake_time host_wake_time; + +bool is_host_wake_alarm_expired(timestamp_t ts) +{ + return host_wake_time.ts.val && + timestamp_expired(host_wake_time.ts, &ts); +} + +void restore_host_wake_alarm(void) +{ + if (!host_wake_time.ts.val) + return; + + pre_work_set_rtc_alarm(); + + /* Set alarm time */ + STM32_RTC_ALRMAR = host_wake_time.rtc_alrmar; + + post_work_set_rtc_alarm(); +} + +static uint32_t rtc_dr_to_sec(uint32_t rtc_dr) +{ + struct calendar_date time; + uint32_t sec; + + time.year = (((rtc_dr & 0xf00000) >> 20) * 10 + + ((rtc_dr & 0xf0000) >> 16)); + time.month = (((rtc_dr & 0x1000) >> 12) * 10 + + ((rtc_dr & 0xf00) >> 8)); + time.day = ((rtc_dr & 0x30) >> 4) * 10 + (rtc_dr & 0xf); + + sec = date_to_sec(time); + + return sec; +} + +static uint32_t sec_to_rtc_dr(uint32_t sec) +{ + struct calendar_date time; + uint32_t rtc_dr; + + time = sec_to_date(sec); + + rtc_dr = u8_to_bcd(time.year) << 16; + rtc_dr |= u8_to_bcd(time.month) << 8; + rtc_dr |= u8_to_bcd(time.day); + + return rtc_dr; +} +#endif + +uint32_t rtc_to_sec(const struct rtc_time_reg *rtc) +{ + uint32_t sec = 0; + +#ifdef CONFIG_HOSTCMD_RTC + sec = rtc_dr_to_sec(rtc->rtc_dr); +#endif + return sec + (rtcss_to_us(rtc->rtc_ssr) / SECOND) + + rtc_tr_to_sec(rtc->rtc_tr); +} + +void sec_to_rtc(uint32_t sec, struct rtc_time_reg *rtc) +{ + rtc->rtc_dr = 0; +#ifdef CONFIG_HOSTCMD_RTC + rtc->rtc_dr = sec_to_rtc_dr(sec); +#endif + rtc->rtc_tr = sec_to_rtc_tr(sec); + rtc->rtc_ssr = 0; +} + +/* Return sub-10-sec time diff between two rtc readings + * + * Note: this function assumes rtc0 was sampled before rtc1. + * Additionally, this function only looks at the difference mod 10 + * seconds. + */ +uint32_t get_rtc_diff(const struct rtc_time_reg *rtc0, + const struct rtc_time_reg *rtc1) +{ + uint32_t rtc0_val, rtc1_val, diff; + + rtc0_val = (rtc0->rtc_tr & RTC_TR_SU) * SECOND + + rtcss_to_us(rtc0->rtc_ssr); + rtc1_val = (rtc1->rtc_tr & RTC_TR_SU) * SECOND + + rtcss_to_us(rtc1->rtc_ssr); + diff = rtc1_val; + if (rtc1_val < rtc0_val) { + /* rtc_ssr has wrapped, since we assume rtc0 < rtc1, add + * 10 seconds to get the correct value + */ + diff += 10 * SECOND; + } + diff -= rtc0_val; + return diff; +} + +void rtc_read(struct rtc_time_reg *rtc) +{ + /* + * Read current time synchronously. Each register must be read + * twice with identical values because glitches may occur for reads + * close to the RTCCLK edge. + */ + do { + rtc->rtc_dr = STM32_RTC_DR; + + do { + rtc->rtc_tr = STM32_RTC_TR; + + do { + rtc->rtc_ssr = STM32_RTC_SSR; + } while (rtc->rtc_ssr != STM32_RTC_SSR); + + } while (rtc->rtc_tr != STM32_RTC_TR); + + } while (rtc->rtc_dr != STM32_RTC_DR); +} + +void set_rtc_alarm(uint32_t delay_s, uint32_t delay_us, + struct rtc_time_reg *rtc, uint8_t save_alarm) +{ + uint32_t alarm_sec = 0; + uint32_t alarm_us = 0; + + if (delay_s == EC_RTC_ALARM_CLEAR && !delay_us) { + reset_rtc_alarm(rtc); + return; + } + + /* Alarm timeout must be within 1 day (86400 seconds) */ + ASSERT((delay_s + delay_us / SECOND) < SECS_PER_DAY); + + pre_work_set_rtc_alarm(); + rtc_read(rtc); + + /* Calculate alarm time */ + alarm_sec = rtc_tr_to_sec(rtc->rtc_tr) + delay_s; + + if (delay_us) { + alarm_us = rtcss_to_us(rtc->rtc_ssr) + delay_us; + alarm_sec = alarm_sec + alarm_us / SECOND; + alarm_us = alarm_us % SECOND; + } + + /* + * If seconds is greater than 1 day, subtract by 1 day to deal with + * 24-hour rollover. + */ + if (alarm_sec >= SECS_PER_DAY) + alarm_sec -= SECS_PER_DAY; + + /* + * Set alarm time in seconds and check for match on + * hours, minutes, and seconds. + */ + STM32_RTC_ALRMAR = sec_to_rtc_tr(alarm_sec) | 0xc0000000; + + /* + * Set alarm time in subseconds and check for match on subseconds. + * If the caller doesn't specify subsecond delay (e.g. host command), + * just align the alarm time to second. + */ + STM32_RTC_ALRMASSR = delay_us ? + (us_to_rtcss(alarm_us) | 0x0f000000) : 0; + +#ifdef CONFIG_HOSTCMD_RTC + /* + * If alarm is set by the host, preserve the wake time timestamp + * and alarm registers. + */ + if (save_alarm) { + host_wake_time.ts.val = delay_s * SECOND + get_time().val; + host_wake_time.rtc_alrmar = STM32_RTC_ALRMAR; + } +#endif + post_work_set_rtc_alarm(); +} + +uint32_t get_rtc_alarm(void) +{ + struct rtc_time_reg now; + uint32_t now_sec; + uint32_t alarm_sec; + + if (!(STM32_RTC_CR & STM32_RTC_CR_ALRAE)) + return 0; + + rtc_read(&now); + + now_sec = rtc_tr_to_sec(now.rtc_tr); + alarm_sec = rtc_tr_to_sec(STM32_RTC_ALRMAR & 0x3fffff); + + return ((alarm_sec < now_sec) ? SECS_PER_DAY : 0) + + (alarm_sec - now_sec); +} + +void reset_rtc_alarm(struct rtc_time_reg *rtc) +{ + rtc_unlock_regs(); + + /* Disable alarm */ + STM32_RTC_CR &= ~STM32_RTC_CR_ALRAE; + STM32_RTC_ISR &= ~STM32_RTC_ISR_ALRAF; + + /* Disable RTC alarm interrupt */ + STM32_EXTI_IMR &= ~BIT(18); + STM32_EXTI_PR = BIT(18); + + /* Clear the pending RTC alarm IRQ in NVIC */ + task_clear_pending_irq(STM32_IRQ_RTC_ALARM); + + /* Read current time */ + rtc_read(rtc); + + rtc_lock_regs(); +} + +#ifdef CONFIG_HOSTCMD_RTC +static void set_rtc_host_event(void) +{ + host_set_single_event(EC_HOST_EVENT_RTC); +} +DECLARE_DEFERRED(set_rtc_host_event); +#endif + +test_mockable_static +void __rtc_alarm_irq(void) +{ + struct rtc_time_reg rtc; + + reset_rtc_alarm(&rtc); + +#ifdef CONFIG_HOSTCMD_RTC + /* Wake up the host if there is a saved rtc wake alarm. */ + if (host_wake_time.ts.val) { + host_wake_time.ts.val = 0; + hook_call_deferred(&set_rtc_host_event_data, 0); + } +#endif +} +DECLARE_IRQ(STM32_IRQ_RTC_ALARM, __rtc_alarm_irq, 1); + + +void print_system_rtc(enum console_channel ch) +{ + uint32_t sec; + struct rtc_time_reg rtc; + + rtc_read(&rtc); + sec = rtc_to_sec(&rtc); + + cprintf(ch, "RTC: 0x%08x (%d.00 s)\n", sec, sec); +} + + +#ifdef CONFIG_LOW_POWER_IDLE +/* Low power idle statistics */ +static int idle_sleep_cnt; +static int idle_dsleep_cnt; +static uint64_t idle_dsleep_time_us; +static int dsleep_recovery_margin_us = 1000000; + +/* STOP_MODE_LATENCY: delay to wake up from STOP mode with main regulator off */ +#define STOP_MODE_LATENCY 50 /* us */ +/* PLL_LOCK_LATENCY: delay to switch from HSI to PLL */ +#define PLL_LOCK_LATENCY 150 /* us */ +/* + * SET_RTC_MATCH_DELAY: max time to set RTC match alarm. If we set the alarm + * in the past, it will never wake up and cause a watchdog. + */ +#define SET_RTC_MATCH_DELAY 120 /* us */ + + +void low_power_init(void) +{ + /* Enter stop1 mode */ + uint32_t val; + + val = STM32_PWR_CR1; + val &= ~PWR_CR1_LPMS_MSK; + val |= PWR_CR1_LPMS_STOP1; + STM32_PWR_CR1 = val; +} + +void clock_refresh_console_in_use(void) +{ +} + +void __idle(void) +{ + timestamp_t t0; + uint32_t rtc_diff; + int next_delay, margin_us; + struct rtc_time_reg rtc0, rtc1; + + while (1) { + asm volatile("cpsid i"); + + t0 = get_time(); + next_delay = __hw_clock_event_get() - t0.le.lo; + + if (DEEP_SLEEP_ALLOWED && + (next_delay > (STOP_MODE_LATENCY + PLL_LOCK_LATENCY + + SET_RTC_MATCH_DELAY))) { + /* Deep-sleep in STOP mode */ + idle_dsleep_cnt++; + + uart_enable_wakeup(1); + + /* Set deep sleep bit */ + CPU_SCB_SYSCTRL |= 0x4; + + set_rtc_alarm(0, next_delay - STOP_MODE_LATENCY + - PLL_LOCK_LATENCY, + &rtc0, 0); + + + /* ensure outstanding memory transactions complete */ + asm volatile("dsb"); + + asm("wfi"); + + CPU_SCB_SYSCTRL &= ~0x4; + + /* turn on PLL and wait until it's ready */ + STM32_RCC_APB1ENR1 |= STM32_RCC_APB1ENR1_PWREN; + clock_wait_bus_cycles(BUS_APB, 2); + + stm32_configure_pll(OSC_HSI, STM32_PLLM, + STM32_PLLN, STM32_PLLR); + + /* Switch to PLL */ + clock_switch_osc(OSC_PLL); + + uart_enable_wakeup(0); + + /* Fast forward timer according to RTC counter */ + reset_rtc_alarm(&rtc1); + rtc_diff = get_rtc_diff(&rtc0, &rtc1); + t0.val = t0.val + rtc_diff; + force_time(t0); + + /* Record time spent in deep sleep. */ + idle_dsleep_time_us += rtc_diff; + + /* Calculate how close we were to missing deadline */ + margin_us = next_delay - rtc_diff; + if (margin_us < 0) + /* Use CPUTS to save stack space */ + CPUTS("Idle overslept!\n"); + + /* Record the closest to missing a deadline. */ + if (margin_us < dsleep_recovery_margin_us) + dsleep_recovery_margin_us = margin_us; + } else { + idle_sleep_cnt++; + + /* Normal idle : only CPU clock stopped */ + asm("wfi"); + } + asm volatile("cpsie i"); + } +} + +/*****************************************************************************/ +/* Console commands */ +/* Print low power idle statistics. */ +static int command_idle_stats(int argc, char **argv) +{ + timestamp_t ts = get_time(); + + ccprintf("Num idle calls that sleep: %d\n", idle_sleep_cnt); + ccprintf("Num idle calls that deep-sleep: %d\n", idle_dsleep_cnt); + ccprintf("Time spent in deep-sleep: %.6llus\n", + idle_dsleep_time_us); + ccprintf("Total time on: %.6llus\n", ts.val); + ccprintf("Deep-sleep closest to wake deadline: %dus\n", + dsleep_recovery_margin_us); + + return EC_SUCCESS; +} +DECLARE_CONSOLE_COMMAND(idlestats, command_idle_stats, + "", + "Print last idle stats"); +#endif /* CONFIG_LOW_POWER_IDLE */ diff --git a/chip/stm32/config-stm32l431.h b/chip/stm32/config-stm32l431.h new file mode 100644 index 0000000000..fb2eff77ba --- /dev/null +++ b/chip/stm32/config-stm32l431.h @@ -0,0 +1,25 @@ +/* Copyright 2021 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Memory mapping */ +#define CONFIG_FLASH_SIZE_BYTES 0x00040000 /* 256 kB */ +#define CONFIG_FLASH_BANK_SIZE \ + 0x800 /* 2 kB. NOTE: BANK in chrome-ec means page */ +#define CONFIG_FLASH_ERASE_SIZE 0x800 /* 2 KB */ +#define CONFIG_FLASH_WRITE_SIZE 0x8 /* 64 bits */ + +/* Ideal write size in page-mode */ +#define CONFIG_FLASH_WRITE_IDEAL_SIZE 0x100 /* 256 (32 double words) */ + +/* + * SRAM1 (48kB) at 0x20000000 + * SRAM2 (16kB) at 0x10000000 (and aliased at 0x2000C000) + * so they are contiguous. + */ +#define CONFIG_RAM_BASE 0x20000000 +#define CONFIG_RAM_SIZE 0x00010000 /* 64 kB */ + +/* Number of IRQ vectors on the NVIC */ +#define CONFIG_IRQ_COUNT 82 diff --git a/chip/stm32/config_chip.h b/chip/stm32/config_chip.h index 816737731f..8b34f2fc44 100644 --- a/chip/stm32/config_chip.h +++ b/chip/stm32/config_chip.h @@ -16,6 +16,13 @@ #else /* CPU core BFD configuration */ #include "core/cortex-m/config_core.h" +#define STM32_IRQ_EXTI0_PRIORITY 1 +#define STM32_IRQ_EXTI1_PRIORITY 1 +#define STM32_IRQ_EXTI2_PRIORITY 1 +#define STM32_IRQ_EXTI3_PRIORITY 1 +#define STM32_IRQ_EXTI4_PRIORITY 1 +#define STM32_IRQ_EXTI9_5_PRIORITY 1 +#define STM32_IRQ_EXTI15_10_PRIORITY 1 #endif /* Default to UART 1 for EC console */ @@ -63,6 +70,8 @@ #include "config-stm32g41xb.h" #elif defined(CHIP_VARIANT_STM32G473XC) #include "config-stm32g473xc.h" +#elif defined(CHIP_VARIANT_STM32L431X) +#include "config-stm32l431.h" #else #error "Unsupported chip variant" #endif diff --git a/chip/stm32/hwtimer32.c b/chip/stm32/hwtimer32.c index a643ccc134..963fa44e51 100644 --- a/chip/stm32/hwtimer32.c +++ b/chip/stm32/hwtimer32.c @@ -127,10 +127,22 @@ defined(CHIP_FAMILY_STM32H7) else if (n >= 15 && n <= 17) mask = STM32_RCC_APB2ENR_TIM15 << (n - 15); #endif +#if defined(CHIP_FAMILY_STM32L4) + if (n >= 2 && n <= 7) { + reg = &STM32_RCC_APB1ENR1; + mask = STM32_RCC_PB1_TIM2 << (n - 2); + } else if (n == 1 || n == 15 || n == 16) { + reg = &STM32_RCC_APB2ENR; + mask = (n == 1) ? STM32_RCC_APB2ENR_TIM1EN : + (n == 15) ? STM32_RCC_APB2ENR_TIM15EN : + STM32_RCC_APB2ENR_TIM16EN; + } +#else if (n >= 2 && n <= 7) { reg = &STM32_RCC_APB1ENR; mask = STM32_RCC_PB1_TIM2 << (n - 2); } +#endif if (!mask) return; @@ -258,6 +270,8 @@ const struct irq_priority __keep IRQ_PRIORITY(IRQ_WD) void hwtimer_setup_watchdog(void) { + int freq; + /* Enable clock */ __hw_timer_enable_clock(TIM_WATCHDOG, 1); /* Delay 1 APB clock cycle after the clock is enabled */ @@ -272,13 +286,31 @@ void hwtimer_setup_watchdog(void) STM32_TIM_CR2(TIM_WATCHDOG) = 0x0000; STM32_TIM_SMCR(TIM_WATCHDOG) = 0x0000; - /* AUto-reload value */ - STM32_TIM_ARR(TIM_WATCHDOG) = CONFIG_AUX_TIMER_PERIOD_MS; + /* + * all timers has 16-bit prescale. + * For clock freq > 64MHz, 16bit prescale cannot meet 1KHz. + * set prescale as 10KHz and 10 times arr value instead. + * For clock freq < 64MHz, timer runs at 1KHz. + */ + freq = clock_get_timer_freq(); - /* Update prescaler: watchdog timer runs at 1KHz */ - STM32_TIM_PSC(TIM_WATCHDOG) = - (clock_get_timer_freq() / SECOND * MSEC) - 1; + if (freq <= 64000000 || !IS_ENABLED(CHIP_FAMILY_STM32L4)) { + /* AUto-reload value */ + STM32_TIM_ARR(TIM_WATCHDOG) = CONFIG_AUX_TIMER_PERIOD_MS; + + /* Update prescaler: watchdog timer runs at 1KHz */ + STM32_TIM_PSC(TIM_WATCHDOG) = + (freq / SECOND * MSEC) - 1; + } +#ifdef CHIP_FAMILY_STM32L4 + else { + /* 10 times ARR value with 10KHz timer */ + STM32_TIM_ARR(TIM_WATCHDOG) = CONFIG_AUX_TIMER_PERIOD_MS * 10; + /* Update prescaler: watchdog timer runs at 10KHz */ + STM32_TIM_PSC(TIM_WATCHDOG) = (freq / SECOND / 10 * MSEC) - 1; + } +#endif /* Reload the pre-scaler */ STM32_TIM_EGR(TIM_WATCHDOG) = 0x0001; diff --git a/chip/stm32/registers-stm32l4.h b/chip/stm32/registers-stm32l4.h index d8bbf2f60d..29965fe2ee 100644 --- a/chip/stm32/registers-stm32l4.h +++ b/chip/stm32/registers-stm32l4.h @@ -19,239 +19,255 @@ #error "This header file should not be included directly." #endif -/* --- IRQ numbers --- */ -#define STM32_IRQ_WWDG 0 -#define STM32_IRQ_PVD 1 -#define STM32_IRQ_TAMPER_STAMP 2 -#define STM32_IRQ_RTC_WAKEUP 3 -#define STM32_IRQ_FLASH 4 -#define STM32_IRQ_RCC 5 -#define STM32_IRQ_EXTI0 6 -#define STM32_IRQ_EXTI1 7 -#define STM32_IRQ_EXTI2 8 -#define STM32_IRQ_EXTI3 9 -#define STM32_IRQ_EXTI4 10 -#define STM32_IRQ_DMA_CHANNEL_1 11 -#define STM32_IRQ_DMA_CHANNEL_2 12 -#define STM32_IRQ_DMA_CHANNEL_3 13 -#define STM32_IRQ_DMA_CHANNEL_4 14 -#define STM32_IRQ_DMA_CHANNEL_5 15 -#define STM32_IRQ_DMA_CHANNEL_6 16 -#define STM32_IRQ_DMA_CHANNEL_7 17 -#define STM32_IRQ_USB_HP 19 -#define STM32_IRQ_USB_LP 20 - -#define STM32_IRQ_ADC1 18 /* STM32L4 only */ -#define STM32_IRQ_CAN_TX 19 /* STM32F373 only */ -#define STM32_IRQ_USB_LP_CAN_RX 20 /* STM32F373 only */ -#define STM32_IRQ_DAC 21 -#define STM32_IRQ_CAN_RX1 21 /* STM32F373 only */ - -#define STM32_IRQ_COMP 22 - -#define STM32_IRQ_CAN_SCE 22 /* STM32F373 only */ -#define STM32_IRQ_EXTI9_5 23 -#define STM32_IRQ_LCD 24 /* STM32L15X only */ -#define STM32_IRQ_TIM15 24 /* STM32F373 only */ -#define STM32_IRQ_TIM9 25 /* STM32L15X only */ -#define STM32_IRQ_TIM16 25 /* STM32F373 only */ -#define STM32_IRQ_TIM10 26 /* STM32L15X only */ -#define STM32_IRQ_TIM17 26 /* STM32F373 only */ -#define STM32_IRQ_TIM11 27 /* STM32L15X only */ -#define STM32_IRQ_TIM18_DAC2 27 /* STM32F373 only */ -#define STM32_IRQ_TIM2 28 -#define STM32_IRQ_TIM3 29 -#define STM32_IRQ_TIM4 30 -#define STM32_IRQ_I2C1_EV 31 -#define STM32_IRQ_I2C1_ER 32 -#define STM32_IRQ_I2C2_EV 33 -#define STM32_IRQ_I2C2_ER 34 -#define STM32_IRQ_SPI1 35 -#define STM32_IRQ_SPI2 36 -#define STM32_IRQ_USART1 37 -#define STM32_IRQ_USART2 38 -#define STM32_IRQ_USART3 39 -#define STM32_IRQ_EXTI15_10 40 -#define STM32_IRQ_RTC_ALARM 41 -#define STM32_IRQ_USB_FS_WAKEUP 42 /* STM32L15X */ -#define STM32_IRQ_CEC 42 /* STM32F373 only */ -#define STM32_IRQ_TIM6_BASIC 43 /* STM32L15X only */ -#define STM32_IRQ_TIM12 43 /* STM32F373 only */ -#define STM32_IRQ_TIM7_BASIC 44 /* STM32L15X only */ -#define STM32_IRQ_TIM13 44 /* STM32F373 only */ -#define STM32_IRQ_TIM14 45 /* STM32F373 only */ -#define STM32_IRQ_TIM5 50 /* STM32F373 */ -#define STM32_IRQ_SPI3 51 /* STM32F373 */ -#define STM32_IRQ_USART4 52 /* STM32F446 only */ -#define STM32_IRQ_USART5 53 /* STM32F446 only */ -#define STM32_IRQ_TIM6_DAC 54 /* STM32F373 */ -#define STM32_IRQ_TIM7 55 /* STM32F373 */ -#define STM32_IRQ_DMA2_CHANNEL1 56 /* STM32F373 */ -#define STM32_IRQ_DMA2_CHANNEL2 57 /* STM32F373 */ -#define STM32_IRQ_DMA2_CHANNEL3 58 /* STM32F373 */ -#define STM32_IRQ_DMA2_CHANNEL4 59 /* STM32F373 only */ -/* if MISC_REMAP bits are set */ -#define STM32_IRQ_DMA2_CHANNEL5 60 /* STM32F373 */ -#define STM32_IRQ_SDADC1 61 /* STM32F373 only */ -#define STM32_IRQ_SDADC2 62 /* STM32F373 only */ -#define STM32_IRQ_SDADC3 63 /* STM32F373 only */ -#define STM32_IRQ_DMA2_CHANNEL6 68 /* STM32L4 only */ -#define STM32_IRQ_DMA2_CHANNEL7 69 /* STM32L4 only */ -#define STM32_IRQ_LPUART 70 /* STM32L4 only */ -#define STM32_IRQ_USART9 70 /* STM32L4 only */ -#define STM32_IRQ_USART6 71 /* STM32F446 only */ -#define STM32_IRQ_I2C3_EV 72 /* STM32F446 only */ -#define STM32_IRQ_I2C3_ER 73 /* STM32F446 only */ -#define STM32_IRQ_USB_WAKEUP 76 /* STM32F373 only */ -#define STM32_IRQ_TIM19 78 /* STM32F373 only */ -#define STM32_IRQ_AES 79 /* STM32L4 only */ -#define STM32_IRQ_RNG 80 /* STM32L4 only */ -#define STM32_IRQ_FPU 81 /* STM32F373 only */ - +/****** STM32 specific Interrupt Numbers ********/ +#define STM32_IRQ_WWDG 0 +#define STM32_IRQ_PVD_PVM 1 +#define STM32_IRQ_TAMP_STAMP 2 +#define STM32_IRQ_RTC_WKUP 3 +#define STM32_IRQ_FLASH 4 +#define STM32_IRQ_RCC 5 +#define STM32_IRQ_EXTI0 6 +#define STM32_IRQ_EXTI1 7 +#define STM32_IRQ_EXTI2 8 +#define STM32_IRQ_EXTI3 9 +#define STM32_IRQ_EXTI4 10 +#define STM32_IRQ_DMA_CHANNEL_1 11 +#define STM32_IRQ_DMA_CHANNEL_2 12 +#define STM32_IRQ_DMA_CHANNEL_3 13 +#define STM32_IRQ_DMA_CHANNEL_4 14 +#define STM32_IRQ_DMA_CHANNEL_5 15 +#define STM32_IRQ_DMA_CHANNEL_6 16 +#define STM32_IRQ_DMA_CHANNEL_7 17 +#define STM32_IRQ_ADC1 18 +#define STM32_IRQ_CAN1_TX 19 +#define STM32_IRQ_CAN1_RX0 20 +#define STM32_IRQ_CAN1_RX1 21 +#define STM32_IRQ_CAN1_SCE 22 +#define STM32_IRQ_EXTI9_5 23 +#define STM32_IRQ_TIM1_BRK_TIM15 24 +#define STM32_IRQ_TIM1_UP_TIM16 25 +#define STM32_IRQ_TIM1_TRG_COM 26 +#define STM32_IRQ_TIM1_CC 27 +#define STM32_IRQ_TIM2 28 +#define STM32_IRQ_I2C1_EV 31 +#define STM32_IRQ_I2C1_ER 32 +#define STM32_IRQ_I2C2_EV 33 +#define STM32_IRQ_I2C2_ER 34 +#define STM32_IRQ_SPI1 35 +#define STM32_IRQ_SPI2 36 +#define STM32_IRQ_USART1 37 +#define STM32_IRQ_USART2 38 +#define STM32_IRQ_USART3 39 +#define STM32_IRQ_EXTI15_10 40 +#define STM32_IRQ_RTC_ALARM 41 +#define STM32_IRQ_SDMMC1 49 +#define STM32_IRQ_TIM5 50 +#define STM32_IRQ_SPI3 51 +#define STM32_IRQ_TIM6_DAC 54 +#define STM32_IRQ_TIM7 55 +#define STM32_IRQ_DMA2_CHANNEL1 56 +#define STM32_IRQ_DMA2_CHANNEL2 57 +#define STM32_IRQ_DMA2_CHANNEL3 58 +#define STM32_IRQ_DMA2_CHANNEL4 59 +#define STM32_IRQ_DMA2_CHANNEL5 60 +#define STM32_IRQ_COMP 64 +#define LSTM32_IRQ_PTIM1 65 +#define STM32_IRQ_LPTIM2 66 +#define STM32_IRQ_DMA2_CHANNEL6 68 +#define STM32_IRQ_DMA2_CHANNEL7 69 +#define STM32_IRQ_LPUART1 70 +#define STM32_IRQ_QUADSPI 71 +#define STM32_IRQ_I2C3_EV 72 +#define STM32_IRQ_I2C3_ER 73 +#define STM32_IRQ_SAI1 74 +#define STM32_IRQ_SWPMI1 76 +#define STM32_IRQ_TSC 77 +#define STM32_IRQ_RNG 80 +#define STM32_IRQ_FPU 81 +#define STM32_IRQ_CRS 82 /* To simplify code generation, define DMA channel 9..10 */ #define STM32_IRQ_DMA_CHANNEL_9 STM32_IRQ_DMA2_CHANNEL1 #define STM32_IRQ_DMA_CHANNEL_10 STM32_IRQ_DMA2_CHANNEL2 -#define STM32_IRQ_DMA_CHANNEL_13 STM32_IRQ_DMA2_CHANNEL6 -#define STM32_IRQ_DMA_CHANNEL_14 STM32_IRQ_DMA2_CHANNEL7 - -/* aliases for easier code sharing */ -#define STM32_IRQ_I2C1 STM32_IRQ_I2C1_EV -#define STM32_IRQ_I2C2 STM32_IRQ_I2C2_EV -#define STM32_IRQ_I2C3 STM32_IRQ_I2C3_EV - +#define STM32_IRQ_DMA_CHANNEL_11 STM32_IRQ_DMA2_CHANNEL3 +#define STM32_IRQ_DMA_CHANNEL_12 STM32_IRQ_DMA2_CHANNEL4 +#define STM32_IRQ_DMA_CHANNEL_13 STM32_IRQ_DMA2_CHANNEL5 +#define STM32_IRQ_DMA_CHANNEL_14 STM32_IRQ_DMA2_CHANNEL6 +#define STM32_IRQ_DMA_CHANNEL_15 STM32_IRQ_DMA2_CHANNEL7 +#define STM32_IRQ_USART9 STM32_IRQ_LPUART1 /* Peripheral base addresses */ -#define STM32_ADC1_BASE 0x40012400 -#define STM32_ADC_BASE 0x40012700 /* STM32L15X only */ - -#define STM32_CEC_BASE 0x40007800 /* STM32F373 */ -#define STM32_CRC_BASE 0x40023000 -#define STM32_CRS_BASE 0x40006c00 /* STM32F0XX */ -#define STM32_DAC_BASE 0x40007400 - - -#define STM32_DBGMCU_BASE 0xE0042000 - -#define STM32_DMA1_BASE 0x40020000 -#define STM32_DMA2_BASE 0x40020400 - -#define STM32_EXTI_BASE 0x40010400 - -#define STM32_FLASH_REGS_BASE 0x40022000 - -#define STM32_GPIOA_BASE 0x48000000 -#define STM32_GPIOB_BASE 0x48000400 -#define STM32_GPIOC_BASE 0x48000800 -#define STM32_GPIOD_BASE 0x48000C00 -#define STM32_GPIOE_BASE 0x48001000 -#define STM32_GPIOF_BASE 0x48001400 -#define STM32_GPIOG_BASE 0x48001800 /* only for stm32l4x6 */ -#define STM32_GPIOH_BASE 0x48001C00 /* only for stm32l4 */ - -#define STM32_I2C1_BASE 0x40005400 -#define STM32_I2C2_BASE 0x40005800 -#define STM32_I2C3_BASE 0x40005C00 -#define STM32_I2C4_BASE 0x40006000 - -#define STM32_IWDG_BASE 0x40003000 -#define STM32_LCD_BASE 0x40002400 - +#define FLASH_BASE 0x08000000UL +#define FLASH_END 0x0803FFFFUL +#define FLASH_BANK1_END 0x0803FFFFUL +#define SRAM1_BASE 0x20000000UL +#define SRAM2_BASE 0x10000000UL +#define PERIPH_BASE 0x40000000UL +#define QSPI_BASE 0x90000000UL +#define QSPI_R_BASE 0xA0001000UL +#define SRAM1_BB_BASE 0x22000000UL +#define PERIPH_BB_BASE 0x42000000UL + +/* Legacy defines */ +#define SRAM_BASE SRAM1_BASE +#define SRAM_BB_BASE SRAM1_BB_BASE +#define SRAM1_SIZE_MAX 0x0000C000UL +#define SRAM2_SIZE 0x00004000UL +#define FLASH_SIZE_DATA_REGISTER ((uint32_t)0x1FFF75E0) +#define FLASH_SIZE (((((*((uint32_t *)FLASH_SIZE_DATA_REGISTER)) \ + & (0x0000FFFFU)) == 0x0000FFFFU)) ? (0x100U << 10U) : \ + (((*((uint32_t *)FLASH_SIZE_DATA_REGISTER)) & \ + (0x0000FFFFU)) << 10U)) + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000UL) +#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000UL) +#define AHB2PERIPH_BASE (PERIPH_BASE + 0x08000000UL) + +/*!< APB1 peripherals */ +#define STM32_TIM2_BASE (APB1PERIPH_BASE + 0x0000UL) +#define STM32_TIM5_BASE (APB1PERIPH_BASE + 0x0C00UL) +#define STM32_TIM6_BASE (APB1PERIPH_BASE + 0x1000UL) +#define STM32_TIM7_BASE (APB1PERIPH_BASE + 0x1400UL) +#define STM32_RTC_BASE (APB1PERIPH_BASE + 0x2800UL) +#define STM32_WWDG_BASE (APB1PERIPH_BASE + 0x2C00UL) +#define STM32_IWDG_BASE (APB1PERIPH_BASE + 0x3000UL) +#define STM32_SPI2_BASE (APB1PERIPH_BASE + 0x3800UL) +#define STM32_SPI3_BASE (APB1PERIPH_BASE + 0x3C00UL) +#define STM32_USART2_BASE (APB1PERIPH_BASE + 0x4400UL) +#define STM32_USART3_BASE (APB1PERIPH_BASE + 0x4800UL) +#define STM32_I2C1_BASE (APB1PERIPH_BASE + 0x5400UL) +#define STM32_I2C2_BASE (APB1PERIPH_BASE + 0x5800UL) +#define STM32_I2C3_BASE (APB1PERIPH_BASE + 0x5C00UL) +#define STM32_CRS_BASE (APB1PERIPH_BASE + 0x6000UL) +#define STM32_CAN1_BASE (APB1PERIPH_BASE + 0x6400UL) +#define STM32_PWR_BASE (APB1PERIPH_BASE + 0x7000UL) +#define STM32_DAC_BASE (APB1PERIPH_BASE + 0x7400UL) +#define STM32_DAC1_BASE (APB1PERIPH_BASE + 0x7400UL) +#define STM32_OPAMP_BASE (APB1PERIPH_BASE + 0x7800UL) +#define STM32_OPAMP1_BASE (APB1PERIPH_BASE + 0x7800UL) +#define STM32_LPTIM1_BASE (APB1PERIPH_BASE + 0x7C00UL) +#define STM32_LPUART1_BASE (APB1PERIPH_BASE + 0x8000UL) +#define STM32_SWPMI1_BASE (APB1PERIPH_BASE + 0x8800UL) +#define STM32_LPTIM2_BASE (APB1PERIPH_BASE + 0x9400UL) + +#define STM32_USART9_BASE STM32_LPUART1_BASE + +/*!< APB2 peripherals */ +#define STM32_SYSCFG_BASE (APB2PERIPH_BASE + 0x0000UL) +#define STM32_VREFBUF_BASE (APB2PERIPH_BASE + 0x0030UL) +#define STM32_OMP1_BASE (APB2PERIPH_BASE + 0x0200UL) +#define STM32_COMP2_BASE (APB2PERIPH_BASE + 0x0204UL) +#define STM32_EXTI_BASE (APB2PERIPH_BASE + 0x0400UL) +#define STM32_FIREWALL_BASE (APB2PERIPH_BASE + 0x1C00UL) +#define STM32_SDMMC1_BASE (APB2PERIPH_BASE + 0x2800UL) +#define STM32_TIM1_BASE (APB2PERIPH_BASE + 0x2C00UL) +#define STM32_SPI1_BASE (APB2PERIPH_BASE + 0x3000UL) +#define STM32_USART1_BASE (APB2PERIPH_BASE + 0x3800UL) +#define STM32_TIM15_BASE (APB2PERIPH_BASE + 0x4000UL) +#define STM32_TIM16_BASE (APB2PERIPH_BASE + 0x4400UL) +#define STM32_SAI1_BASE (APB2PERIPH_BASE + 0x5400UL) +#define STM32_SAI1_Block_A_BASE (SAI1_BASE + 0x0004UL) +#define STM32_SAI1_Block_B_BASE (SAI1_BASE + 0x0024UL) + +/*!< AHB1 peripherals */ +#define STM32_DMA1_BASE (AHB1PERIPH_BASE) +#define STM32_DMA2_BASE (AHB1PERIPH_BASE + 0x0400UL) +#define STM32_RCC_BASE (AHB1PERIPH_BASE + 0x1000UL) +#define STM32_FLASH_R_BASE (AHB1PERIPH_BASE + 0x2000UL) +#define STM32_CRC_BASE (AHB1PERIPH_BASE + 0x3000UL) +#define STM32_TSC_BASE (AHB1PERIPH_BASE + 0x4000UL) +#define STM32_DMA1_Channel1_BASE (DMA1_BASE + 0x0008UL) +#define STM32_DMA1_Channel2_BASE (DMA1_BASE + 0x001CUL) +#define STM32_DMA1_Channel3_BASE (DMA1_BASE + 0x0030UL) +#define STM32_DMA1_Channel4_BASE (DMA1_BASE + 0x0044UL) +#define STM32_DMA1_Channel5_BASE (DMA1_BASE + 0x0058UL) +#define STM32_DMA1_Channel6_BASE (DMA1_BASE + 0x006CUL) +#define STM32_DMA1_Channel7_BASE (DMA1_BASE + 0x0080UL) +#define STM32_DMA1_CSELR_BASE (DMA1_BASE + 0x00A8UL) +#define STM32_DMA2_Channel1_BASE (DMA2_BASE + 0x0008UL) +#define STM32_DMA2_Channel2_BASE (DMA2_BASE + 0x001CUL) +#define STM32_DMA2_Channel3_BASE (DMA2_BASE + 0x0030UL) +#define STM32_DMA2_Channel4_BASE (DMA2_BASE + 0x0044UL) +#define STM32_DMA2_Channel5_BASE (DMA2_BASE + 0x0058UL) +#define STM32_DMA2_Channel6_BASE (DMA2_BASE + 0x006CUL) +#define STM32_DMA2_Channel7_BASE (DMA2_BASE + 0x0080UL) +#define STM32_DMA2_CSELR_BASE (DMA2_BASE + 0x00A8UL) + +/*!< AHB2 peripherals */ +#define STM32_GPIOA_BASE (AHB2PERIPH_BASE + 0x0000UL) +#define STM32_GPIOB_BASE (AHB2PERIPH_BASE + 0x0400UL) +#define STM32_GPIOC_BASE (AHB2PERIPH_BASE + 0x0800UL) +#define STM32_GPIOD_BASE (AHB2PERIPH_BASE + 0x0C00UL) +#define STM32_GPIOE_BASE (AHB2PERIPH_BASE + 0x1000UL) +#define STM32_GPIOF_BASE (AHB2PERIPH_BASE + 0x1400UL) +#define STM32_GPIOG_BASE (AHB2PERIPH_BASE + 0x1800UL) /* stm32l4x6 */ +#define STM32_GPIOH_BASE (AHB2PERIPH_BASE + 0x1C00UL) +#define STM32_ADC1_BASE (AHB2PERIPH_BASE + 0x08040000UL) +#define STM32_ADC1_COMMON_BASE (AHB2PERIPH_BASE + 0x08040300UL) +#define STM32_RNG_BASE (AHB2PERIPH_BASE + 0x08060800UL) + +/* Debug MCU registers base address */ +#define STM32_DBGMCU_BASE 0xE0042000UL +#define STM32_PACKAGE_BASE 0x1FFF7500UL +#define STM32_UID_BASE 0x1FFF7590UL +#define STM32_FLASHSIZE_BASE 0x1FFF75E0UL + +#define STM32_FLASH_REGS_BASE STM32_FLASH_R_BASE +#define STM32_UNIQUE_ID_BASE STM32_UID_BASE #define STM32_OPTB_BASE 0x1FFF7800 -#define STM32_PMSE_BASE 0x40013400 -#define STM32_PWR_BASE 0x40007000 - -#define STM32_RCC_BASE 0x40021000 - -#define STM32_RI_BASE 0x40007C00 /* STM32L1xx only */ -#define STM32_RNG_BASE 0x50060800 /* STM32L4 */ -#define STM32_RTC_BASE 0x40002800 - -#define STM32_SPI1_BASE 0x40013000 -#define STM32_SPI2_BASE 0x40003800 -#define STM32_SPI3_BASE 0x40003c00 /* STM32F373, STM32L4, STM32F7 */ - -#define STM32_SYSCFG_BASE 0x40010000 - -#define STM32_TIM1_BASE 0x40012c00 /* STM32F373 */ -#define STM32_TIM2_BASE 0x40000000 -#define STM32_TIM3_BASE 0x40000400 -#define STM32_TIM4_BASE 0x40000800 -#define STM32_TIM5_BASE 0x40000c00 /* STM32F373 */ -#define STM32_TIM6_BASE 0x40001000 -#define STM32_TIM7_BASE 0x40001400 -#define STM32_TIM12_BASE 0x40001800 /* STM32F373 */ -#define STM32_TIM13_BASE 0x40001c00 /* STM32F373 */ -#define STM32_TIM14_BASE 0x40002000 /* STM32F373 */ -#define STM32_TIM15_BASE 0x40014000 -#define STM32_TIM16_BASE 0x40014400 -#define STM32_TIM17_BASE 0x40014800 -#define STM32_TIM18_BASE 0x40009c00 /* STM32F373 only */ -#define STM32_TIM19_BASE 0x40015c00 /* STM32F373 only */ - -#define STM32_UNIQUE_ID_BASE 0x1ffff7ac - -#define STM32_USART1_BASE 0x40013800 -#define STM32_USART2_BASE 0x40004400 -#define STM32_USART3_BASE 0x40004800 -#define STM32_USART4_BASE 0x40004c00 -#define STM32_USART9_BASE 0x40008000 /* LPUART */ - -#define STM32_USB_CAN_SRAM_BASE 0x40006000 -#define STM32_USB_FS_BASE 0x40005C00 - -#define STM32_WWDG_BASE 0x40002C00 - - #ifndef __ASSEMBLER__ /* Register definitions */ /* --- USART --- */ -#define STM32_USART_CR1(base) STM32_USART_REG(base, 0x00) -#define STM32_USART_CR1_UE BIT(0) -#define STM32_USART_CR1_UESM BIT(1) -#define STM32_USART_CR1_RE BIT(2) -#define STM32_USART_CR1_TE BIT(3) -#define STM32_USART_CR1_RXNEIE BIT(5) -#define STM32_USART_CR1_TCIE BIT(6) -#define STM32_USART_CR1_TXEIE BIT(7) -#define STM32_USART_CR1_PS BIT(9) -#define STM32_USART_CR1_PCE BIT(10) -#define STM32_USART_CR1_M BIT(12) -#define STM32_USART_CR1_OVER8 BIT(15) -#define STM32_USART_CR2(base) STM32_USART_REG(base, 0x04) -#define STM32_USART_CR2_SWAP BIT(15) -#define STM32_USART_CR3(base) STM32_USART_REG(base, 0x08) -#define STM32_USART_CR3_EIE BIT(0) -#define STM32_USART_CR3_DMAR BIT(6) -#define STM32_USART_CR3_DMAT BIT(7) -#define STM32_USART_CR3_ONEBIT BIT(11) -#define STM32_USART_CR3_OVRDIS BIT(12) -#define STM32_USART_CR3_WUS_START_BIT (2 << 20) -#define STM32_USART_CR3_WUFIE BIT(22) -#define STM32_USART_BRR(base) STM32_USART_REG(base, 0x0C) -#define STM32_USART_GTPR(base) STM32_USART_REG(base, 0x10) -#define STM32_USART_RTOR(base) STM32_USART_REG(base, 0x14) -#define STM32_USART_RQR(base) STM32_USART_REG(base, 0x18) -#define STM32_USART_ISR(base) STM32_USART_REG(base, 0x1C) -#define STM32_USART_ICR(base) STM32_USART_REG(base, 0x20) -#define STM32_USART_ICR_ORECF BIT(3) -#define STM32_USART_ICR_TCCF BIT(6) -#define STM32_USART_RDR(base) STM32_USART_REG(base, 0x24) -#define STM32_USART_TDR(base) STM32_USART_REG(base, 0x28) -#define STM32_USART_PRESC(base) STM32_USART_REG(base, 0x2C) +#define STM32_USART_CR1(base) STM32_USART_REG(base, 0x00) +#define STM32_USART_CR1_UE BIT(0) +#define STM32_USART_CR1_UESM BIT(1) +#define STM32_USART_CR1_RE BIT(2) +#define STM32_USART_CR1_TE BIT(3) +#define STM32_USART_CR1_RXNEIE BIT(5) +#define STM32_USART_CR1_TCIE BIT(6) +#define STM32_USART_CR1_TXEIE BIT(7) +#define STM32_USART_CR1_PS BIT(9) +#define STM32_USART_CR1_PCE BIT(10) +#define STM32_USART_CR1_M BIT(12) +#define STM32_USART_CR1_OVER8 BIT(15) + +#define STM32_USART_CR2(base) STM32_USART_REG(base, 0x04) +#define STM32_USART_CR2_SWAP BIT(15) + +#define STM32_USART_CR3(base) STM32_USART_REG(base, 0x08) +#define STM32_USART_CR3_EIE BIT(0) +#define STM32_USART_CR3_DMAR BIT(6) +#define STM32_USART_CR3_DMAT BIT(7) +#define STM32_USART_CR3_ONEBIT BIT(11) +#define STM32_USART_CR3_OVRDIS BIT(12) +#define STM32_USART_CR3_WUS_START_BIT (2 << 20) +#define STM32_USART_CR3_WUFIE BIT(22) + +#define STM32_USART_BRR(base) STM32_USART_REG(base, 0x0C) +#define STM32_USART_GTPR(base) STM32_USART_REG(base, 0x10) +#define STM32_USART_RTOR(base) STM32_USART_REG(base, 0x14) +#define STM32_USART_RQR(base) STM32_USART_REG(base, 0x18) +#define STM32_USART_ISR(base) STM32_USART_REG(base, 0x1C) +#define STM32_USART_ICR(base) STM32_USART_REG(base, 0x20) +#define STM32_USART_ICR_ORECF BIT(3) +#define STM32_USART_ICR_TCCF BIT(6) +#define STM32_USART_RDR(base) STM32_USART_REG(base, 0x24) +#define STM32_USART_TDR(base) STM32_USART_REG(base, 0x28) +#define STM32_USART_PRESC(base) STM32_USART_REG(base, 0x2C) /* register alias */ -#define STM32_USART_SR(base) STM32_USART_ISR(base) -#define STM32_USART_SR_ORE BIT(3) -#define STM32_USART_SR_RXNE BIT(5) -#define STM32_USART_SR_TC BIT(6) -#define STM32_USART_SR_TXE BIT(7) +#define STM32_USART_SR(base) STM32_USART_ISR(base) +#define STM32_USART_SR_ORE BIT(3) +#define STM32_USART_SR_RXNE BIT(5) +#define STM32_USART_SR_TC BIT(6) +#define STM32_USART_SR_TXE BIT(7) /* --- GPIO --- */ - #define STM32_GPIO_MODER(b) REG32((b) + 0x00) #define STM32_GPIO_OTYPER(b) REG16((b) + 0x04) #define STM32_GPIO_OSPEEDR(b) REG32((b) + 0x08) @@ -263,7 +279,7 @@ #define STM32_GPIO_AFRL(b) REG32((b) + 0x20) #define STM32_GPIO_AFRH(b) REG32((b) + 0x24) #define STM32_GPIO_BRR(b) REG32((b) + 0x28) -#define STM32_GPIO_ASCR(b) REG32((b) + 0x2C) /* only for stm32l4 */ +#define STM32_GPIO_ASCR(b) REG32((b) + 0x2C) /* only for stm32l4x6 */ #define GPIO_ALT_F0 0x0 #define GPIO_ALT_F1 0x1 @@ -334,81 +350,60 @@ #define STM32_I2C_RXDR(n) REG32(stm32_i2c_reg(n, 0x24)) #define STM32_I2C_TXDR(n) REG32(stm32_i2c_reg(n, 0x28)) - /* --- Power / Reset / Clocks --- */ +#define STM32_PWR_CR1 REG32(STM32_PWR_BASE + 0x00) #define STM32_PWR_CR2 REG32(STM32_PWR_BASE + 0x04) #define STM32_PWR_CSR REG32(STM32_PWR_BASE + 0x10) - - -#define STM32_RCC_CR REG32(STM32_RCC_BASE + 0x00) -#define STM32_RCC_CR_MSION BIT(0) -#define STM32_RCC_CR_MSIRDY BIT(1) -#define STM32_RCC_CR_HSION BIT(8) -#define STM32_RCC_CR_HSIRDY BIT(10) -#define STM32_RCC_CR_HSEON BIT(16) -#define STM32_RCC_CR_HSERDY BIT(17) -#define STM32_RCC_CR_PLLON BIT(24) -#define STM32_RCC_CR_PLLRDY BIT(25) - -#define STM32_RCC_ICSCR REG32(STM32_RCC_BASE + 0x04) -#define STM32_RCC_ICSCR_MSIRANGE(n) ((n) << 13) -#define STM32_RCC_ICSCR_MSIRANGE_1MHZ STM32_RCC_ICSCR_MSIRANGE(4) -#define STM32_RCC_ICSCR_MSIRANGE_2MHZ STM32_RCC_ICSCR_MSIRANGE(5) -#define STM32_RCC_ICSCR_MSIRANGE_MASK STM32_RCC_ICSCR_MSIRANGE(7) - -#define STM32_RCC_CFGR REG32(STM32_RCC_BASE + 0x08) -#define STM32_RCC_CFGR_SW_MSI (0 << 0) -#define STM32_RCC_CFGR_SW_HSI (1 << 0) -#define STM32_RCC_CFGR_SW_HSE (2 << 0) -#define STM32_RCC_CFGR_SW_PLL (3 << 0) -#define STM32_RCC_CFGR_SW_MASK (3 << 0) -#define STM32_RCC_CFGR_SWS_MSI (0 << 2) -#define STM32_RCC_CFGR_SWS_HSI (1 << 2) -#define STM32_RCC_CFGR_SWS_HSE (2 << 2) -#define STM32_RCC_CFGR_SWS_PLL (3 << 2) -#define STM32_RCC_CFGR_SWS_MASK (3 << 2) - -#define STM32_RCC_PLLCFGR REG32(STM32_RCC_BASE + 0x0C) -#define STM32_RCC_PLLCFGR_PLLSRC_SHIFT (0) -#define STM32_RCC_PLLCFGR_PLLSRC_NONE (0 << STM32_RCC_PLLCFGR_PLLSRC_SHIFT) -#define STM32_RCC_PLLCFGR_PLLSRC_MSI (1 << STM32_RCC_PLLCFGR_PLLSRC_SHIFT) -#define STM32_RCC_PLLCFGR_PLLSRC_HSI (2 << STM32_RCC_PLLCFGR_PLLSRC_SHIFT) -#define STM32_RCC_PLLCFGR_PLLSRC_HSE (3 << STM32_RCC_PLLCFGR_PLLSRC_SHIFT) -#define STM32_RCC_PLLCFGR_PLLSRC_MASK (3 << STM32_RCC_PLLCFGR_PLLSRC_SHIFT) -#define STM32_RCC_PLLCFGR_PLLM_SHIFT (4) -#define STM32_RCC_PLLCFGR_PLLM_MASK (0x7 << STM32_RCC_PLLCFGR_PLLM_SHIFT) -#define STM32_RCC_PLLCFGR_PLLN_SHIFT (8) -#define STM32_RCC_PLLCFGR_PLLN_MASK (0x7f << STM32_RCC_PLLCFGR_PLLN_SHIFT) -#define STM32_RCC_PLLCFGR_PLLREN_SHIFT (24) -#define STM32_RCC_PLLCFGR_PLLREN_MASK (1 << STM32_RCC_PLLCFGR_PLLREN_SHIFT) -#define STM32_RCC_PLLCFGR_PLLR_SHIFT (25) -#define STM32_RCC_PLLCFGR_PLLR_MASK (3 << STM32_RCC_PLLCFGR_PLLR_SHIFT) - -#define STM32_RCC_AHB1RSTR REG32(STM32_RCC_BASE + 0x28) -#define STM32_RCC_AHB2RSTR REG32(STM32_RCC_BASE + 0x2C) -#define STM32_RCC_AHB3RSTR REG32(STM32_RCC_BASE + 0x30) -#define STM32_RCC_APB1RSTR1 REG32(STM32_RCC_BASE + 0x38) -#define STM32_RCC_APB1RSTR2 REG32(STM32_RCC_BASE + 0x3C) -#define STM32_RCC_APB2RSTR REG32(STM32_RCC_BASE + 0x40) - -#define STM32_RCC_AHB1ENR REG32(STM32_RCC_BASE + 0x48) -#define STM32_RCC_AHB1ENR_DMA1EN BIT(0) -#define STM32_RCC_AHB1ENR_DMA2EN BIT(1) - -#define STM32_RCC_AHB2ENR REG32(STM32_RCC_BASE + 0x4C) -#define STM32_RCC_AHB2ENR_GPIOMASK (0xff << 0) -#define STM32_RCC_AHB2ENR_RNGEN BIT(18) - -#define STM32_RCC_APB1ENR REG32(STM32_RCC_BASE + 0x58) -#define STM32_RCC_PWREN BIT(28) - -#define STM32_RCC_APB1ENR2 REG32(STM32_RCC_BASE + 0x5C) -#define STM32_RCC_APB1ENR2_LPUART1EN BIT(0) - -#define STM32_RCC_APB2ENR REG32(STM32_RCC_BASE + 0x60) -#define STM32_RCC_SYSCFGEN BIT(0) - -#define STM32_RCC_CCIPR REG32(STM32_RCC_BASE + 0x88) +#define STM32_PWR_SCR REG32(STM32_PWR_BASE + 0x18) + +#define PWR_CR1_LPMS_POS 0U +#define PWR_CR1_LPMS_MSK (0x7UL << PWR_CR1_LPMS_POS) +#define PWR_CR1_LPMS PWR_CR1_LPMS_MSK +#define PWR_CR1_LPMS_STOP0 (0x00000000UL) +#define PWR_CR1_LPMS_STOP1_POS 0U +#define PWR_CR1_LPMS_STOP1_MSK (0x1UL << PWR_CR1_LPMS_STOP1_POS) +#define PWR_CR1_LPMS_STOP1 PWR_CR1_LPMS_STOP1_MSK +#define PWR_CR1_LPMS_STOP2_POS 1U +#define PWR_CR1_LPMS_STOP2_MSK (0x1UL << PWR_CR1_LPMS_STOP2_POS) +#define PWR_CR1_LPMS_STOP2 PWR_CR1_LPMS_STOP2_MSK +#define PWR_CR1_LPMS_STANDBY_POS 0U +#define PWR_CR1_LPMS_STANDBY_MSK (0x3UL << PWR_CR1_LPMS_STANDBY_POS) +#define PWR_CR1_LPMS_STANDBY PWR_CR1_LPMS_STANDBY_MSK +#define PWR_CR1_LPMS_SHUTDOWN_POS 2U +#define PWR_CR1_LPMS_SHUTDOWN_MSK (0x1UL << PWR_CR1_LPMS_SHUTDOWN_POS) +#define PWR_CR1_LPMS_SHUTDOWN PWR_CR1_LPMS_SHUTDOWN_MSK +#define PWR_CR1_VOS_POS 9U +#define PWR_CR1_VOS_MSK (0x3UL << PWR_CR1_VOS_POS) +#define PWR_CR1_VOS PWR_CR1_VOS_MSK +#define PWR_CR1_VOS_0 (0x1UL << PWR_CR1_VOS_POS) +#define PWR_CR1_VOS_1 (0x2UL << PWR_CR1_VOS_POS) + + +/* --- Macro usage in ec code --- */ +#define STM32_RCC_AHB2ENR_GPIOMASK \ + (STM32_RCC_AHB2ENR_GPIOAEN | STM32_RCC_AHB2ENR_GPIOBEN | \ + STM32_RCC_AHB2ENR_GPIOCEN | STM32_RCC_AHB2ENR_GPIODEN | \ + STM32_RCC_AHB2ENR_GPIOEEN | STM32_RCC_AHB2ENR_GPIOHEN) +#define STM32_RCC_ICSCR_MSIRANGE(n) ((n) << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_ICSCR_MSIRANGE_1MHZ STM32_RCC_ICSCR_MSIRANGE(4) +#define STM32_RCC_ICSCR_MSIRANGE_2MHZ STM32_RCC_ICSCR_MSIRANGE(5) +#define STM32_RCC_ICSCR_MSIRANGE_MASK STM32_RCC_CR_MSIRANGE_MSK +#define STM32_RCC_SYSCFGEN STM32_RCC_APB2ENR_SYSCFGEN + +#define STM32_RCC_PB2_TIM1 STM32_RCC_APB2ENR_TIM1EN +#define STM32_RCC_PB2_TIM15 STM32_RCC_APB2ENR_TIM15EN +#define STM32_RCC_PB2_TIM16 STM32_RCC_APB2ENR_TIM16EN +#ifndef CHIP_VARIANT_STM32L431X +#define STM32_RCC_PB2_TIM8 BIT(13) +#endif +#define STM32_RCC_PWREN STM32_RCC_APB1ENR1_PWREN + +#define STM32_RCC_AHB2ENR_GPIO_PORTA BIT(0) +#define STM32_RCC_AHB2ENR_GPIO_PORTB BIT(1) +#define STM32_RCC_AHB2ENR_GPIO_PORTC BIT(2) +#define STM32_RCC_AHB2ENR_GPIO_PORTD BIT(3) +#define STM32_RCC_AHB2ENR_GPIO_PORTE BIT(4) +#define STM32_RCC_AHB2ENR_GPIO_PORTH BIT(7) #define STM32_RCC_CCIPR_USART1SEL_SHIFT (0) #define STM32_RCC_CCIPR_USART1SEL_MASK (3 << STM32_RCC_CCIPR_USART1SEL_SHIFT) #define STM32_RCC_CCIPR_USART2SEL_SHIFT (2) @@ -443,9 +438,8 @@ #define STM32_RCC_CCIPR_SWPMI1SEL_MASK BIT(STM32_RCC_CCIPR_SWPMI1SEL_SHIFT) #define STM32_RCC_CCIPR_DFSDM1SEL_SHIFT (31) #define STM32_RCC_CCIPR_DFSDM1SEL_MASK BIT(STM32_RCC_CCIPR_DFSDM1SEL_SHIFT) - /* Possible clock sources for each peripheral */ -#define STM32_RCC_CCIPR_UART_PCLK 0 +#define STM32_RCC_CCIPR_UART_PCLK 0 #define STM32_RCC_CCIPR_UART_SYSCLK 1 #define STM32_RCC_CCIPR_UART_HSI16 2 #define STM32_RCC_CCIPR_UART_LSE 3 @@ -480,39 +474,1263 @@ #define STM32_RCC_CCIPR_DFSDM_PCLK 0 #define STM32_RCC_CCIPR_DFSDM_SYSCLK 1 -#define STM32_RCC_BDCR REG32(STM32_RCC_BASE + 0x90) - -#define STM32_RCC_CSR REG32(STM32_RCC_BASE + 0x94) - -#define STM32_RCC_CRRCR REG32(STM32_RCC_BASE + 0x98) - -#define STM32_RCC_CRRCR_HSI48ON BIT(0) -#define STM32_RCC_CRRCR_HSI48RDY BIT(1) -#define STM32_RCC_CRRCR_HSI48CAL_MASK (0x1ff << 7) -#define STM32_RCC_PB2_TIM1 BIT(11) -#define STM32_RCC_PB2_TIM8 BIT(13) -#define STM32_SYSCFG_EXTICR(n) REG32(STM32_SYSCFG_BASE + 8 + 4 * (n)) +#define STM32_RCC_CR REG32(STM32_RCC_BASE + 0x00) +#define STM32_RCC_ICSCR REG32(STM32_RCC_BASE + 0x04) +#define STM32_RCC_CFGR REG32(STM32_RCC_BASE + 0x08) +#define STM32_RCC_PLLCFGR REG32(STM32_RCC_BASE + 0x0C) +#define STM32_RCC_PLLSAI1CFGR REG32(STM32_RCC_BASE + 0x10) +#define STM32_RCC_RESERVED REG32(STM32_RCC_BASE + 0x14) +#define STM32_RCC_CIER REG32(STM32_RCC_BASE + 0x18) +#define STM32_RCC_CIFR REG32(STM32_RCC_BASE + 0x1C) +#define STM32_RCC_CICR REG32(STM32_RCC_BASE + 0x20) +#define STM32_RCC_RESERVED0 REG32(STM32_RCC_BASE + 0x24) +#define STM32_RCC_AHB1RSTR REG32(STM32_RCC_BASE + 0x28) +#define STM32_RCC_AHB2RSTR REG32(STM32_RCC_BASE + 0x2C) +#define STM32_RCC_AHB3RSTR REG32(STM32_RCC_BASE + 0x30) +#define STM32_RCC_RESERVED1 REG32(STM32_RCC_BASE + 0x34) +#define STM32_RCC_APB1RSTR1 REG32(STM32_RCC_BASE + 0x38) +#define STM32_RCC_APB1RSTR2 REG32(STM32_RCC_BASE + 0x3C) +#define STM32_RCC_APB2RSTR REG32(STM32_RCC_BASE + 0x40) +#define STM32_RCC_RESERVED2 REG32(STM32_RCC_BASE + 0x44) +#define STM32_RCC_AHB1ENR REG32(STM32_RCC_BASE + 0x48) +#define STM32_RCC_AHB2ENR REG32(STM32_RCC_BASE + 0x4C) +#define STM32_RCC_AHB3ENR REG32(STM32_RCC_BASE + 0x50) +#define STM32_RCC_RESERVED3 REG32(STM32_RCC_BASE + 0x54) +#define STM32_RCC_APB1ENR1 REG32(STM32_RCC_BASE + 0x58) +#define STM32_RCC_APB1ENR2 REG32(STM32_RCC_BASE + 0x5C) +#define STM32_RCC_APB2ENR REG32(STM32_RCC_BASE + 0x60) +#define STM32_RCC_RESERVED4 REG32(STM32_RCC_BASE + 0x64) +#define STM32_RCC_AHB1SMENR REG32(STM32_RCC_BASE + 0x68) +#define STM32_RCC_AHB2SMENR REG32(STM32_RCC_BASE + 0x6C) +#define STM32_RCC_AHB3SMENR REG32(STM32_RCC_BASE + 0x70) +#define STM32_RCC_RESERVED5 REG32(STM32_RCC_BASE + 0x74) +#define STM32_RCC_APB1SMENR1 REG32(STM32_RCC_BASE + 0x78) +#define STM32_RCC_APB1SMENR2 REG32(STM32_RCC_BASE + 0x7C) +#define STM32_RCC_APB2SMENR REG32(STM32_RCC_BASE + 0x80) +#define STM32_RCC_RESERVED6 REG32(STM32_RCC_BASE + 0x84) +#define STM32_RCC_CCIPR REG32(STM32_RCC_BASE + 0x88) +#define STM32_RCC_RESERVED7 REG32(STM32_RCC_BASE + 0x8C) +#define STM32_RCC_BDCR REG32(STM32_RCC_BASE + 0x90) +#define STM32_RCC_CSR REG32(STM32_RCC_BASE + 0x94) +#define STM32_RCC_CRRCR REG32(STM32_RCC_BASE + 0x98) + +#define STM32_RCC_PLLSAI1_SUPPORT +#define STM32_RCC_PLLP_SUPPORT +#define STM32_RCC_HSI48_SUPPORT +#define STM32_RCC_PLLP_DIV_2_31_SUPPORT +#define STM32_RCC_PLLSAI1P_DIV_2_31_SUPPORT + +#define STM32_RCC_APB1ENR STM32_RCC_APB1ENR1 + +/******************** BIT DEFINITION FOR STM32_RCC_CR REGISTER **************/ +#define STM32_RCC_CR_MSION_POS 0U +#define STM32_RCC_CR_MSION_MSK (0x1UL << STM32_RCC_CR_MSION_POS) +#define STM32_RCC_CR_MSION STM32_RCC_CR_MSION_MSK +#define STM32_RCC_CR_MSIRDY_POS 1U +#define STM32_RCC_CR_MSIRDY_MSK (0x1UL << STM32_RCC_CR_MSIRDY_POS) +#define STM32_RCC_CR_MSIRDY STM32_RCC_CR_MSIRDY_MSK +#define STM32_RCC_CR_MSIPLLEN_POS 2U +#define STM32_RCC_CR_MSIPLLEN_MSK (0x1UL << STM32_RCC_CR_MSIPLLEN_POS) +#define STM32_RCC_CR_MSIPLLEN STM32_RCC_CR_MSIPLLEN_MSK +#define STM32_RCC_CR_MSIRGSEL_POS 3U +#define STM32_RCC_CR_MSIRGSEL_MSK (0x1UL << STM32_RCC_CR_MSIRGSEL_POS) +#define STM32_RCC_CR_MSIRGSEL STM32_RCC_CR_MSIRGSEL_MSK + +/*!< MSIRANGE CONFIGURATION : 12 FREQUENCY RANGES AVAILABLE */ +#define STM32_RCC_CR_MSIRANGE_POS 4U +#define STM32_RCC_CR_MSIRANGE_MSK (0xFUL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE STM32_RCC_CR_MSIRANGE_MSK +#define STM32_RCC_CR_MSIRANGE_0 (0x0UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_1 (0x1UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_2 (0x2UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_3 (0x3UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_4 (0x4UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_5 (0x5UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_6 (0x6UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_7 (0x7UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_8 (0x8UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_9 (0x9UL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_10 (0xAUL << STM32_RCC_CR_MSIRANGE_POS) +#define STM32_RCC_CR_MSIRANGE_11 (0xBUL << STM32_RCC_CR_MSIRANGE_POS) + +#define STM32_RCC_CR_HSION_POS 8U +#define STM32_RCC_CR_HSION_MSK (0x1UL << STM32_RCC_CR_HSION_POS) +#define STM32_RCC_CR_HSION STM32_RCC_CR_HSION_MSK +#define STM32_RCC_CR_HSIKERON_POS 9U +#define STM32_RCC_CR_HSIKERON_MSK (0x1UL << STM32_RCC_CR_HSIKERON_POS) +#define STM32_RCC_CR_HSIKERON STM32_RCC_CR_HSIKERON_MSK +#define STM32_RCC_CR_HSIRDY_POS 10U +#define STM32_RCC_CR_HSIRDY_MSK (0x1UL << STM32_RCC_CR_HSIRDY_POS) +#define STM32_RCC_CR_HSIRDY STM32_RCC_CR_HSIRDY_MSK +#define STM32_RCC_CR_HSIASFS_POS 11U +#define STM32_RCC_CR_HSIASFS_MSK (0x1UL << STM32_RCC_CR_HSIASFS_POS) +#define STM32_RCC_CR_HSIASFS STM32_RCC_CR_HSIASFS_MSK + +#define STM32_RCC_CR_HSEON_POS 16U +#define STM32_RCC_CR_HSEON_MSK (0x1UL << STM32_RCC_CR_HSEON_POS) +#define STM32_RCC_CR_HSEON STM32_RCC_CR_HSEON_MSK +#define STM32_RCC_CR_HSERDY_POS 17U +#define STM32_RCC_CR_HSERDY_MSK (0x1UL << STM32_RCC_CR_HSERDY_POS) +#define STM32_RCC_CR_HSERDY STM32_RCC_CR_HSERDY_MSK +#define STM32_RCC_CR_HSEBYP_POS 18U +#define STM32_RCC_CR_HSEBYP_MSK (0x1UL << STM32_RCC_CR_HSEBYP_POS) +#define STM32_RCC_CR_HSEBYP STM32_RCC_CR_HSEBYP_MSK +#define STM32_RCC_CR_CSSON_POS 19U +#define STM32_RCC_CR_CSSON_MSK (0x1UL << STM32_RCC_CR_CSSON_POS) +#define STM32_RCC_CR_CSSON STM32_RCC_CR_CSSON_MSK + +#define STM32_RCC_CR_PLLON_POS 24U +#define STM32_RCC_CR_PLLON_MSK (0x1UL << STM32_RCC_CR_PLLON_POS) +#define STM32_RCC_CR_PLLON STM32_RCC_CR_PLLON_MSK +#define STM32_RCC_CR_PLLRDY_POS 25U +#define STM32_RCC_CR_PLLRDY_MSK (0x1UL << STM32_RCC_CR_PLLRDY_POS) +#define STM32_RCC_CR_PLLRDY STM32_RCC_CR_PLLRDY_MSK +#define STM32_RCC_CR_PLLSAI1ON_POS 26U +#define STM32_RCC_CR_PLLSAI1ON_MSK (0x1UL << STM32_RCC_CR_PLLSAI1ON_POS) +#define STM32_RCC_CR_PLLSAI1ON STM32_RCC_CR_PLLSAI1ON_MSK +#define STM32_RCC_CR_PLLSAI1RDY_POS 27U +#define STM32_RCC_CR_PLLSAI1RDY_MSK (0x1UL << STM32_RCC_CR_PLLSAI1RDY_POS) +#define STM32_RCC_CR_PLLSAI1RDY STM32_RCC_CR_PLLSAI1RDY_MSK + +/******************** BIT DEFINITION FOR STM32_RCC_ICSCR REGISTER ***********/ +/*!< MSICAL CONFIGURATION */ +#define STM32_RCC_ICSCR_MSICAL_POS 0U +#define STM32_RCC_ICSCR_MSICAL_MSK (0xFFUL << STM32_RCC_ICSCR_MSICAL_POS) +#define STM32_RCC_ICSCR_MSICAL STM32_RCC_ICSCR_MSICAL_MSK +#define STM32_RCC_ICSCR_MSICAL_0 (0x01UL << STM32_RCC_ICSCR_MSICAL_POS) +#define STM32_RCC_ICSCR_MSICAL_1 (0x02UL << STM32_RCC_ICSCR_MSICAL_POS) +#define STM32_RCC_ICSCR_MSICAL_2 (0x04UL << STM32_RCC_ICSCR_MSICAL_POS) +#define STM32_RCC_ICSCR_MSICAL_3 (0x08UL << STM32_RCC_ICSCR_MSICAL_POS) +#define STM32_RCC_ICSCR_MSICAL_4 (0x10UL << STM32_RCC_ICSCR_MSICAL_POS) +#define STM32_RCC_ICSCR_MSICAL_5 (0x20UL << STM32_RCC_ICSCR_MSICAL_POS) +#define STM32_RCC_ICSCR_MSICAL_6 (0x40UL << STM32_RCC_ICSCR_MSICAL_POS) +#define STM32_RCC_ICSCR_MSICAL_7 (0x80UL << STM32_RCC_ICSCR_MSICAL_POS) + +/*!< MSITRIM CONFIGURATION */ +#define STM32_RCC_ICSCR_MSITRIM_POS 8U +#define STM32_RCC_ICSCR_MSITRIM_MSK (0xFFUL << STM32_RCC_ICSCR_MSITRIM_POS) +#define STM32_RCC_ICSCR_MSITRIM STM32_RCC_ICSCR_MSITRIM_MSK +#define STM32_RCC_ICSCR_MSITRIM_0 (0x01UL << STM32_RCC_ICSCR_MSITRIM_POS) +#define STM32_RCC_ICSCR_MSITRIM_1 (0x02UL << STM32_RCC_ICSCR_MSITRIM_POS) +#define STM32_RCC_ICSCR_MSITRIM_2 (0x04UL << STM32_RCC_ICSCR_MSITRIM_POS) +#define STM32_RCC_ICSCR_MSITRIM_3 (0x08UL << STM32_RCC_ICSCR_MSITRIM_POS) +#define STM32_RCC_ICSCR_MSITRIM_4 (0x10UL << STM32_RCC_ICSCR_MSITRIM_POS) +#define STM32_RCC_ICSCR_MSITRIM_5 (0x20UL << STM32_RCC_ICSCR_MSITRIM_POS) +#define STM32_RCC_ICSCR_MSITRIM_6 (0x40UL << STM32_RCC_ICSCR_MSITRIM_POS) +#define STM32_RCC_ICSCR_MSITRIM_7 (0x80UL << STM32_RCC_ICSCR_MSITRIM_POS) + +/*!< HSICAL CONFIGURATION */ +#define STM32_RCC_ICSCR_HSICAL_POS 16U +#define STM32_RCC_ICSCR_HSICAL_MSK (0xFFUL << STM32_RCC_ICSCR_HSICAL_POS) +#define STM32_RCC_ICSCR_HSICAL STM32_RCC_ICSCR_HSICAL_MSK +#define STM32_RCC_ICSCR_HSICAL_0 (0x01UL << STM32_RCC_ICSCR_HSICAL_POS) +#define STM32_RCC_ICSCR_HSICAL_1 (0x02UL << STM32_RCC_ICSCR_HSICAL_POS) +#define STM32_RCC_ICSCR_HSICAL_2 (0x04UL << STM32_RCC_ICSCR_HSICAL_POS) +#define STM32_RCC_ICSCR_HSICAL_3 (0x08UL << STM32_RCC_ICSCR_HSICAL_POS) +#define STM32_RCC_ICSCR_HSICAL_4 (0x10UL << STM32_RCC_ICSCR_HSICAL_POS) +#define STM32_RCC_ICSCR_HSICAL_5 (0x20UL << STM32_RCC_ICSCR_HSICAL_POS) +#define STM32_RCC_ICSCR_HSICAL_6 (0x40UL << STM32_RCC_ICSCR_HSICAL_POS) +#define STM32_RCC_ICSCR_HSICAL_7 (0x80UL << STM32_RCC_ICSCR_HSICAL_POS) + +/*!< HSITRIM CONFIGURATION */ +#define STM32_RCC_ICSCR_HSITRIM_POS 24U +#define STM32_RCC_ICSCR_HSITRIM_MSK (0x1FUL << STM32_RCC_ICSCR_HSITRIM_POS) +#define STM32_RCC_ICSCR_HSITRIM STM32_RCC_ICSCR_HSITRIM_MSK +#define STM32_RCC_ICSCR_HSITRIM_0 (0x01UL << STM32_RCC_ICSCR_HSITRIM_POS) +#define STM32_RCC_ICSCR_HSITRIM_1 (0x02UL << STM32_RCC_ICSCR_HSITRIM_POS) +#define STM32_RCC_ICSCR_HSITRIM_2 (0x04UL << STM32_RCC_ICSCR_HSITRIM_POS) +#define STM32_RCC_ICSCR_HSITRIM_3 (0x08UL << STM32_RCC_ICSCR_HSITRIM_POS) +#define STM32_RCC_ICSCR_HSITRIM_4 (0x10UL << STM32_RCC_ICSCR_HSITRIM_POS) + +/**************** BIT DEFINITION FOR STM32_RCC_CFGR REGISTER **************/ +/*!< SW CONFIGURATION */ +#define STM32_RCC_CFGR_SW_POS 0U +#define STM32_RCC_CFGR_SW_MSK (0x3UL << STM32_RCC_CFGR_SW_POS) +#define STM32_RCC_CFGR_SW STM32_RCC_CFGR_SW_MSK +#define STM32_RCC_CFGR_SW_0 (0x1UL << STM32_RCC_CFGR_SW_POS) +#define STM32_RCC_CFGR_SW_1 (0x2UL << STM32_RCC_CFGR_SW_POS) + +#define STM32_RCC_CFGR_SW_MSI (0x00000000UL) +#define STM32_RCC_CFGR_SW_HSI (0x00000001UL) +#define STM32_RCC_CFGR_SW_HSE (0x00000002UL) +#define STM32_RCC_CFGR_SW_PLL (0x00000003UL) + +/*!< SWS CONFIGURATION */ +#define STM32_RCC_CFGR_SWS_POS 2U +#define STM32_RCC_CFGR_SWS_MSK (0x3UL << STM32_RCC_CFGR_SWS_POS) +#define STM32_RCC_CFGR_SWS STM32_RCC_CFGR_SWS_MSK +#define STM32_RCC_CFGR_SWS_0 (0x1UL << STM32_RCC_CFGR_SWS_POS) +#define STM32_RCC_CFGR_SWS_1 (0x2UL << STM32_RCC_CFGR_SWS_POS) + +#define STM32_RCC_CFGR_SWS_MSI (0x00000000UL) +#define STM32_RCC_CFGR_SWS_HSI (0x00000004UL) +#define STM32_RCC_CFGR_SWS_HSE (0x00000008UL) +#define STM32_RCC_CFGR_SWS_PLL (0x0000000CUL) + +/*!< HPRE CONFIGURATION */ +#define STM32_RCC_CFGR_HPRE_POS 4U +#define STM32_RCC_CFGR_HPRE_MSK (0xFUL << STM32_RCC_CFGR_HPRE_POS) +#define STM32_RCC_CFGR_HPRE STM32_RCC_CFGR_HPRE_MSK +#define STM32_RCC_CFGR_HPRE_0 (0x1UL << STM32_RCC_CFGR_HPRE_POS) +#define STM32_RCC_CFGR_HPRE_1 (0x2UL << STM32_RCC_CFGR_HPRE_POS) +#define STM32_RCC_CFGR_HPRE_2 (0x4UL << STM32_RCC_CFGR_HPRE_POS) +#define STM32_RCC_CFGR_HPRE_3 (0x8UL << STM32_RCC_CFGR_HPRE_POS) + +#define STM32_RCC_CFGR_HPRE_DIV1 (0x00000000UL) +#define STM32_RCC_CFGR_HPRE_DIV2 (0x00000080UL) +#define STM32_RCC_CFGR_HPRE_DIV4 (0x00000090UL) +#define STM32_RCC_CFGR_HPRE_DIV8 (0x000000A0UL) +#define STM32_RCC_CFGR_HPRE_DIV16 (0x000000B0UL) +#define STM32_RCC_CFGR_HPRE_DIV64 (0x000000C0UL) +#define STM32_RCC_CFGR_HPRE_DIV128 (0x000000D0UL) +#define STM32_RCC_CFGR_HPRE_DIV256 (0x000000E0UL) +#define STM32_RCC_CFGR_HPRE_DIV512 (0x000000F0UL) + +/*!< PPRE1 CONFIGURATION */ +#define STM32_RCC_CFGR_PPRE1_POS 8U +#define STM32_RCC_CFGR_PPRE1_MSK (0x7UL << STM32_RCC_CFGR_PPRE1_POS) +#define STM32_RCC_CFGR_PPRE1 STM32_RCC_CFGR_PPRE1_MSK +#define STM32_RCC_CFGR_PPRE1_0 (0x1UL << STM32_RCC_CFGR_PPRE1_POS) +#define STM32_RCC_CFGR_PPRE1_1 (0x2UL << STM32_RCC_CFGR_PPRE1_POS) +#define STM32_RCC_CFGR_PPRE1_2 (0x4UL << STM32_RCC_CFGR_PPRE1_POS) + +#define STM32_RCC_CFGR_PPRE1_DIV1 (0x00000000UL) +#define STM32_RCC_CFGR_PPRE1_DIV2 (0x00000400UL) +#define STM32_RCC_CFGR_PPRE1_DIV4 (0x00000500UL) +#define STM32_RCC_CFGR_PPRE1_DIV8 (0x00000600UL) +#define STM32_RCC_CFGR_PPRE1_DIV16 (0x00000700UL) + +/*!< PPRE2 CONFIGURATION */ +#define STM32_RCC_CFGR_PPRE2_POS 11U +#define STM32_RCC_CFGR_PPRE2_MSK (0x7UL << STM32_RCC_CFGR_PPRE2_POS) +#define STM32_RCC_CFGR_PPRE2 STM32_RCC_CFGR_PPRE2_MSK +#define STM32_RCC_CFGR_PPRE2_0 (0x1UL << STM32_RCC_CFGR_PPRE2_POS) +#define STM32_RCC_CFGR_PPRE2_1 (0x2UL << STM32_RCC_CFGR_PPRE2_POS) +#define STM32_RCC_CFGR_PPRE2_2 (0x4UL << STM32_RCC_CFGR_PPRE2_POS) + +#define STM32_RCC_CFGR_PPRE2_DIV1 (0x00000000UL) +#define STM32_RCC_CFGR_PPRE2_DIV2 (0x00002000UL) +#define STM32_RCC_CFGR_PPRE2_DIV4 (0x00002800UL) +#define STM32_RCC_CFGR_PPRE2_DIV8 (0x00003000UL) +#define STM32_RCC_CFGR_PPRE2_DIV16 (0x00003800UL) + +#define STM32_RCC_CFGR_STOPWUCK_POS 15U +#define STM32_RCC_CFGR_STOPWUCK_MSK (0x1UL << STM32_RCC_CFGR_STOPWUCK_POS) +#define STM32_RCC_CFGR_STOPWUCK STM32_RCC_CFGR_STOPWUCK_MSK + +/*!< MCOSEL CONFIGURATION */ +#define STM32_RCC_CFGR_MCOSEL_POS 24U +#define STM32_RCC_CFGR_MCOSEL_MSK (0xFUL << STM32_RCC_CFGR_MCOSEL_POS) +#define STM32_RCC_CFGR_MCOSEL STM32_RCC_CFGR_MCOSEL_MSK +#define STM32_RCC_CFGR_MCOSEL_0 (0x1UL << STM32_RCC_CFGR_MCOSEL_POS) +#define STM32_RCC_CFGR_MCOSEL_1 (0x2UL << STM32_RCC_CFGR_MCOSEL_POS) +#define STM32_RCC_CFGR_MCOSEL_2 (0x4UL << STM32_RCC_CFGR_MCOSEL_POS) +#define STM32_RCC_CFGR_MCOSEL_3 (0x8UL << STM32_RCC_CFGR_MCOSEL_POS) + +#define STM32_RCC_CFGR_MCOPRE_POS 28U +#define STM32_RCC_CFGR_MCOPRE_MSK (0x7UL << STM32_RCC_CFGR_MCOPRE_POS) +#define STM32_RCC_CFGR_MCOPRE STM32_RCC_CFGR_MCOPRE_MSK +#define STM32_RCC_CFGR_MCOPRE_0 (0x1UL << STM32_RCC_CFGR_MCOPRE_POS) +#define STM32_RCC_CFGR_MCOPRE_1 (0x2UL << STM32_RCC_CFGR_MCOPRE_POS) +#define STM32_RCC_CFGR_MCOPRE_2 (0x4UL << STM32_RCC_CFGR_MCOPRE_POS) + +#define STM32_RCC_CFGR_MCOPRE_DIV1 (0x00000000UL) +#define STM32_RCC_CFGR_MCOPRE_DIV2 (0x10000000UL) +#define STM32_RCC_CFGR_MCOPRE_DIV4 (0x20000000UL) +#define STM32_RCC_CFGR_MCOPRE_DIV8 (0x30000000UL) +#define STM32_RCC_CFGR_MCOPRE_DIV16 (0x40000000UL) + +/* LEGACY ALIASES */ +#define STM32_RCC_CFGR_MCO_PRE STM32_RCC_CFGR_MCOPRE +#define STM32_RCC_CFGR_MCO_PRE_1 STM32_RCC_CFGR_MCOPRE_DIV1 +#define STM32_RCC_CFGR_MCO_PRE_2 STM32_RCC_CFGR_MCOPRE_DIV2 +#define STM32_RCC_CFGR_MCO_PRE_4 STM32_RCC_CFGR_MCOPRE_DIV4 +#define STM32_RCC_CFGR_MCO_PRE_8 STM32_RCC_CFGR_MCOPRE_DIV8 +#define STM32_RCC_CFGR_MCO_PRE_16 STM32_RCC_CFGR_MCOPRE_DIV16 + +/**************** BIT DEFINITION FOR STM32_RCC_PLLCFGR REGISTER ***********/ +#define STM32_RCC_PLLCFGR_PLLSRC_POS 0U +#define STM32_RCC_PLLCFGR_PLLSRC_MSK (0x3UL << STM32_RCC_PLLCFGR_PLLSRC_POS) +#define STM32_RCC_PLLCFGR_PLLSRC STM32_RCC_PLLCFGR_PLLSRC_MSK + +#define STM32_RCC_PLLCFGR_PLLSRC_MSI_POS 0U +#define STM32_RCC_PLLCFGR_PLLSRC_MSI_MSK \ + (0x1UL << STM32_RCC_PLLCFGR_PLLSRC_MSI_POS) +#define STM32_RCC_PLLCFGR_PLLSRC_MSI STM32_RCC_PLLCFGR_PLLSRC_MSI_MSK +#define STM32_RCC_PLLCFGR_PLLSRC_HSI_POS 1U +#define STM32_RCC_PLLCFGR_PLLSRC_HSI_MSK \ + (0x1UL << STM32_RCC_PLLCFGR_PLLSRC_HSI_POS) +#define STM32_RCC_PLLCFGR_PLLSRC_HSI STM32_RCC_PLLCFGR_PLLSRC_HSI_MSK +#define STM32_RCC_PLLCFGR_PLLSRC_HSE_POS 0U +#define STM32_RCC_PLLCFGR_PLLSRC_HSE_MSK \ + (0x3UL << STM32_RCC_PLLCFGR_PLLSRC_HSE_POS) +#define STM32_RCC_PLLCFGR_PLLSRC_HSE STM32_RCC_PLLCFGR_PLLSRC_HSE_MSK + +#define STM32_RCC_PLLCFGR_PLLM_POS 4U +#define STM32_RCC_PLLCFGR_PLLM_MSK (0x7UL << STM32_RCC_PLLCFGR_PLLM_POS) +#define STM32_RCC_PLLCFGR_PLLM STM32_RCC_PLLCFGR_PLLM_MSK +#define STM32_RCC_PLLCFGR_PLLM_0 (0x1UL << STM32_RCC_PLLCFGR_PLLM_POS) +#define STM32_RCC_PLLCFGR_PLLM_1 (0x2UL << STM32_RCC_PLLCFGR_PLLM_POS) +#define STM32_RCC_PLLCFGR_PLLM_2 (0x4UL << STM32_RCC_PLLCFGR_PLLM_POS) + +#define STM32_RCC_PLLCFGR_PLLN_POS 8U +#define STM32_RCC_PLLCFGR_PLLN_MSK (0x7FUL << STM32_RCC_PLLCFGR_PLLN_POS) +#define STM32_RCC_PLLCFGR_PLLN STM32_RCC_PLLCFGR_PLLN_MSK +#define STM32_RCC_PLLCFGR_PLLN_0 (0x01UL << STM32_RCC_PLLCFGR_PLLN_POS) +#define STM32_RCC_PLLCFGR_PLLN_1 (0x02UL << STM32_RCC_PLLCFGR_PLLN_POS) +#define STM32_RCC_PLLCFGR_PLLN_2 (0x04UL << STM32_RCC_PLLCFGR_PLLN_POS) +#define STM32_RCC_PLLCFGR_PLLN_3 (0x08UL << STM32_RCC_PLLCFGR_PLLN_POS) +#define STM32_RCC_PLLCFGR_PLLN_4 (0x10UL << STM32_RCC_PLLCFGR_PLLN_POS) +#define STM32_RCC_PLLCFGR_PLLN_5 (0x20UL << STM32_RCC_PLLCFGR_PLLN_POS) +#define STM32_RCC_PLLCFGR_PLLN_6 (0x40UL << STM32_RCC_PLLCFGR_PLLN_POS) + +#define STM32_RCC_PLLCFGR_PLLPEN_POS 16U +#define STM32_RCC_PLLCFGR_PLLPEN_MSK (0x1UL << STM32_RCC_PLLCFGR_PLLPEN_POS) +#define STM32_RCC_PLLCFGR_PLLPEN STM32_RCC_PLLCFGR_PLLPEN_MSK +#define STM32_RCC_PLLCFGR_PLLP_POS 17U +#define STM32_RCC_PLLCFGR_PLLP_MSK (0x1UL << STM32_RCC_PLLCFGR_PLLP_POS) +#define STM32_RCC_PLLCFGR_PLLP STM32_RCC_PLLCFGR_PLLP_MSK +#define STM32_RCC_PLLCFGR_PLLQEN_POS 20U +#define STM32_RCC_PLLCFGR_PLLQEN_MSK (0x1UL << STM32_RCC_PLLCFGR_PLLQEN_POS) +#define STM32_RCC_PLLCFGR_PLLQEN STM32_RCC_PLLCFGR_PLLQEN_MSK + +#define STM32_RCC_PLLCFGR_PLLQ_POS 21U +#define STM32_RCC_PLLCFGR_PLLQ_MSK (0x3UL << STM32_RCC_PLLCFGR_PLLQ_POS) +#define STM32_RCC_PLLCFGR_PLLQ STM32_RCC_PLLCFGR_PLLQ_MSK +#define STM32_RCC_PLLCFGR_PLLQ_0 (0x1UL << STM32_RCC_PLLCFGR_PLLQ_POS) +#define STM32_RCC_PLLCFGR_PLLQ_1 (0x2UL << STM32_RCC_PLLCFGR_PLLQ_POS) + +#define STM32_RCC_PLLCFGR_PLLREN_POS 24U +#define STM32_RCC_PLLCFGR_PLLREN_MSK (0x1UL << STM32_RCC_PLLCFGR_PLLREN_POS) +#define STM32_RCC_PLLCFGR_PLLREN STM32_RCC_PLLCFGR_PLLREN_MSK +#define STM32_RCC_PLLCFGR_PLLR_POS 25U +#define STM32_RCC_PLLCFGR_PLLR_MSK (0x3UL << STM32_RCC_PLLCFGR_PLLR_POS) +#define STM32_RCC_PLLCFGR_PLLR STM32_RCC_PLLCFGR_PLLR_MSK +#define STM32_RCC_PLLCFGR_PLLR_0 (0x1UL << STM32_RCC_PLLCFGR_PLLR_POS) +#define STM32_RCC_PLLCFGR_PLLR_1 (0x2UL << STM32_RCC_PLLCFGR_PLLR_POS) + +#define STM32_RCC_PLLCFGR_PLLPDIV_POS 27U +#define STM32_RCC_PLLCFGR_PLLPDIV_MSK (0x1FUL << STM32_RCC_PLLCFGR_PLLPDIV_POS) +#define STM32_RCC_PLLCFGR_PLLPDIV STM32_RCC_PLLCFGR_PLLPDIV_MSK +#define STM32_RCC_PLLCFGR_PLLPDIV_0 (0x01UL << STM32_RCC_PLLCFGR_PLLPDIV_POS) +#define STM32_RCC_PLLCFGR_PLLPDIV_1 (0x02UL << STM32_RCC_PLLCFGR_PLLPDIV_POS) +#define STM32_RCC_PLLCFGR_PLLPDIV_2 (0x04UL << STM32_RCC_PLLCFGR_PLLPDIV_POS) +#define STM32_RCC_PLLCFGR_PLLPDIV_3 (0x08UL << STM32_RCC_PLLCFGR_PLLPDIV_POS) +#define STM32_RCC_PLLCFGR_PLLPDIV_4 (0x10UL << STM32_RCC_PLLCFGR_PLLPDIV_POS) + +/**************** BIT DEFINITION FOR STM32_RCC_PLLSAI1CFGR REGISTER ********/ +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS 8U +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_MSK \ + (0x7FUL << STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N STM32_RCC_PLLSAI1CFGR_PLLSAI1N_MSK +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_0 \ + (0x01UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_1 \ + (0x02UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_2 \ + (0x04UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_3 \ + (0x08UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_4 \ + (0x10UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_5 \ + (0x20UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1N_6 \ + (0x40UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1N_POS) + +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PEN_POS 16U +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PEN_MSK \ + (0x1UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1PEN_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PEN STM32_RCC_PLLSAI1CFGR_PLLSAI1PEN_MSK +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1P_POS 17U +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1P_MSK \ + (0x1UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1P_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1P STM32_RCC_PLLSAI1CFGR_PLLSAI1P_MSK + +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1QEN_POS 20U +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1QEN_MSK \ + (0x1UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1QEN_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1QEN STM32_RCC_PLLSAI1CFGR_PLLSAI1QEN_MSK +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1Q_POS 21U +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1Q_MSK \ + (0x3UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1Q_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1Q STM32_RCC_PLLSAI1CFGR_PLLSAI1Q_MSK +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1Q_0 \ + (0x1UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1Q_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1Q_1 \ + (0x2UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1Q_POS) + +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1REN_POS 24U +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1REN_MSK \ + (0x1UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1REN_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1REN STM32_RCC_PLLSAI1CFGR_PLLSAI1REN_MSK +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1R_POS 25U +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1R_MSK \ + (0x3UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1R_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1R STM32_RCC_PLLSAI1CFGR_PLLSAI1R_MSK +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1R_0 \ + (0x1UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1R_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1R_1 \ + (0x2UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1R_POS) + +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_POS 27U +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_MSK \ + (0x1FUL << STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_MSK +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_0 \ + (0x01UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_1 \ + (0x02UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_2 \ + (0x04UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_3 \ + (0x08UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_POS) +#define STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_4 \ + (0x10UL << STM32_RCC_PLLSAI1CFGR_PLLSAI1PDIV_POS) + +/************** BIT DEFINITION FOR STM32_RCC_CIER REGISTER ******************/ +#define STM32_RCC_CIER_LSIRDYIE_POS 0U +#define STM32_RCC_CIER_LSIRDYIE_MSK (0x1UL << STM32_RCC_CIER_LSIRDYIE_POS) +#define STM32_RCC_CIER_LSIRDYIE STM32_RCC_CIER_LSIRDYIE_MSK +#define STM32_RCC_CIER_LSERDYIE_POS 1U +#define STM32_RCC_CIER_LSERDYIE_MSK (0x1UL << STM32_RCC_CIER_LSERDYIE_POS) +#define STM32_RCC_CIER_LSERDYIE STM32_RCC_CIER_LSERDYIE_MSK +#define STM32_RCC_CIER_MSIRDYIE_POS 2U +#define STM32_RCC_CIER_MSIRDYIE_MSK (0x1UL << STM32_RCC_CIER_MSIRDYIE_POS) +#define STM32_RCC_CIER_MSIRDYIE STM32_RCC_CIER_MSIRDYIE_MSK +#define STM32_RCC_CIER_HSIRDYIE_POS 3U +#define STM32_RCC_CIER_HSIRDYIE_MSK (0x1UL << STM32_RCC_CIER_HSIRDYIE_POS) +#define STM32_RCC_CIER_HSIRDYIE STM32_RCC_CIER_HSIRDYIE_MSK +#define STM32_RCC_CIER_HSERDYIE_POS 4U +#define STM32_RCC_CIER_HSERDYIE_MSK (0x1UL << STM32_RCC_CIER_HSERDYIE_POS) +#define STM32_RCC_CIER_HSERDYIE STM32_RCC_CIER_HSERDYIE_MSK +#define STM32_RCC_CIER_PLLRDYIE_POS 5U +#define STM32_RCC_CIER_PLLRDYIE_MSK (0x1UL << STM32_RCC_CIER_PLLRDYIE_POS) +#define STM32_RCC_CIER_PLLRDYIE STM32_RCC_CIER_PLLRDYIE_MSK +#define STM32_RCC_CIER_PLLSAI1RDYIE_POS 6U +#define STM32_RCC_CIER_PLLSAI1RDYIE_MSK \ + (0x1UL << STM32_RCC_CIER_PLLSAI1RDYIE_POS) +#define STM32_RCC_CIER_PLLSAI1RDYIE STM32_RCC_CIER_PLLSAI1RDYIE_MSK +#define STM32_RCC_CIER_LSECSSIE_POS 9U +#define STM32_RCC_CIER_LSECSSIE_MSK (0x1UL << STM32_RCC_CIER_LSECSSIE_POS) +#define STM32_RCC_CIER_LSECSSIE STM32_RCC_CIER_LSECSSIE_MSK +#define STM32_RCC_CIER_HSI48RDYIE_POS 10U +#define STM32_RCC_CIER_HSI48RDYIE_MSK (0x1UL << STM32_RCC_CIER_HSI48RDYIE_POS) +#define STM32_RCC_CIER_HSI48RDYIE STM32_RCC_CIER_HSI48RDYIE_MSK + +/************** BIT DEFINITION FOR STM32_RCC_CIFR REGISTER ******************/ +#define STM32_RCC_CIFR_LSIRDYF_POS 0U +#define STM32_RCC_CIFR_LSIRDYF_MSK (0x1UL << STM32_RCC_CIFR_LSIRDYF_POS) +#define STM32_RCC_CIFR_LSIRDYF STM32_RCC_CIFR_LSIRDYF_MSK +#define STM32_RCC_CIFR_LSERDYF_POS 1U +#define STM32_RCC_CIFR_LSERDYF_MSK (0x1UL << STM32_RCC_CIFR_LSERDYF_POS) +#define STM32_RCC_CIFR_LSERDYF STM32_RCC_CIFR_LSERDYF_MSK +#define STM32_RCC_CIFR_MSIRDYF_POS 2U +#define STM32_RCC_CIFR_MSIRDYF_MSK (0x1UL << STM32_RCC_CIFR_MSIRDYF_POS) +#define STM32_RCC_CIFR_MSIRDYF STM32_RCC_CIFR_MSIRDYF_MSK +#define STM32_RCC_CIFR_HSIRDYF_POS 3U +#define STM32_RCC_CIFR_HSIRDYF_MSK (0x1UL << STM32_RCC_CIFR_HSIRDYF_POS) +#define STM32_RCC_CIFR_HSIRDYF STM32_RCC_CIFR_HSIRDYF_MSK +#define STM32_RCC_CIFR_HSERDYF_POS 4U +#define STM32_RCC_CIFR_HSERDYF_MSK (0x1UL << STM32_RCC_CIFR_HSERDYF_POS) +#define STM32_RCC_CIFR_HSERDYF STM32_RCC_CIFR_HSERDYF_MSK +#define STM32_RCC_CIFR_PLLRDYF_POS 5U +#define STM32_RCC_CIFR_PLLRDYF_MSK (0x1UL << STM32_RCC_CIFR_PLLRDYF_POS) +#define STM32_RCC_CIFR_PLLRDYF STM32_RCC_CIFR_PLLRDYF_MSK +#define STM32_RCC_CIFR_PLLSAI1RDYF_POS 6U +#define STM32_RCC_CIFR_PLLSAI1RDYF_MSK (0x1UL << STM32_RCC_CIFR_PLLSAI1RDYF_POS) +#define STM32_RCC_CIFR_PLLSAI1RDYF STM32_RCC_CIFR_PLLSAI1RDYF_MSK +#define STM32_RCC_CIFR_CSSF_POS 8U +#define STM32_RCC_CIFR_CSSF_MSK (0x1UL << STM32_RCC_CIFR_CSSF_POS) +#define STM32_RCC_CIFR_CSSF STM32_RCC_CIFR_CSSF_MSK +#define STM32_RCC_CIFR_LSECSSF_POS 9U +#define STM32_RCC_CIFR_LSECSSF_MSK (0x1UL << STM32_RCC_CIFR_LSECSSF_POS) +#define STM32_RCC_CIFR_LSECSSF STM32_RCC_CIFR_LSECSSF_MSK +#define STM32_RCC_CIFR_HSI48RDYF_POS 10U +#define STM32_RCC_CIFR_HSI48RDYF_MSK (0x1UL << STM32_RCC_CIFR_HSI48RDYF_POS) +#define STM32_RCC_CIFR_HSI48RDYF STM32_RCC_CIFR_HSI48RDYF_MSK + +/************** BIT DEFINITION FOR STM32_RCC_CICR REGISTER ******************/ +#define STM32_RCC_CICR_LSIRDYC_POS 0U +#define STM32_RCC_CICR_LSIRDYC_MSK (0x1UL << STM32_RCC_CICR_LSIRDYC_POS) +#define STM32_RCC_CICR_LSIRDYC STM32_RCC_CICR_LSIRDYC_MSK +#define STM32_RCC_CICR_LSERDYC_POS 1U +#define STM32_RCC_CICR_LSERDYC_MSK (0x1UL << STM32_RCC_CICR_LSERDYC_POS) +#define STM32_RCC_CICR_LSERDYC STM32_RCC_CICR_LSERDYC_MSK +#define STM32_RCC_CICR_MSIRDYC_POS 2U +#define STM32_RCC_CICR_MSIRDYC_MSK (0x1UL << STM32_RCC_CICR_MSIRDYC_POS) +#define STM32_RCC_CICR_MSIRDYC STM32_RCC_CICR_MSIRDYC_MSK +#define STM32_RCC_CICR_HSIRDYC_POS 3U +#define STM32_RCC_CICR_HSIRDYC_MSK (0x1UL << STM32_RCC_CICR_HSIRDYC_POS) +#define STM32_RCC_CICR_HSIRDYC STM32_RCC_CICR_HSIRDYC_MSK +#define STM32_RCC_CICR_HSERDYC_POS 4U +#define STM32_RCC_CICR_HSERDYC_MSK (0x1UL << STM32_RCC_CICR_HSERDYC_POS) +#define STM32_RCC_CICR_HSERDYC STM32_RCC_CICR_HSERDYC_MSK +#define STM32_RCC_CICR_PLLRDYC_POS 5U +#define STM32_RCC_CICR_PLLRDYC_MSK (0x1UL << STM32_RCC_CICR_PLLRDYC_POS) +#define STM32_RCC_CICR_PLLRDYC STM32_RCC_CICR_PLLRDYC_MSK +#define STM32_RCC_CICR_PLLSAI1RDYC_POS 6U +#define STM32_RCC_CICR_PLLSAI1RDYC_MSK (0x1UL << STM32_RCC_CICR_PLLSAI1RDYC_POS) +#define STM32_RCC_CICR_PLLSAI1RDYC STM32_RCC_CICR_PLLSAI1RDYC_MSK +#define STM32_RCC_CICR_CSSC_POS 8U +#define STM32_RCC_CICR_CSSC_MSK (0x1UL << STM32_RCC_CICR_CSSC_POS) +#define STM32_RCC_CICR_CSSC STM32_RCC_CICR_CSSC_MSK +#define STM32_RCC_CICR_LSECSSC_POS 9U +#define STM32_RCC_CICR_LSECSSC_MSK (0x1UL << STM32_RCC_CICR_LSECSSC_POS) +#define STM32_RCC_CICR_LSECSSC STM32_RCC_CICR_LSECSSC_MSK +#define STM32_RCC_CICR_HSI48RDYC_POS 10U +#define STM32_RCC_CICR_HSI48RDYC_MSK (0x1UL << STM32_RCC_CICR_HSI48RDYC_POS) +#define STM32_RCC_CICR_HSI48RDYC STM32_RCC_CICR_HSI48RDYC_MSK + +/************** BIT DEFINITION FOR STM32_RCC_AHB1RSTR REGISTER **************/ +#define STM32_RCC_AHB1RSTR_DMA1RST_POS 0U +#define STM32_RCC_AHB1RSTR_DMA1RST_MSK (0x1UL << STM32_RCC_AHB1RSTR_DMA1RST_POS) +#define STM32_RCC_AHB1RSTR_DMA1RST STM32_RCC_AHB1RSTR_DMA1RST_MSK +#define STM32_RCC_AHB1RSTR_DMA2RST_POS 1U +#define STM32_RCC_AHB1RSTR_DMA2RST_MSK (0x1UL << STM32_RCC_AHB1RSTR_DMA2RST_POS) +#define STM32_RCC_AHB1RSTR_DMA2RST STM32_RCC_AHB1RSTR_DMA2RST_MSK +#define STM32_RCC_AHB1RSTR_FLASHRST_POS 8U +#define STM32_RCC_AHB1RSTR_FLASHRST_MSK \ + (0x1UL << STM32_RCC_AHB1RSTR_FLASHRST_POS) +#define STM32_RCC_AHB1RSTR_FLASHRST STM32_RCC_AHB1RSTR_FLASHRST_MSK +#define STM32_RCC_AHB1RSTR_CRCRST_POS 12U +#define STM32_RCC_AHB1RSTR_CRCRST_MSK (0x1UL << STM32_RCC_AHB1RSTR_CRCRST_POS) +#define STM32_RCC_AHB1RSTR_CRCRST STM32_RCC_AHB1RSTR_CRCRST_MSK +#define STM32_RCC_AHB1RSTR_TSCRST_POS 16U +#define STM32_RCC_AHB1RSTR_TSCRST_MSK (0x1UL << STM32_RCC_AHB1RSTR_TSCRST_POS) +#define STM32_RCC_AHB1RSTR_TSCRST STM32_RCC_AHB1RSTR_TSCRST_MSK + +/************** BIT DEFINITION FOR STM32_RCC_AHB2RSTR REGISTER **************/ +#define STM32_RCC_AHB2RSTR_GPIOARST_POS 0U +#define STM32_RCC_AHB2RSTR_GPIOARST_MSK \ + (0x1UL << STM32_RCC_AHB2RSTR_GPIOARST_POS) +#define STM32_RCC_AHB2RSTR_GPIOARST STM32_RCC_AHB2RSTR_GPIOARST_MSK +#define STM32_RCC_AHB2RSTR_GPIOBRST_POS 1U +#define STM32_RCC_AHB2RSTR_GPIOBRST_MSK \ + (0x1UL << STM32_RCC_AHB2RSTR_GPIOBRST_POS) +#define STM32_RCC_AHB2RSTR_GPIOBRST STM32_RCC_AHB2RSTR_GPIOBRST_MSK +#define STM32_RCC_AHB2RSTR_GPIOCRST_POS 2U +#define STM32_RCC_AHB2RSTR_GPIOCRST_MSK \ + (0x1UL << STM32_RCC_AHB2RSTR_GPIOCRST_POS) +#define STM32_RCC_AHB2RSTR_GPIOCRST STM32_RCC_AHB2RSTR_GPIOCRST_MSK +#define STM32_RCC_AHB2RSTR_GPIODRST_POS 3U +#define STM32_RCC_AHB2RSTR_GPIODRST_MSK \ + (0x1UL << STM32_RCC_AHB2RSTR_GPIODRST_POS) +#define STM32_RCC_AHB2RSTR_GPIODRST STM32_RCC_AHB2RSTR_GPIODRST_MSK +#define STM32_RCC_AHB2RSTR_GPIOERST_POS 4U +#define STM32_RCC_AHB2RSTR_GPIOERST_MSK \ + (0x1UL << STM32_RCC_AHB2RSTR_GPIOERST_POS) +#define STM32_RCC_AHB2RSTR_GPIOERST STM32_RCC_AHB2RSTR_GPIOERST_MSK +#define STM32_RCC_AHB2RSTR_GPIOHRST_POS 7U +#define STM32_RCC_AHB2RSTR_GPIOHRST_MSK \ + (0x1UL << STM32_RCC_AHB2RSTR_GPIOHRST_POS) +#define STM32_RCC_AHB2RSTR_GPIOHRST STM32_RCC_AHB2RSTR_GPIOHRST_MSK +#define STM32_RCC_AHB2RSTR_ADCRST_POS 13U +#define STM32_RCC_AHB2RSTR_ADCRST_MSK (0x1UL << STM32_RCC_AHB2RSTR_ADCRST_POS) +#define STM32_RCC_AHB2RSTR_ADCRST STM32_RCC_AHB2RSTR_ADCRST_MSK +#define STM32_RCC_AHB2RSTR_AESRST_POS 16U +#define STM32_RCC_AHB2RSTR_AESRST_MSK (0x1UL << STM32_RCC_AHB2RSTR_AESRST_POS) +#define STM32_RCC_AHB2RSTR_AESRST STM32_RCC_AHB2RSTR_AESRST_MSK +#define STM32_RCC_AHB2RSTR_RNGRST_POS 18U +#define STM32_RCC_AHB2RSTR_RNGRST_MSK (0x1UL << STM32_RCC_AHB2RSTR_RNGRST_POS) +#define STM32_RCC_AHB2RSTR_RNGRST STM32_RCC_AHB2RSTR_RNGRST_MSK + +/************* BIT DEFINITION FOR STM32_RCC_AHB3RSTR REGISTER **************/ +#define STM32_RCC_AHB3RSTR_QSPIRST_POS 8U +#define STM32_RCC_AHB3RSTR_QSPIRST_MSK (0x1UL << STM32_RCC_AHB3RSTR_QSPIRST_POS) +#define STM32_RCC_AHB3RSTR_QSPIRST STM32_RCC_AHB3RSTR_QSPIRST_MSK + +/************* BIT DEFINITION FOR STM32_RCC_APB1RSTR1 REGISTER **************/ +#define STM32_RCC_APB1RSTR1_TIM2RST_POS 0U +#define STM32_RCC_APB1RSTR1_TIM2RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_TIM2RST_POS) +#define STM32_RCC_APB1RSTR1_TIM2RST STM32_RCC_APB1RSTR1_TIM2RST_MSK +#define STM32_RCC_APB1RSTR1_TIM6RST_POS 4U +#define STM32_RCC_APB1RSTR1_TIM6RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_TIM6RST_POS) +#define STM32_RCC_APB1RSTR1_TIM6RST STM32_RCC_APB1RSTR1_TIM6RST_MSK +#define STM32_RCC_APB1RSTR1_TIM7RST_POS 5U +#define STM32_RCC_APB1RSTR1_TIM7RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_TIM7RST_POS) +#define STM32_RCC_APB1RSTR1_TIM7RST STM32_RCC_APB1RSTR1_TIM7RST_MSK +#define STM32_RCC_APB1RSTR1_LCDRST_POS 9U +#define STM32_RCC_APB1RSTR1_LCDRST_MSK (0x1UL << STM32_RCC_APB1RSTR1_LCDRST_POS) +#define STM32_RCC_APB1RSTR1_LCDRST STM32_RCC_APB1RSTR1_LCDRST_MSK +#define STM32_RCC_APB1RSTR1_SPI2RST_POS 14U +#define STM32_RCC_APB1RSTR1_SPI2RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_SPI2RST_POS) +#define STM32_RCC_APB1RSTR1_SPI2RST STM32_RCC_APB1RSTR1_SPI2RST_MSK +#define STM32_RCC_APB1RSTR1_SPI3RST_POS 15U +#define STM32_RCC_APB1RSTR1_SPI3RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_SPI3RST_POS) +#define STM32_RCC_APB1RSTR1_SPI3RST STM32_RCC_APB1RSTR1_SPI3RST_MSK +#define STM32_RCC_APB1RSTR1_USART2RST_POS 17U +#define STM32_RCC_APB1RSTR1_USART2RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_USART2RST_POS) +#define STM32_RCC_APB1RSTR1_USART2RST STM32_RCC_APB1RSTR1_USART2RST_MSK +#define STM32_RCC_APB1RSTR1_USART3RST_POS 18U +#define STM32_RCC_APB1RSTR1_USART3RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_USART3RST_POS) +#define STM32_RCC_APB1RSTR1_USART3RST STM32_RCC_APB1RSTR1_USART3RST_MSK +#define STM32_RCC_APB1RSTR1_I2C1RST_POS 21U +#define STM32_RCC_APB1RSTR1_I2C1RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_I2C1RST_POS) +#define STM32_RCC_APB1RSTR1_I2C1RST STM32_RCC_APB1RSTR1_I2C1RST_MSK +#define STM32_RCC_APB1RSTR1_I2C2RST_POS 22U +#define STM32_RCC_APB1RSTR1_I2C2RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_I2C2RST_POS) +#define STM32_RCC_APB1RSTR1_I2C2RST STM32_RCC_APB1RSTR1_I2C2RST_MSK +#define STM32_RCC_APB1RSTR1_I2C3RST_POS 23U +#define STM32_RCC_APB1RSTR1_I2C3RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_I2C3RST_POS) +#define STM32_RCC_APB1RSTR1_I2C3RST STM32_RCC_APB1RSTR1_I2C3RST_MSK +#define STM32_RCC_APB1RSTR1_CRSRST_POS 24U +#define STM32_RCC_APB1RSTR1_CRSRST_MSK (0x1UL << STM32_RCC_APB1RSTR1_CRSRST_POS) +#define STM32_RCC_APB1RSTR1_CRSRST STM32_RCC_APB1RSTR1_CRSRST_MSK +#define STM32_RCC_APB1RSTR1_CAN1RST_POS 25U +#define STM32_RCC_APB1RSTR1_CAN1RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_CAN1RST_POS) +#define STM32_RCC_APB1RSTR1_CAN1RST STM32_RCC_APB1RSTR1_CAN1RST_MSK +#define STM32_RCC_APB1RSTR1_USBFSRST_POS 26U +#define STM32_RCC_APB1RSTR1_USBFSRST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_USBFSRST_POS) +#define STM32_RCC_APB1RSTR1_USBFSRST STM32_RCC_APB1RSTR1_USBFSRST_MSK +#define STM32_RCC_APB1RSTR1_PWRRST_POS 28U +#define STM32_RCC_APB1RSTR1_PWRRST_MSK (0x1UL << STM32_RCC_APB1RSTR1_PWRRST_POS) +#define STM32_RCC_APB1RSTR1_PWRRST STM32_RCC_APB1RSTR1_PWRRST_MSK +#define STM32_RCC_APB1RSTR1_DAC1RST_POS 29U +#define STM32_RCC_APB1RSTR1_DAC1RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_DAC1RST_POS) +#define STM32_RCC_APB1RSTR1_DAC1RST STM32_RCC_APB1RSTR1_DAC1RST_MSK +#define STM32_RCC_APB1RSTR1_OPAMPRST_POS 30U +#define STM32_RCC_APB1RSTR1_OPAMPRST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_OPAMPRST_POS) +#define STM32_RCC_APB1RSTR1_OPAMPRST STM32_RCC_APB1RSTR1_OPAMPRST_MSK +#define STM32_RCC_APB1RSTR1_LPTIM1RST_POS 31U +#define STM32_RCC_APB1RSTR1_LPTIM1RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR1_LPTIM1RST_POS) +#define STM32_RCC_APB1RSTR1_LPTIM1RST STM32_RCC_APB1RSTR1_LPTIM1RST_MSK + +/************* BIT DEFINITION FOR STM32_RCC_APB1RSTR2 REGISTER **************/ +#define STM32_RCC_APB1RSTR2_LPUART1RST_POS 0U +#define STM32_RCC_APB1RSTR2_LPUART1RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR2_LPUART1RST_POS) +#define STM32_RCC_APB1RSTR2_LPUART1RST STM32_RCC_APB1RSTR2_LPUART1RST_MSK +#define STM32_RCC_APB1RSTR2_SWPMI1RST_POS 2U +#define STM32_RCC_APB1RSTR2_SWPMI1RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR2_SWPMI1RST_POS) +#define STM32_RCC_APB1RSTR2_SWPMI1RST STM32_RCC_APB1RSTR2_SWPMI1RST_MSK +#define STM32_RCC_APB1RSTR2_LPTIM2RST_POS 5U +#define STM32_RCC_APB1RSTR2_LPTIM2RST_MSK \ + (0x1UL << STM32_RCC_APB1RSTR2_LPTIM2RST_POS) +#define STM32_RCC_APB1RSTR2_LPTIM2RST STM32_RCC_APB1RSTR2_LPTIM2RST_MSK + +/************** BIT DEFINITION FOR STM32_RCC_APB2RSTR REGISTER **************/ +#define STM32_RCC_APB2RSTR_SYSCFGRST_POS 0U +#define STM32_RCC_APB2RSTR_SYSCFGRST_MSK \ + (0x1UL << STM32_RCC_APB2RSTR_SYSCFGRST_POS) +#define STM32_RCC_APB2RSTR_SYSCFGRST STM32_RCC_APB2RSTR_SYSCFGRST_MSK +#define STM32_RCC_APB2RSTR_SDMMC1RST_POS 10U +#define STM32_RCC_APB2RSTR_SDMMC1RST_MSK \ + (0x1UL << STM32_RCC_APB2RSTR_SDMMC1RST_POS) +#define STM32_RCC_APB2RSTR_SDMMC1RST STM32_RCC_APB2RSTR_SDMMC1RST_MSK +#define STM32_RCC_APB2RSTR_TIM1RST_POS 11U +#define STM32_RCC_APB2RSTR_TIM1RST_MSK (0x1UL << STM32_RCC_APB2RSTR_TIM1RST_POS) +#define STM32_RCC_APB2RSTR_TIM1RST STM32_RCC_APB2RSTR_TIM1RST_MSK +#define STM32_RCC_APB2RSTR_SPI1RST_POS 12U +#define STM32_RCC_APB2RSTR_SPI1RST_MSK (0x1UL << STM32_RCC_APB2RSTR_SPI1RST_POS) +#define STM32_RCC_APB2RSTR_SPI1RST STM32_RCC_APB2RSTR_SPI1RST_MSK +#define STM32_RCC_APB2RSTR_USART1RST_POS 14U +#define STM32_RCC_APB2RSTR_USART1RST_MSK \ + (0x1UL << STM32_RCC_APB2RSTR_USART1RST_POS) +#define STM32_RCC_APB2RSTR_USART1RST STM32_RCC_APB2RSTR_USART1RST_MSK +#define STM32_RCC_APB2RSTR_TIM15RST_POS 16U +#define STM32_RCC_APB2RSTR_TIM15RST_MSK \ + (0x1UL << STM32_RCC_APB2RSTR_TIM15RST_POS) +#define STM32_RCC_APB2RSTR_TIM15RST STM32_RCC_APB2RSTR_TIM15RST_MSK +#define STM32_RCC_APB2RSTR_TIM16RST_POS 17U +#define STM32_RCC_APB2RSTR_TIM16RST_MSK \ + (0x1UL << STM32_RCC_APB2RSTR_TIM16RST_POS) +#define STM32_RCC_APB2RSTR_TIM16RST STM32_RCC_APB2RSTR_TIM16RST_MSK +#define STM32_RCC_APB2RSTR_SAI1RST_POS 21U +#define STM32_RCC_APB2RSTR_SAI1RST_MSK (0x1UL << STM32_RCC_APB2RSTR_SAI1RST_POS) +#define STM32_RCC_APB2RSTR_SAI1RST STM32_RCC_APB2RSTR_SAI1RST_MSK + +/************** BIT DEFINITION FOR STM32_RCC_AHB1ENR REGISTER ***************/ +#define STM32_RCC_AHB1ENR_DMA1EN_POS 0U +#define STM32_RCC_AHB1ENR_DMA1EN_MSK (0x1UL << STM32_RCC_AHB1ENR_DMA1EN_POS) +#define STM32_RCC_AHB1ENR_DMA1EN STM32_RCC_AHB1ENR_DMA1EN_MSK +#define STM32_RCC_AHB1ENR_DMA2EN_POS 1U +#define STM32_RCC_AHB1ENR_DMA2EN_MSK (0x1UL << STM32_RCC_AHB1ENR_DMA2EN_POS) +#define STM32_RCC_AHB1ENR_DMA2EN STM32_RCC_AHB1ENR_DMA2EN_MSK +#define STM32_RCC_AHB1ENR_FLASHEN_POS 8U +#define STM32_RCC_AHB1ENR_FLASHEN_MSK (0x1UL << STM32_RCC_AHB1ENR_FLASHEN_POS) +#define STM32_RCC_AHB1ENR_FLASHEN STM32_RCC_AHB1ENR_FLASHEN_MSK +#define STM32_RCC_AHB1ENR_CRCEN_POS 12U +#define STM32_RCC_AHB1ENR_CRCEN_MSK (0x1UL << STM32_RCC_AHB1ENR_CRCEN_POS) +#define STM32_RCC_AHB1ENR_CRCEN STM32_RCC_AHB1ENR_CRCEN_MSK +#define STM32_RCC_AHB1ENR_TSCEN_POS 16U +#define STM32_RCC_AHB1ENR_TSCEN_MSK (0x1UL << STM32_RCC_AHB1ENR_TSCEN_POS) +#define STM32_RCC_AHB1ENR_TSCEN STM32_RCC_AHB1ENR_TSCEN_MSK + +/*************** BIT DEFINITION FOR STM32_RCC_AHB2ENR REGISTER *********/ +#define STM32_RCC_AHB2ENR_GPIOAEN_POS 0U +#define STM32_RCC_AHB2ENR_GPIOAEN_MSK (0x1UL << STM32_RCC_AHB2ENR_GPIOAEN_POS) +#define STM32_RCC_AHB2ENR_GPIOAEN STM32_RCC_AHB2ENR_GPIOAEN_MSK +#define STM32_RCC_AHB2ENR_GPIOBEN_POS 1U +#define STM32_RCC_AHB2ENR_GPIOBEN_MSK (0x1UL << STM32_RCC_AHB2ENR_GPIOBEN_POS) +#define STM32_RCC_AHB2ENR_GPIOBEN STM32_RCC_AHB2ENR_GPIOBEN_MSK +#define STM32_RCC_AHB2ENR_GPIOCEN_POS 2U +#define STM32_RCC_AHB2ENR_GPIOCEN_MSK (0x1UL << STM32_RCC_AHB2ENR_GPIOCEN_POS) +#define STM32_RCC_AHB2ENR_GPIOCEN STM32_RCC_AHB2ENR_GPIOCEN_MSK +#define STM32_RCC_AHB2ENR_GPIODEN_POS 3U +#define STM32_RCC_AHB2ENR_GPIODEN_MSK (0x1UL << STM32_RCC_AHB2ENR_GPIODEN_POS) +#define STM32_RCC_AHB2ENR_GPIODEN STM32_RCC_AHB2ENR_GPIODEN_MSK +#define STM32_RCC_AHB2ENR_GPIOEEN_POS 4U +#define STM32_RCC_AHB2ENR_GPIOEEN_MSK (0x1UL << STM32_RCC_AHB2ENR_GPIOEEN_POS) +#define STM32_RCC_AHB2ENR_GPIOEEN STM32_RCC_AHB2ENR_GPIOEEN_MSK +#define STM32_RCC_AHB2ENR_GPIOHEN_POS 7U +#define STM32_RCC_AHB2ENR_GPIOHEN_MSK (0x1UL << STM32_RCC_AHB2ENR_GPIOHEN_POS) +#define STM32_RCC_AHB2ENR_GPIOHEN STM32_RCC_AHB2ENR_GPIOHEN_MSK +#define STM32_RCC_AHB2ENR_ADCEN_POS 13U +#define STM32_RCC_AHB2ENR_ADCEN_MSK (0x1UL << STM32_RCC_AHB2ENR_ADCEN_POS) +#define STM32_RCC_AHB2ENR_ADCEN STM32_RCC_AHB2ENR_ADCEN_MSK +#define STM32_RCC_AHB2ENR_AESEN_POS 16U +#define STM32_RCC_AHB2ENR_AESEN_MSK (0x1UL << STM32_RCC_AHB2ENR_AESEN_POS) +#define STM32_RCC_AHB2ENR_AESEN STM32_RCC_AHB2ENR_AESEN_MSK +#define STM32_RCC_AHB2ENR_RNGEN_POS 18U +#define STM32_RCC_AHB2ENR_RNGEN_MSK (0x1UL << STM32_RCC_AHB2ENR_RNGEN_POS) +#define STM32_RCC_AHB2ENR_RNGEN STM32_RCC_AHB2ENR_RNGEN_MSK + +/************** BIT DEFINITION FOR STM32_RCC_AHB3ENR REGISTER ***************/ +#define STM32_RCC_AHB3ENR_QSPIEN_POS 8U +#define STM32_RCC_AHB3ENR_QSPIEN_MSK (0x1UL << STM32_RCC_AHB3ENR_QSPIEN_POS) +#define STM32_RCC_AHB3ENR_QSPIEN STM32_RCC_AHB3ENR_QSPIEN_MSK + +/************** BIT DEFINITION FOR STM32_RCC_APB1ENR1 REGISTER **************/ +#define STM32_RCC_APB1ENR1_TIM2EN_POS 0U +#define STM32_RCC_APB1ENR1_TIM2EN_MSK (0x1UL << STM32_RCC_APB1ENR1_TIM2EN_POS) +#define STM32_RCC_APB1ENR1_TIM2EN STM32_RCC_APB1ENR1_TIM2EN_MSK +#define STM32_RCC_APB1ENR1_TIM6EN_POS 4U +#define STM32_RCC_APB1ENR1_TIM6EN_MSK (0x1UL << STM32_RCC_APB1ENR1_TIM6EN_POS) +#define STM32_RCC_APB1ENR1_TIM6EN STM32_RCC_APB1ENR1_TIM6EN_MSK +#define STM32_RCC_APB1ENR1_TIM7EN_POS 5U +#define STM32_RCC_APB1ENR1_TIM7EN_MSK (0x1UL << STM32_RCC_APB1ENR1_TIM7EN_POS) +#define STM32_RCC_APB1ENR1_TIM7EN STM32_RCC_APB1ENR1_TIM7EN_MSK +#define STM32_RCC_APB1ENR1_LCDEN_POS 9U +#define STM32_RCC_APB1ENR1_LCDEN_MSK (0x1UL << STM32_RCC_APB1ENR1_LCDEN_POS) +#define STM32_RCC_APB1ENR1_LCDEN STM32_RCC_APB1ENR1_LCDEN_MSK +#define STM32_RCC_APB1ENR1_RTCAPBEN_POS 10U +#define STM32_RCC_APB1ENR1_RTCAPBEN_MSK \ + (0x1UL << STM32_RCC_APB1ENR1_RTCAPBEN_POS) +#define STM32_RCC_APB1ENR1_RTCAPBEN STM32_RCC_APB1ENR1_RTCAPBEN_MSK +#define STM32_RCC_APB1ENR1_WWDGEN_POS 11U +#define STM32_RCC_APB1ENR1_WWDGEN_MSK (0x1UL << STM32_RCC_APB1ENR1_WWDGEN_POS) +#define STM32_RCC_APB1ENR1_WWDGEN STM32_RCC_APB1ENR1_WWDGEN_MSK +#define STM32_RCC_APB1ENR1_SPI2EN_POS 14U +#define STM32_RCC_APB1ENR1_SPI2EN_MSK (0x1UL << STM32_RCC_APB1ENR1_SPI2EN_POS) +#define STM32_RCC_APB1ENR1_SPI2EN STM32_RCC_APB1ENR1_SPI2EN_MSK +#define STM32_RCC_APB1ENR1_SPI3EN_POS 15U +#define STM32_RCC_APB1ENR1_SPI3EN_MSK (0x1UL << STM32_RCC_APB1ENR1_SPI3EN_POS) +#define STM32_RCC_APB1ENR1_SPI3EN STM32_RCC_APB1ENR1_SPI3EN_MSK +#define STM32_RCC_APB1ENR1_USART2EN_POS 17U +#define STM32_RCC_APB1ENR1_USART2EN_MSK \ + (0x1UL << STM32_RCC_APB1ENR1_USART2EN_POS) +#define STM32_RCC_APB1ENR1_USART2EN STM32_RCC_APB1ENR1_USART2EN_MSK +#define STM32_RCC_APB1ENR1_USART3EN_POS 18U +#define STM32_RCC_APB1ENR1_USART3EN_MSK \ + (0x1UL << STM32_RCC_APB1ENR1_USART3EN_POS) +#define STM32_RCC_APB1ENR1_USART3EN STM32_RCC_APB1ENR1_USART3EN_MSK +#define STM32_RCC_APB1ENR1_I2C1EN_POS 21U +#define STM32_RCC_APB1ENR1_I2C1EN_MSK (0x1UL << STM32_RCC_APB1ENR1_I2C1EN_POS) +#define STM32_RCC_APB1ENR1_I2C1EN STM32_RCC_APB1ENR1_I2C1EN_MSK +#define STM32_RCC_APB1ENR1_I2C2EN_POS 22U +#define STM32_RCC_APB1ENR1_I2C2EN_MSK (0x1UL << STM32_RCC_APB1ENR1_I2C2EN_POS) +#define STM32_RCC_APB1ENR1_I2C2EN STM32_RCC_APB1ENR1_I2C2EN_MSK +#define STM32_RCC_APB1ENR1_I2C3EN_POS 23U +#define STM32_RCC_APB1ENR1_I2C3EN_MSK (0x1UL << STM32_RCC_APB1ENR1_I2C3EN_POS) +#define STM32_RCC_APB1ENR1_I2C3EN STM32_RCC_APB1ENR1_I2C3EN_MSK +#define STM32_RCC_APB1ENR1_CRSEN_POS 24U +#define STM32_RCC_APB1ENR1_CRSEN_MSK (0x1UL << STM32_RCC_APB1ENR1_CRSEN_POS) +#define STM32_RCC_APB1ENR1_CRSEN STM32_RCC_APB1ENR1_CRSEN_MSK +#define STM32_RCC_APB1ENR1_CAN1EN_POS 25U +#define STM32_RCC_APB1ENR1_CAN1EN_MSK (0x1UL << STM32_RCC_APB1ENR1_CAN1EN_POS) +#define STM32_RCC_APB1ENR1_CAN1EN STM32_RCC_APB1ENR1_CAN1EN_MSK +#define STM32_RCC_APB1ENR1_USBFSEN_POS 26U +#define STM32_RCC_APB1ENR1_USBFSEN_MSK (0x1UL << STM32_RCC_APB1ENR1_USBFSEN_POS) +#define STM32_RCC_APB1ENR1_USBFSEN STM32_RCC_APB1ENR1_USBFSEN_MSK +#define STM32_RCC_APB1ENR1_PWREN_POS 28U +#define STM32_RCC_APB1ENR1_PWREN_MSK (0x1UL << STM32_RCC_APB1ENR1_PWREN_POS) +#define STM32_RCC_APB1ENR1_PWREN STM32_RCC_APB1ENR1_PWREN_MSK +#define STM32_RCC_APB1ENR1_DAC1EN_POS 29U +#define STM32_RCC_APB1ENR1_DAC1EN_MSK (0x1UL << STM32_RCC_APB1ENR1_DAC1EN_POS) +#define STM32_RCC_APB1ENR1_DAC1EN STM32_RCC_APB1ENR1_DAC1EN_MSK +#define STM32_RCC_APB1ENR1_OPAMPEN_POS 30U +#define STM32_RCC_APB1ENR1_OPAMPEN_MSK (0x1UL << STM32_RCC_APB1ENR1_OPAMPEN_POS) +#define STM32_RCC_APB1ENR1_OPAMPEN STM32_RCC_APB1ENR1_OPAMPEN_MSK +#define STM32_RCC_APB1ENR1_LPTIM1EN_POS 31U +#define STM32_RCC_APB1ENR1_LPTIM1EN_MSK \ + (0x1UL << STM32_RCC_APB1ENR1_LPTIM1EN_POS) +#define STM32_RCC_APB1ENR1_LPTIM1EN STM32_RCC_APB1ENR1_LPTIM1EN_MSK + +/************ BIT DEFINITION FOR STM32_RCC_APB1RSTR2 REGISTER **************/ +#define STM32_RCC_APB1ENR2_LPUART1EN_POS 0U +#define STM32_RCC_APB1ENR2_LPUART1EN_MSK \ + (0x1UL << STM32_RCC_APB1ENR2_LPUART1EN_POS) +#define STM32_RCC_APB1ENR2_LPUART1EN STM32_RCC_APB1ENR2_LPUART1EN_MSK +#define STM32_RCC_APB1ENR2_SWPMI1EN_POS 2U +#define STM32_RCC_APB1ENR2_SWPMI1EN_MSK \ + (0x1UL << STM32_RCC_APB1ENR2_SWPMI1EN_POS) +#define STM32_RCC_APB1ENR2_SWPMI1EN STM32_RCC_APB1ENR2_SWPMI1EN_MSK +#define STM32_RCC_APB1ENR2_LPTIM2EN_POS 5U +#define STM32_RCC_APB1ENR2_LPTIM2EN_MSK \ + (0x1UL << STM32_RCC_APB1ENR2_LPTIM2EN_POS) +#define STM32_RCC_APB1ENR2_LPTIM2EN STM32_RCC_APB1ENR2_LPTIM2EN_MSK + +/************** BIT DEFINITION FOR STM32_RCC_APB2ENR REGISTER ***************/ +#define STM32_RCC_APB2ENR_SYSCFGEN_POS 0U +#define STM32_RCC_APB2ENR_SYSCFGEN_MSK (0x1UL << STM32_RCC_APB2ENR_SYSCFGEN_POS) +#define STM32_RCC_APB2ENR_SYSCFGEN STM32_RCC_APB2ENR_SYSCFGEN_MSK +#define STM32_RCC_APB2ENR_FWEN_POS 7U +#define STM32_RCC_APB2ENR_FWEN_MSK (0x1UL << STM32_RCC_APB2ENR_FWEN_POS) +#define STM32_RCC_APB2ENR_FWEN STM32_RCC_APB2ENR_FWEN_MSK +#define STM32_RCC_APB2ENR_SDMMC1EN_POS 10U +#define STM32_RCC_APB2ENR_SDMMC1EN_MSK (0x1UL << STM32_RCC_APB2ENR_SDMMC1EN_POS) +#define STM32_RCC_APB2ENR_SDMMC1EN STM32_RCC_APB2ENR_SDMMC1EN_MSK +#define STM32_RCC_APB2ENR_TIM1EN_POS 11U +#define STM32_RCC_APB2ENR_TIM1EN_MSK (0x1UL << STM32_RCC_APB2ENR_TIM1EN_POS) +#define STM32_RCC_APB2ENR_TIM1EN STM32_RCC_APB2ENR_TIM1EN_MSK +#define STM32_RCC_APB2ENR_SPI1EN_POS 12U +#define STM32_RCC_APB2ENR_SPI1EN_MSK (0x1UL << STM32_RCC_APB2ENR_SPI1EN_POS) +#define STM32_RCC_APB2ENR_SPI1EN STM32_RCC_APB2ENR_SPI1EN_MSK +#define STM32_RCC_APB2ENR_USART1EN_POS 14U +#define STM32_RCC_APB2ENR_USART1EN_MSK (0x1UL << STM32_RCC_APB2ENR_USART1EN_POS) +#define STM32_RCC_APB2ENR_USART1EN STM32_RCC_APB2ENR_USART1EN_MSK +#define STM32_RCC_APB2ENR_TIM15EN_POS 16U +#define STM32_RCC_APB2ENR_TIM15EN_MSK (0x1UL << STM32_RCC_APB2ENR_TIM15EN_POS) +#define STM32_RCC_APB2ENR_TIM15EN STM32_RCC_APB2ENR_TIM15EN_MSK +#define STM32_RCC_APB2ENR_TIM16EN_POS 17U +#define STM32_RCC_APB2ENR_TIM16EN_MSK (0x1UL << STM32_RCC_APB2ENR_TIM16EN_POS) +#define STM32_RCC_APB2ENR_TIM16EN STM32_RCC_APB2ENR_TIM16EN_MSK +#define STM32_RCC_APB2ENR_SAI1EN_POS 21U +#define STM32_RCC_APB2ENR_SAI1EN_MSK (0x1UL << STM32_RCC_APB2ENR_SAI1EN_POS) +#define STM32_RCC_APB2ENR_SAI1EN STM32_RCC_APB2ENR_SAI1EN_MSK + +/************ BIT DEFINITION FOR STM32_RCC_AHB1SMENR REGISTER ***************/ +#define STM32_RCC_AHB1SMENR_DMA1SMEN_POS 0U +#define STM32_RCC_AHB1SMENR_DMA1SMEN_MSK \ + (0x1UL << STM32_RCC_AHB1SMENR_DMA1SMEN_POS) +#define STM32_RCC_AHB1SMENR_DMA1SMEN STM32_RCC_AHB1SMENR_DMA1SMEN_MSK +#define STM32_RCC_AHB1SMENR_DMA2SMEN_POS 1U +#define STM32_RCC_AHB1SMENR_DMA2SMEN_MSK \ + (0x1UL << STM32_RCC_AHB1SMENR_DMA2SMEN_POS) +#define STM32_RCC_AHB1SMENR_DMA2SMEN STM32_RCC_AHB1SMENR_DMA2SMEN_MSK +#define STM32_RCC_AHB1SMENR_FLASHSMEN_POS 8U +#define STM32_RCC_AHB1SMENR_FLASHSMEN_MSK \ + (0x1UL << STM32_RCC_AHB1SMENR_FLASHSMEN_POS) +#define STM32_RCC_AHB1SMENR_FLASHSMEN STM32_RCC_AHB1SMENR_FLASHSMEN_MSK +#define STM32_RCC_AHB1SMENR_SRAM1SMEN_POS 9U +#define STM32_RCC_AHB1SMENR_SRAM1SMEN_MSK \ + (0x1UL << STM32_RCC_AHB1SMENR_SRAM1SMEN_POS) +#define STM32_RCC_AHB1SMENR_SRAM1SMEN STM32_RCC_AHB1SMENR_SRAM1SMEN_MSK +#define STM32_RCC_AHB1SMENR_CRCSMEN_POS 12U +#define STM32_RCC_AHB1SMENR_CRCSMEN_MSK \ + (0x1UL << STM32_RCC_AHB1SMENR_CRCSMEN_POS) +#define STM32_RCC_AHB1SMENR_CRCSMEN STM32_RCC_AHB1SMENR_CRCSMEN_MSK +#define STM32_RCC_AHB1SMENR_TSCSMEN_POS 16U +#define STM32_RCC_AHB1SMENR_TSCSMEN_MSK \ + (0x1UL << STM32_RCC_AHB1SMENR_TSCSMEN_POS) +#define STM32_RCC_AHB1SMENR_TSCSMEN STM32_RCC_AHB1SMENR_TSCSMEN_MSK + +/************** BIT DEFINITION FOR STM32_RCC_AHB2SMENR REGISTER *************/ +#define STM32_RCC_AHB2SMENR_GPIOASMEN_POS 0U +#define STM32_RCC_AHB2SMENR_GPIOASMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_GPIOASMEN_POS) +#define STM32_RCC_AHB2SMENR_GPIOASMEN STM32_RCC_AHB2SMENR_GPIOASMEN_MSK +#define STM32_RCC_AHB2SMENR_GPIOBSMEN_POS 1U +#define STM32_RCC_AHB2SMENR_GPIOBSMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_GPIOBSMEN_POS) +#define STM32_RCC_AHB2SMENR_GPIOBSMEN STM32_RCC_AHB2SMENR_GPIOBSMEN_MSK +#define STM32_RCC_AHB2SMENR_GPIOCSMEN_POS 2U +#define STM32_RCC_AHB2SMENR_GPIOCSMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_GPIOCSMEN_POS) +#define STM32_RCC_AHB2SMENR_GPIOCSMEN STM32_RCC_AHB2SMENR_GPIOCSMEN_MSK +#define STM32_RCC_AHB2SMENR_GPIODSMEN_POS 3U +#define STM32_RCC_AHB2SMENR_GPIODSMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_GPIODSMEN_POS) +#define STM32_RCC_AHB2SMENR_GPIODSMEN STM32_RCC_AHB2SMENR_GPIODSMEN_MSK +#define STM32_RCC_AHB2SMENR_GPIOESMEN_POS 4U +#define STM32_RCC_AHB2SMENR_GPIOESMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_GPIOESMEN_POS) +#define STM32_RCC_AHB2SMENR_GPIOESMEN STM32_RCC_AHB2SMENR_GPIOESMEN_MSK +#define STM32_RCC_AHB2SMENR_GPIOHSMEN_POS 7U +#define STM32_RCC_AHB2SMENR_GPIOHSMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_GPIOHSMEN_POS) +#define STM32_RCC_AHB2SMENR_GPIOHSMEN STM32_RCC_AHB2SMENR_GPIOHSMEN_MSK +#define STM32_RCC_AHB2SMENR_SRAM2SMEN_POS 9U +#define STM32_RCC_AHB2SMENR_SRAM2SMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_SRAM2SMEN_POS) +#define STM32_RCC_AHB2SMENR_SRAM2SMEN STM32_RCC_AHB2SMENR_SRAM2SMEN_MSK +#define STM32_RCC_AHB2SMENR_ADCSMEN_POS 13U +#define STM32_RCC_AHB2SMENR_ADCSMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_ADCSMEN_POS) +#define STM32_RCC_AHB2SMENR_ADCSMEN STM32_RCC_AHB2SMENR_ADCSMEN_MSK +#define STM32_RCC_AHB2SMENR_AESSMEN_POS 16U +#define STM32_RCC_AHB2SMENR_AESSMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_AESSMEN_POS) +#define STM32_RCC_AHB2SMENR_AESSMEN STM32_RCC_AHB2SMENR_AESSMEN_MSK +#define STM32_RCC_AHB2SMENR_RNGSMEN_POS 18U +#define STM32_RCC_AHB2SMENR_RNGSMEN_MSK \ + (0x1UL << STM32_RCC_AHB2SMENR_RNGSMEN_POS) +#define STM32_RCC_AHB2SMENR_RNGSMEN STM32_RCC_AHB2SMENR_RNGSMEN_MSK + +/************** BIT DEFINITION FOR STM32_RCC_AHB3SMENR REGISTER *************/ +#define STM32_RCC_AHB3SMENR_QSPISMEN_POS 8U +#define STM32_RCC_AHB3SMENR_QSPISMEN_MSK \ + (0x1UL << STM32_RCC_AHB3SMENR_QSPISMEN_POS) +#define STM32_RCC_AHB3SMENR_QSPISMEN STM32_RCC_AHB3SMENR_QSPISMEN_MSK + +/************* BIT DEFINITION FOR STM32_RCC_APB1SMENR1 REGISTER *************/ +#define STM32_RCC_APB1SMENR1_TIM2SMEN_POS 0U +#define STM32_RCC_APB1SMENR1_TIM2SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_TIM2SMEN_POS) +#define STM32_RCC_APB1SMENR1_TIM2SMEN STM32_RCC_APB1SMENR1_TIM2SMEN_MSK +#define STM32_RCC_APB1SMENR1_TIM6SMEN_POS 4U +#define STM32_RCC_APB1SMENR1_TIM6SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_TIM6SMEN_POS) +#define STM32_RCC_APB1SMENR1_TIM6SMEN STM32_RCC_APB1SMENR1_TIM6SMEN_MSK +#define STM32_RCC_APB1SMENR1_TIM7SMEN_POS 5U +#define STM32_RCC_APB1SMENR1_TIM7SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_TIM7SMEN_POS) +#define STM32_RCC_APB1SMENR1_TIM7SMEN STM32_RCC_APB1SMENR1_TIM7SMEN_MSK +#define STM32_RCC_APB1SMENR1_LCDSMEN_POS 9U +#define STM32_RCC_APB1SMENR1_LCDSMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_LCDSMEN_POS) +#define STM32_RCC_APB1SMENR1_LCDSMEN STM32_RCC_APB1SMENR1_LCDSMEN_MSK +#define STM32_RCC_APB1SMENR1_RTCAPBSMEN_POS 10U +#define STM32_RCC_APB1SMENR1_RTCAPBSMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_RTCAPBSMEN_POS) +#define STM32_RCC_APB1SMENR1_RTCAPBSMEN STM32_RCC_APB1SMENR1_RTCAPBSMEN_MSK +#define STM32_RCC_APB1SMENR1_WWDGSMEN_POS 11U +#define STM32_RCC_APB1SMENR1_WWDGSMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_WWDGSMEN_POS) +#define STM32_RCC_APB1SMENR1_WWDGSMEN STM32_RCC_APB1SMENR1_WWDGSMEN_MSK +#define STM32_RCC_APB1SMENR1_SPI2SMEN_POS 14U +#define STM32_RCC_APB1SMENR1_SPI2SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_SPI2SMEN_POS) +#define STM32_RCC_APB1SMENR1_SPI2SMEN STM32_RCC_APB1SMENR1_SPI2SMEN_MSK +#define STM32_RCC_APB1SMENR1_SPI3SMEN_POS 15U +#define STM32_RCC_APB1SMENR1_SPI3SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_SPI3SMEN_POS) +#define STM32_RCC_APB1SMENR1_SPI3SMEN STM32_RCC_APB1SMENR1_SPI3SMEN_MSK +#define STM32_RCC_APB1SMENR1_USART2SMEN_POS 17U +#define STM32_RCC_APB1SMENR1_USART2SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_USART2SMEN_POS) +#define STM32_RCC_APB1SMENR1_USART2SMEN STM32_RCC_APB1SMENR1_USART2SMEN_MSK +#define STM32_RCC_APB1SMENR1_USART3SMEN_POS 18U +#define STM32_RCC_APB1SMENR1_USART3SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_USART3SMEN_POS) +#define STM32_RCC_APB1SMENR1_USART3SMEN STM32_RCC_APB1SMENR1_USART3SMEN_MSK +#define STM32_RCC_APB1SMENR1_I2C1SMEN_POS 21U +#define STM32_RCC_APB1SMENR1_I2C1SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_I2C1SMEN_POS) +#define STM32_RCC_APB1SMENR1_I2C1SMEN STM32_RCC_APB1SMENR1_I2C1SMEN_MSK +#define STM32_RCC_APB1SMENR1_I2C2SMEN_POS 22U +#define STM32_RCC_APB1SMENR1_I2C2SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_I2C2SMEN_POS) +#define STM32_RCC_APB1SMENR1_I2C2SMEN STM32_RCC_APB1SMENR1_I2C2SMEN_MSK +#define STM32_RCC_APB1SMENR1_I2C3SMEN_POS 23U +#define STM32_RCC_APB1SMENR1_I2C3SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_I2C3SMEN_POS) +#define STM32_RCC_APB1SMENR1_I2C3SMEN STM32_RCC_APB1SMENR1_I2C3SMEN_MSK +#define STM32_RCC_APB1SMENR1_CRSSMEN_POS 24U +#define STM32_RCC_APB1SMENR1_CRSSMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_CRSSMEN_POS) +#define STM32_RCC_APB1SMENR1_CRSSMEN STM32_RCC_APB1SMENR1_CRSSMEN_MSK +#define STM32_RCC_APB1SMENR1_CAN1SMEN_POS 25U +#define STM32_RCC_APB1SMENR1_CAN1SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_CAN1SMEN_POS) +#define STM32_RCC_APB1SMENR1_CAN1SMEN STM32_RCC_APB1SMENR1_CAN1SMEN_MSK +#define STM32_RCC_APB1SMENR1_USBFSSMEN_POS 26U +#define STM32_RCC_APB1SMENR1_USBFSSMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_USBFSSMEN_POS) +#define STM32_RCC_APB1SMENR1_USBFSSMEN STM32_RCC_APB1SMENR1_USBFSSMEN_MSK +#define STM32_RCC_APB1SMENR1_PWRSMEN_POS 28U +#define STM32_RCC_APB1SMENR1_PWRSMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_PWRSMEN_POS) +#define STM32_RCC_APB1SMENR1_PWRSMEN STM32_RCC_APB1SMENR1_PWRSMEN_MSK +#define STM32_RCC_APB1SMENR1_DAC1SMEN_POS 29U +#define STM32_RCC_APB1SMENR1_DAC1SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_DAC1SMEN_POS) +#define STM32_RCC_APB1SMENR1_DAC1SMEN STM32_RCC_APB1SMENR1_DAC1SMEN_MSK +#define STM32_RCC_APB1SMENR1_OPAMPSMEN_POS 30U +#define STM32_RCC_APB1SMENR1_OPAMPSMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_OPAMPSMEN_POS) +#define STM32_RCC_APB1SMENR1_OPAMPSMEN STM32_RCC_APB1SMENR1_OPAMPSMEN_MSK +#define STM32_RCC_APB1SMENR1_LPTIM1SMEN_POS 31U +#define STM32_RCC_APB1SMENR1_LPTIM1SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR1_LPTIM1SMEN_POS) +#define STM32_RCC_APB1SMENR1_LPTIM1SMEN STM32_RCC_APB1SMENR1_LPTIM1SMEN_MSK + +/************* BIT DEFINITION FOR STM32_RCC_APB1SMENR2 REGISTER *************/ +#define STM32_RCC_APB1SMENR2_LPUART1SMEN_POS 0U +#define STM32_RCC_APB1SMENR2_LPUART1SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR2_LPUART1SMEN_POS) +#define STM32_RCC_APB1SMENR2_LPUART1SMEN STM32_RCC_APB1SMENR2_LPUART1SMEN_MSK +#define STM32_RCC_APB1SMENR2_SWPMI1SMEN_POS 2U +#define STM32_RCC_APB1SMENR2_SWPMI1SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR2_SWPMI1SMEN_POS) +#define STM32_RCC_APB1SMENR2_SWPMI1SMEN STM32_RCC_APB1SMENR2_SWPMI1SMEN_MSK +#define STM32_RCC_APB1SMENR2_LPTIM2SMEN_POS 5U +#define STM32_RCC_APB1SMENR2_LPTIM2SMEN_MSK \ + (0x1UL << STM32_RCC_APB1SMENR2_LPTIM2SMEN_POS) +#define STM32_RCC_APB1SMENR2_LPTIM2SMEN STM32_RCC_APB1SMENR2_LPTIM2SMEN_MSK + +/************ BIT DEFINITION FOR STM32_RCC_APB2SMENR REGISTER *************/ +#define STM32_RCC_APB2SMENR_SYSCFGSMEN_POS 0U +#define STM32_RCC_APB2SMENR_SYSCFGSMEN_MSK \ + (0x1UL << STM32_RCC_APB2SMENR_SYSCFGSMEN_POS) +#define STM32_RCC_APB2SMENR_SYSCFGSMEN STM32_RCC_APB2SMENR_SYSCFGSMEN_MSK +#define STM32_RCC_APB2SMENR_SDMMC1SMEN_POS 10U +#define STM32_RCC_APB2SMENR_SDMMC1SMEN_MSK \ + (0x1UL << STM32_RCC_APB2SMENR_SDMMC1SMEN_POS) +#define STM32_RCC_APB2SMENR_SDMMC1SMEN STM32_RCC_APB2SMENR_SDMMC1SMEN_MSK +#define STM32_RCC_APB2SMENR_TIM1SMEN_POS 11U +#define STM32_RCC_APB2SMENR_TIM1SMEN_MSK \ + (0x1UL << STM32_RCC_APB2SMENR_TIM1SMEN_POS) +#define STM32_RCC_APB2SMENR_TIM1SMEN STM32_RCC_APB2SMENR_TIM1SMEN_MSK +#define STM32_RCC_APB2SMENR_SPI1SMEN_POS 12U +#define STM32_RCC_APB2SMENR_SPI1SMEN_MSK \ + (0x1UL << STM32_RCC_APB2SMENR_SPI1SMEN_POS) +#define STM32_RCC_APB2SMENR_SPI1SMEN STM32_RCC_APB2SMENR_SPI1SMEN_MSK +#define STM32_RCC_APB2SMENR_USART1SMEN_POS 14U +#define STM32_RCC_APB2SMENR_USART1SMEN_MSK \ + (0x1UL << STM32_RCC_APB2SMENR_USART1SMEN_POS) +#define STM32_RCC_APB2SMENR_USART1SMEN STM32_RCC_APB2SMENR_USART1SMEN_MSK +#define STM32_RCC_APB2SMENR_TIM15SMEN_POS 16U +#define STM32_RCC_APB2SMENR_TIM15SMEN_MSK \ + (0x1UL << STM32_RCC_APB2SMENR_TIM15SMEN_POS) +#define STM32_RCC_APB2SMENR_TIM15SMEN STM32_RCC_APB2SMENR_TIM15SMEN_MSK +#define STM32_RCC_APB2SMENR_TIM16SMEN_POS 17U +#define STM32_RCC_APB2SMENR_TIM16SMEN_MSK \ + (0x1UL << STM32_RCC_APB2SMENR_TIM16SMEN_POS) +#define STM32_RCC_APB2SMENR_TIM16SMEN STM32_RCC_APB2SMENR_TIM16SMEN_MSK +#define STM32_RCC_APB2SMENR_SAI1SMEN_POS 21U +#define STM32_RCC_APB2SMENR_SAI1SMEN_MSK \ + (0x1UL << STM32_RCC_APB2SMENR_SAI1SMEN_POS) +#define STM32_RCC_APB2SMENR_SAI1SMEN STM32_RCC_APB2SMENR_SAI1SMEN_MSK + +/************* BIT DEFINITION FOR STM32_RCC_CCIPR REGISTER ******************/ +#define STM32_RCC_CCIPR_USART1SEL_POS 0U +#define STM32_RCC_CCIPR_USART1SEL_MSK (0x3UL << STM32_RCC_CCIPR_USART1SEL_POS) +#define STM32_RCC_CCIPR_USART1SEL STM32_RCC_CCIPR_USART1SEL_MSK +#define STM32_RCC_CCIPR_USART1SEL_0 (0x1UL << STM32_RCC_CCIPR_USART1SEL_POS) +#define STM32_RCC_CCIPR_USART1SEL_1 (0x2UL << STM32_RCC_CCIPR_USART1SEL_POS) + +#define STM32_RCC_CCIPR_USART2SEL_POS 2U +#define STM32_RCC_CCIPR_USART2SEL_MSK (0x3UL << STM32_RCC_CCIPR_USART2SEL_POS) +#define STM32_RCC_CCIPR_USART2SEL STM32_RCC_CCIPR_USART2SEL_MSK +#define STM32_RCC_CCIPR_USART2SEL_0 (0x1UL << STM32_RCC_CCIPR_USART2SEL_POS) +#define STM32_RCC_CCIPR_USART2SEL_1 (0x2UL << STM32_RCC_CCIPR_USART2SEL_POS) + +#define STM32_RCC_CCIPR_USART3SEL_POS 4U +#define STM32_RCC_CCIPR_USART3SEL_MSK (0x3UL << STM32_RCC_CCIPR_USART3SEL_POS) +#define STM32_RCC_CCIPR_USART3SEL STM32_RCC_CCIPR_USART3SEL_MSK +#define STM32_RCC_CCIPR_USART3SEL_0 (0x1UL << STM32_RCC_CCIPR_USART3SEL_POS) +#define STM32_RCC_CCIPR_USART3SEL_1 (0x2UL << STM32_RCC_CCIPR_USART3SEL_POS) + +#define STM32_RCC_CCIPR_LPUART1SEL_POS 10U +#define STM32_RCC_CCIPR_LPUART1SEL_MSK (0x3UL << STM32_RCC_CCIPR_LPUART1SEL_POS) +#define STM32_RCC_CCIPR_LPUART1SEL STM32_RCC_CCIPR_LPUART1SEL_MSK +#define STM32_RCC_CCIPR_LPUART1SEL_0 (0x1UL << STM32_RCC_CCIPR_LPUART1SEL_POS) +#define STM32_RCC_CCIPR_LPUART1SEL_1 (0x2UL << STM32_RCC_CCIPR_LPUART1SEL_POS) + +#define STM32_RCC_CCIPR_I2C1SEL_POS 12U +#define STM32_RCC_CCIPR_I2C1SEL_MSK (0x3UL << STM32_RCC_CCIPR_I2C1SEL_POS) +#define STM32_RCC_CCIPR_I2C1SEL STM32_RCC_CCIPR_I2C1SEL_MSK +#define STM32_RCC_CCIPR_I2C1SEL_0 (0x1UL << STM32_RCC_CCIPR_I2C1SEL_POS) +#define STM32_RCC_CCIPR_I2C1SEL_1 (0x2UL << STM32_RCC_CCIPR_I2C1SEL_POS) + +#define STM32_RCC_CCIPR_I2C2SEL_POS 14U +#define STM32_RCC_CCIPR_I2C2SEL_MSK (0x3UL << STM32_RCC_CCIPR_I2C2SEL_POS) +#define STM32_RCC_CCIPR_I2C2SEL STM32_RCC_CCIPR_I2C2SEL_MSK +#define STM32_RCC_CCIPR_I2C2SEL_0 (0x1UL << STM32_RCC_CCIPR_I2C2SEL_POS) +#define STM32_RCC_CCIPR_I2C2SEL_1 (0x2UL << STM32_RCC_CCIPR_I2C2SEL_POS) + +#define STM32_RCC_CCIPR_I2C3SEL_POS 16U +#define STM32_RCC_CCIPR_I2C3SEL_MSK (0x3UL << STM32_RCC_CCIPR_I2C3SEL_POS) +#define STM32_RCC_CCIPR_I2C3SEL STM32_RCC_CCIPR_I2C3SEL_MSK +#define STM32_RCC_CCIPR_I2C3SEL_0 (0x1UL << STM32_RCC_CCIPR_I2C3SEL_POS) +#define STM32_RCC_CCIPR_I2C3SEL_1 (0x2UL << STM32_RCC_CCIPR_I2C3SEL_POS) + +#define STM32_RCC_CCIPR_LPTIM1SEL_POS 18U +#define STM32_RCC_CCIPR_LPTIM1SEL_MSK (0x3UL << STM32_RCC_CCIPR_LPTIM1SEL_POS) +#define STM32_RCC_CCIPR_LPTIM1SEL STM32_RCC_CCIPR_LPTIM1SEL_MSK +#define STM32_RCC_CCIPR_LPTIM1SEL_0 (0x1UL << STM32_RCC_CCIPR_LPTIM1SEL_POS) +#define STM32_RCC_CCIPR_LPTIM1SEL_1 (0x2UL << STM32_RCC_CCIPR_LPTIM1SEL_POS) + +#define STM32_RCC_CCIPR_LPTIM2SEL_POS 20U +#define STM32_RCC_CCIPR_LPTIM2SEL_MSK (0x3UL << STM32_RCC_CCIPR_LPTIM2SEL_POS) +#define STM32_RCC_CCIPR_LPTIM2SEL STM32_RCC_CCIPR_LPTIM2SEL_MSK +#define STM32_RCC_CCIPR_LPTIM2SEL_0 (0x1UL << STM32_RCC_CCIPR_LPTIM2SEL_POS) +#define STM32_RCC_CCIPR_LPTIM2SEL_1 (0x2UL << STM32_RCC_CCIPR_LPTIM2SEL_POS) + +#define STM32_RCC_CCIPR_SAI1SEL_POS 22U +#define STM32_RCC_CCIPR_SAI1SEL_MSK (0x3UL << STM32_RCC_CCIPR_SAI1SEL_POS) +#define STM32_RCC_CCIPR_SAI1SEL STM32_RCC_CCIPR_SAI1SEL_MSK +#define STM32_RCC_CCIPR_SAI1SEL_0 (0x1UL << STM32_RCC_CCIPR_SAI1SEL_POS) +#define STM32_RCC_CCIPR_SAI1SEL_1 (0x2UL << STM32_RCC_CCIPR_SAI1SEL_POS) + +#define STM32_RCC_CCIPR_CLK48SEL_POS 26U +#define STM32_RCC_CCIPR_CLK48SEL_MSK (0x3UL << STM32_RCC_CCIPR_CLK48SEL_POS) +#define STM32_RCC_CCIPR_CLK48SEL STM32_RCC_CCIPR_CLK48SEL_MSK +#define STM32_RCC_CCIPR_CLK48SEL_0 (0x1UL << STM32_RCC_CCIPR_CLK48SEL_POS) +#define STM32_RCC_CCIPR_CLK48SEL_1 (0x2UL << STM32_RCC_CCIPR_CLK48SEL_POS) + +#define STM32_RCC_CCIPR_ADCSEL_POS 28U +#define STM32_RCC_CCIPR_ADCSEL_MSK (0x3UL << STM32_RCC_CCIPR_ADCSEL_POS) +#define STM32_RCC_CCIPR_ADCSEL STM32_RCC_CCIPR_ADCSEL_MSK +#define STM32_RCC_CCIPR_ADCSEL_0 (0x1UL << STM32_RCC_CCIPR_ADCSEL_POS) +#define STM32_RCC_CCIPR_ADCSEL_1 (0x2UL << STM32_RCC_CCIPR_ADCSEL_POS) + +#define STM32_RCC_CCIPR_SWPMI1SEL_POS 30U +#define STM32_RCC_CCIPR_SWPMI1SEL_MSK (0x1UL << STM32_RCC_CCIPR_SWPMI1SEL_POS) +#define STM32_RCC_CCIPR_SWPMI1SEL STM32_RCC_CCIPR_SWPMI1SEL_MSK + +/************** BIT DEFINITION FOR STM32_RCC_BDCR REGISTER ******************/ +#define STM32_RCC_BDCR_LSEBYP_POS 2U +#define STM32_RCC_BDCR_LSEBYP_MSK (0x1UL << STM32_RCC_BDCR_LSEBYP_POS) +#define STM32_RCC_BDCR_LSEBYP STM32_RCC_BDCR_LSEBYP_MSK + +#define STM32_RCC_BDCR_LSEDRV_POS 3U +#define STM32_RCC_BDCR_LSEDRV_MSK (0x3UL << STM32_RCC_BDCR_LSEDRV_POS) +#define STM32_RCC_BDCR_LSEDRV STM32_RCC_BDCR_LSEDRV_MSK +#define STM32_RCC_BDCR_LSEDRV_0 (0x1UL << STM32_RCC_BDCR_LSEDRV_POS) +#define STM32_RCC_BDCR_LSEDRV_1 (0x2UL << STM32_RCC_BDCR_LSEDRV_POS) + +#define STM32_RCC_BDCR_LSECSSON_POS 5U +#define STM32_RCC_BDCR_LSECSSON_MSK (0x1UL << STM32_RCC_BDCR_LSECSSON_POS) +#define STM32_RCC_BDCR_LSECSSON STM32_RCC_BDCR_LSECSSON_MSK +#define STM32_RCC_BDCR_LSECSSD_POS 6U +#define STM32_RCC_BDCR_LSECSSD_MSK (0x1UL << STM32_RCC_BDCR_LSECSSD_POS) +#define STM32_RCC_BDCR_LSECSSD STM32_RCC_BDCR_LSECSSD_MSK + +#define STM32_RCC_BDCR_RTCSEL_POS 8U +#define STM32_RCC_BDCR_RTCSEL_MSK (0x3UL << STM32_RCC_BDCR_RTCSEL_POS) +#define STM32_RCC_BDCR_RTCSEL STM32_RCC_BDCR_RTCSEL_MSK +#define STM32_RCC_BDCR_RTCSEL_0 (0x1UL << STM32_RCC_BDCR_RTCSEL_POS) +#define STM32_RCC_BDCR_RTCSEL_1 (0x2UL << STM32_RCC_BDCR_RTCSEL_POS) + +#define STM32_RCC_BDCR_LSCOEN_POS 24U +#define STM32_RCC_BDCR_LSCOEN_MSK (0x1UL << STM32_RCC_BDCR_LSCOEN_POS) +#define STM32_RCC_BDCR_LSCOEN STM32_RCC_BDCR_LSCOEN_MSK +#define STM32_RCC_BDCR_LSCOSEL_POS 25U +#define STM32_RCC_BDCR_LSCOSEL_MSK (0x1UL << STM32_RCC_BDCR_LSCOSEL_POS) +#define STM32_RCC_BDCR_LSCOSEL STM32_RCC_BDCR_LSCOSEL_MSK + +/************** BIT DEFINITION FOR STM32_RCC_CSR REGISTER *******************/ +#define STM32_RCC_CSR_LSION_POS 0U +#define STM32_RCC_CSR_LSION_MSK (0x1UL << STM32_RCC_CSR_LSION_POS) +#define STM32_RCC_CSR_LSION STM32_RCC_CSR_LSION_MSK +#define STM32_RCC_CSR_LSIRDY_POS 1U +#define STM32_RCC_CSR_LSIRDY_MSK (0x1UL << STM32_RCC_CSR_LSIRDY_POS) +#define STM32_RCC_CSR_LSIRDY STM32_RCC_CSR_LSIRDY_MSK + +#define STM32_RCC_CSR_MSISRANGE_POS 8U +#define STM32_RCC_CSR_MSISRANGE_MSK (0xFUL << STM32_RCC_CSR_MSISRANGE_POS) +#define STM32_RCC_CSR_MSISRANGE STM32_RCC_CSR_MSISRANGE_MSK +#define STM32_RCC_CSR_MSISRANGE_1 (0x4UL << STM32_RCC_CSR_MSISRANGE_POS) +#define STM32_RCC_CSR_MSISRANGE_2 (0x5UL << STM32_RCC_CSR_MSISRANGE_POS) +#define STM32_RCC_CSR_MSISRANGE_4 (0x6UL << STM32_RCC_CSR_MSISRANGE_POS) +#define STM32_RCC_CSR_MSISRANGE_8 (0x7UL << STM32_RCC_CSR_MSISRANGE_POS) + +#define STM32_RCC_CSR_RMVF_POS 23U +#define STM32_RCC_CSR_RMVF_MSK (0x1UL << STM32_RCC_CSR_RMVF_POS) +#define STM32_RCC_CSR_RMVF STM32_RCC_CSR_RMVF_MSK +#define STM32_RCC_CSR_FWRSTF_POS 24U +#define STM32_RCC_CSR_FWRSTF_MSK (0x1UL << STM32_RCC_CSR_FWRSTF_POS) +#define STM32_RCC_CSR_FWRSTF STM32_RCC_CSR_FWRSTF_MSK +#define STM32_RCC_CSR_OBLRSTF_POS 25U +#define STM32_RCC_CSR_OBLRSTF_MSK (0x1UL << STM32_RCC_CSR_OBLRSTF_POS) +#define STM32_RCC_CSR_OBLRSTF STM32_RCC_CSR_OBLRSTF_MSK +#define STM32_RCC_CSR_PINRSTF_POS 26U +#define STM32_RCC_CSR_PINRSTF_MSK (0x1UL << STM32_RCC_CSR_PINRSTF_POS) +#define STM32_RCC_CSR_PINRSTF STM32_RCC_CSR_PINRSTF_MSK +#define STM32_RCC_CSR_BORRSTF_POS 27U +#define STM32_RCC_CSR_BORRSTF_MSK (0x1UL << STM32_RCC_CSR_BORRSTF_POS) +#define STM32_RCC_CSR_BORRSTF STM32_RCC_CSR_BORRSTF_MSK +#define STM32_RCC_CSR_SFTRSTF_POS 28U +#define STM32_RCC_CSR_SFTRSTF_MSK (0x1UL << STM32_RCC_CSR_SFTRSTF_POS) +#define STM32_RCC_CSR_SFTRSTF STM32_RCC_CSR_SFTRSTF_MSK +#define STM32_RCC_CSR_IWDGRSTF_POS 29U +#define STM32_RCC_CSR_IWDGRSTF_MSK (0x1UL << STM32_RCC_CSR_IWDGRSTF_POS) +#define STM32_RCC_CSR_IWDGRSTF STM32_RCC_CSR_IWDGRSTF_MSK +#define STM32_RCC_CSR_WWDGRSTF_POS 30U +#define STM32_RCC_CSR_WWDGRSTF_MSK (0x1UL << STM32_RCC_CSR_WWDGRSTF_POS) +#define STM32_RCC_CSR_WWDGRSTF STM32_RCC_CSR_WWDGRSTF_MSK +#define STM32_RCC_CSR_LPWRRSTF_POS 31U +#define STM32_RCC_CSR_LPWRRSTF_MSK (0x1UL << STM32_RCC_CSR_LPWRRSTF_POS) +#define STM32_RCC_CSR_LPWRRSTF STM32_RCC_CSR_LPWRRSTF_MSK + +/************** Bit definition for STM32_RCC_CRRCR register *****************/ +#define STM32_RCC_CRRCR_HSI48ON_POS 0U +#define STM32_RCC_CRRCR_HSI48ON_MSK (0x1UL << STM32_RCC_CRRCR_HSI48ON_POS) +#define STM32_RCC_CRRCR_HSI48ON STM32_RCC_CRRCR_HSI48ON_MSK +#define STM32_RCC_CRRCR_HSI48RDY_POS 1U +#define STM32_RCC_CRRCR_HSI48RDY_MSK (0x1UL << STM32_RCC_CRRCR_HSI48RDY_POS) +#define STM32_RCC_CRRCR_HSI48RDY STM32_RCC_CRRCR_HSI48RDY_MSK + +/*!< HSI48CAL configuration */ +#define STM32_RCC_CRRCR_HSI48CAL_POS 7U +#define STM32_RCC_CRRCR_HSI48CAL_MSK (0x1FFUL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL STM32_RCC_CRRCR_HSI48CAL_MSK +#define STM32_RCC_CRRCR_HSI48CAL_0 (0x001UL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL_1 (0x002UL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL_2 (0x004UL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL_3 (0x008UL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL_4 (0x010UL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL_5 (0x020UL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL_6 (0x040UL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL_7 (0x080UL << STM32_RCC_CRRCR_HSI48CAL_POS) +#define STM32_RCC_CRRCR_HSI48CAL_8 (0x100UL << STM32_RCC_CRRCR_HSI48CAL_POS) + +#define STM32_SYSCFG_CFGR1 REG32(STM32_SYSCFG_BASE + 0x04) +#define STM32_SYSCFG_EXTICR(n) REG32(STM32_SYSCFG_BASE + 8 + 4 * (n)) +#define STM32_SYSCFG_I2CFMP(n) BIT(n + 21) + +/* Peripheral bits for STM32_RCC_APB/AHB and DBGMCU regs */ +#define STM32_RCC_PB1_PWREN BIT(28) + +#define STM32_RCC_PB2_SYSCFGEN BIT(0) +#define STM32_RCC_PB2_USART1 BIT(14) +#define STM32_RCC_HB1_DMA1 BIT(0) +#define STM32_RCC_HB1_DMA2 BIT(1) -/* Peripheral bits for RCC_APB/AHB and DBGMCU regs */ -#define STM32_RCC_PB2_USART1 BIT(14) +#define STM32_RCC_HB2_GPIOA BIT(0) +#define STM32_RCC_HB2_GPIOB BIT(1) +#define STM32_RCC_HB2_GPIOC BIT(2) +#define STM32_RCC_HB2_GPIOD BIT(3) +#define STM32_RCC_HB2_GPIOE BIT(4) +#define STM32_RCC_HB2_GPIOH BIT(7) +#define STM32_RCC_HB2_ADC1 BIT(13) /* Reset causes definitions */ /* Reset causes in RCC CSR register */ -#define STM32_RCC_RESET_CAUSE STM32_RCC_CSR +#define STM32_RCC_RESET_CAUSE STM32_RCC_CSR #define RESET_CAUSE_WDG 0x60000000 #define RESET_CAUSE_SFT 0x10000000 #define RESET_CAUSE_POR 0x08000000 #define RESET_CAUSE_PIN 0x04000000 -#define RESET_CAUSE_OTHER 0xfe000000 -#define RESET_CAUSE_RMVF 0x01000000 +#define RESET_CAUSE_OTHER 0xff000000 +#define RESET_CAUSE_RMVF BIT(23) /* Power cause in PWR CSR register */ -#define STM32_PWR_RESET_CAUSE STM32_PWR_CSR -#define STM32_PWR_RESET_CAUSE_CLR STM32_PWR_CR -#define RESET_CAUSE_SBF 0x00000002 -#define RESET_CAUSE_SBF_CLR 0x00000004 +#define STM32_PWR_RESET_CAUSE STM32_PWR_CSR +#define STM32_PWR_RESET_CAUSE_CLR STM32_PWR_SCR +#define RESET_CAUSE_SBF BIT(8) +#define RESET_CAUSE_SBF_CLR BIT(8) /* --- Watchdogs --- */ @@ -522,13 +1740,18 @@ #define STM32_RTC_CR REG32(STM32_RTC_BASE + 0x08) #define STM32_RTC_CR_BYPSHAD BIT(5) #define STM32_RTC_CR_ALRAE BIT(8) +#define STM32_RTC_CR_WUTE BIT(10) #define STM32_RTC_CR_ALRAIE BIT(12) +#define STM32_RTC_CR_WUTIE BIT(14) #define STM32_RTC_ISR REG32(STM32_RTC_BASE + 0x0C) #define STM32_RTC_ISR_ALRAWF BIT(0) +#define STM32_RTC_ISR_WUTWF BIT(2) +#define STM32_RTC_ISR_INITS BIT(4) #define STM32_RTC_ISR_RSF BIT(5) #define STM32_RTC_ISR_INITF BIT(6) #define STM32_RTC_ISR_INIT BIT(7) #define STM32_RTC_ISR_ALRAF BIT(8) +#define STM32_RTC_ISR_WUTF BIT(9) #define STM32_RTC_PRER REG32(STM32_RTC_BASE + 0x10) #define STM32_RTC_PRER_A_MASK (0x7f << 16) #define STM32_RTC_PRER_S_MASK (0x7fff << 0) @@ -544,9 +1767,37 @@ #define STM32_RTC_ALRMASSR REG32(STM32_RTC_BASE + 0x44) #define STM32_RTC_BACKUP(n) REG32(STM32_RTC_BASE + 0x50 + 4 * (n)) +#define STM32_RTC_CLEAR_FLAG(x) \ + (STM32_RTC_ISR = (~((x) | STM32_RTC_ISR_INIT) | \ + (STM32_RTC_ISR & STM32_RTC_ISR_INIT))) + #define STM32_BKP_DATA(n) STM32_RTC_BACKUP(n) #define STM32_BKP_BYTES 128 +#define RTC_TR_PM_POS 22U +#define RTC_TR_PM_MSK (0x1UL << RTC_TR_PM_POS) +#define RTC_TR_PM RTC_TR_PM_MSK +#define RTC_TR_HT_POS 20U +#define RTC_TR_HT_MSK (0x3UL << RTC_TR_HT_POS) +#define RTC_TR_HT RTC_TR_HT_MSK +#define RTC_TR_HU_POS 16U +#define RTC_TR_HU_MSK (0xFUL << RTC_TR_HU_POS) +#define RTC_TR_HU RTC_TR_HU_MSK +#define RTC_TR_MNT_POS 12U +#define RTC_TR_MNT_MSK (0x7UL << RTC_TR_MNT_POS) +#define RTC_TR_MNT RTC_TR_MNT_MSK +#define RTC_TR_MNU_POS 8U +#define RTC_TR_MNU_MSK (0xFUL << RTC_TR_MNU_POS) +#define RTC_TR_MNU RTC_TR_MNU_MSK +#define RTC_TR_ST_POS 4U +#define RTC_TR_ST_MSK (0x7UL << RTC_TR_ST_POS) +#define RTC_TR_ST RTC_TR_ST_MSK +#define RTC_TR_SU_POS 0U +#define RTC_TR_SU_MSK (0xFUL << RTC_TR_SU_POS) +#define RTC_TR_SU RTC_TR_SU_MSK + + + /* --- SPI --- */ /* The SPI controller registers */ @@ -555,15 +1806,15 @@ struct stm32_spi_regs { uint16_t _pad0; uint16_t cr2; uint16_t _pad1; - unsigned sr; + unsigned int sr; uint8_t dr; uint8_t _pad2; uint16_t _pad3; - unsigned crcpr; - unsigned rxcrcr; - unsigned txcrcr; - unsigned i2scfgr; /* STM32L only */ - unsigned i2spr; /* STM32L only */ + unsigned int crcpr; + unsigned int rxcrcr; + unsigned int txcrcr; + unsigned int i2scfgr; /* STM32L only */ + unsigned int i2spr; /* STM32L only */ }; /* Must be volatile, or compiler optimizes out repeated accesses */ typedef volatile struct stm32_spi_regs stm32_spi_regs_t; @@ -654,11 +1905,71 @@ typedef volatile struct stm32_spi_regs stm32_spi_regs_t; #define STM32_EXTI_SWIER REG32(STM32_EXTI_BASE + 0x10) #define STM32_EXTI_PR REG32(STM32_EXTI_BASE + 0x14) +#define EXTI_RTC_ALR_EVENT BIT(18) /* --- ADC --- */ - -/* --- Comparators --- */ - +#define STM32_ADC1_ISR REG32(STM32_ADC1_BASE + 0x00) +#define STM32_ADC1_ISR_ADRDY BIT(0) +#define STM32_ADC1_IER REG32(STM32_ADC1_BASE + 0x04) +#define STM32_ADC1_IER_AWDIE BIT(7) +#define STM32_ADC1_IER_OVRIE BIT(4) +#define STM32_ADC1_IER_EOSEQIE BIT(3) +#define STM32_ADC1_IER_EOCIE BIT(2) +#define STM32_ADC1_IER_EOSMPIE BIT(1) +#define STM32_ADC1_IER_ADRDYIE BIT(0) + +#define STM32_ADC1_CR REG32(STM32_ADC1_BASE + 0x08) +#define STM32_ADC1_CR_ADEN BIT(0) +#define STM32_ADC1_CR_ADDIS BIT(1) +#define STM32_ADC1_CR_ADSTP BIT(4) +#define STM32_ADC1_CR_ADVREGEN BIT(28) +#define STM32_ADC1_CR_DEEPPWD BIT(29) +#define STM32_ADC1_CR_ADCAL BIT(31) +#define STM32_ADC1_CFGR REG32(STM32_ADC1_BASE + 0x0C) +/* Analog watchdog channel selection */ +#define STM32_ADC1_CFGR_AWDCH_MASK (0x1f << 26) +#define STM32_ADC1_CFGR_AWDEN BIT(23) +#define STM32_ADC1_CFGR_AWDSGL BIT(22) +#define STM32_ADC1_CFGR_AUTDLY BIT(14) +/* Selects single vs continuous */ +#define STM32_ADC1_CFGR_CONT BIT(13) +/* Selects ADC_DR overwrite vs preserve */ +#define STM32_ADC1_CFGR_OVRMOD BIT(12) +/* External trigger polarity selection */ +#define STM32_ADC1_CFGR_EXTEN_DIS (0 << 10) +#define STM32_ADC1_CFGR_EXTEN_RISE (1 << 10) +#define STM32_ADC1_CFGR_EXTEN_FALL (2 << 10) +#define STM32_ADC1_CFGR_EXTEN_BOTH (3 << 10) +#define STM32_ADC1_CFGR_EXTEN_MASK (3 << 10) +#define STM32_ADC1_CFGR_ALIGN BIT(5) +/* External trigger selection */ +#define STM32_ADC1_CFGR_TRG0 (0 << 6) +#define STM32_ADC1_CFGR_TRG1 (1 << 6) +#define STM32_ADC1_CFGR_TRG2 (2 << 6) +#define STM32_ADC1_CFGR_TRG3 (3 << 6) +#define STM32_ADC1_CFGR_TRG4 (4 << 6) +#define STM32_ADC1_CFGR_TRG5 (5 << 6) +#define STM32_ADC1_CFGR_TRG6 (6 << 6) +#define STM32_ADC1_CFGR_TRG7 (7 << 6) +#define STM32_ADC1_CFGR_TRG_MASK (7 << 6) +/* Selects circular vs one-shot */ +#define STM32_ADC1_CFGR_DMACFG BIT(1) +#define STM32_ADC1_CFGR_DMAEN BIT(0) +#define STM32_ADC1_CFGR2 REG32(STM32_ADC1_BASE + 0x10) +/* Sampling time selection - 1.5 ADC cycles min, 239.5 cycles max */ +#define STM32_ADC1_SMPR1 REG32(STM32_ADC1_BASE + 0x14) +#define STM32_ADC1_SMPR2 REG32(STM32_ADC1_BASE + 0x18) +/* Macro to convert enum stm32_adc_smpr to SMP bits of the ADC_SMPR register */ +#define STM32_ADC1_SMPR_SMP(s) ((s) - 1) +#define STM32_ADC1_TR REG32(STM32_ADC1_BASE + 0x20) +#define STM32_ADC1_CHSELR REG32(STM32_ADC1_BASE + 0x28) +#define STM32_ADC1_DR REG32(STM32_ADC1_BASE + 0x40) +#define STM32_ADC1_JSQR REG32(STM32_ADC1_BASE + 0x4C) +#define STM32_ADC1_JDR1 REG32(STM32_ADC1_BASE + 0x80) +#define STM32_ADC1_JDR2 REG32(STM32_ADC1_BASE + 0x84) +#define STM32_ADC1_JDR3 REG32(STM32_ADC1_BASE + 0x88) +#define STM32_ADC1_JDR4 REG32(STM32_ADC1_BASE + 0x8C) +#define STM32_ADC1_CCR REG32(STM32_ADC1_BASE + 0x308) /* --- DMA --- */ @@ -692,28 +2003,18 @@ enum dma_channel { STM32_DMAC_CH12 = 11, STM32_DMAC_CH13 = 12, STM32_DMAC_CH14 = 13, + STM32_DMAC_CH15 = 14, /* Channel functions */ - STM32_DMAC_ADC = STM32_DMAC_CH1, STM32_DMAC_SPI1_RX = STM32_DMAC_CH2, STM32_DMAC_SPI1_TX = STM32_DMAC_CH3, - STM32_DMAC_DAC_CH1 = STM32_DMAC_CH2, - STM32_DMAC_DAC_CH2 = STM32_DMAC_CH3, - STM32_DMAC_I2C2_TX = STM32_DMAC_CH4, - STM32_DMAC_I2C2_RX = STM32_DMAC_CH5, - STM32_DMAC_USART1_TX = STM32_DMAC_CH4, - STM32_DMAC_USART1_RX = STM32_DMAC_CH5, - STM32_DMAC_USART2_RX = STM32_DMAC_CH6, - STM32_DMAC_USART2_TX = STM32_DMAC_CH7, - STM32_DMAC_I2C1_TX = STM32_DMAC_CH6, - STM32_DMAC_I2C1_RX = STM32_DMAC_CH7, - STM32_DMAC_PMSE_ROW = STM32_DMAC_CH6, - STM32_DMAC_PMSE_COL = STM32_DMAC_CH7, + STM32_DMAC_USART1_TX = STM32_DMAC_CH14, + STM32_DMAC_USART1_RX = STM32_DMAC_CH15, STM32_DMAC_SPI2_RX = STM32_DMAC_CH4, STM32_DMAC_SPI2_TX = STM32_DMAC_CH5, STM32_DMAC_SPI3_RX = STM32_DMAC_CH9, STM32_DMAC_SPI3_TX = STM32_DMAC_CH10, - STM32_DMAC_COUNT = 14, + STM32_DMAC_COUNT = 15, }; #define STM32_DMAC_PER_CTLR 8 @@ -809,124 +2110,5 @@ typedef volatile struct stm32_dma_regs stm32_dma_regs_t; #define STM32_DMA_CCR_PL_VERY_HIGH (3 << 12) #define STM32_DMA_CCR_MEM2MEM BIT(14) - -/* --- CRC --- */ -#define STM32_CRC_DR REG32(STM32_CRC_BASE + 0x0) -#define STM32_CRC_DR32 REG32(STM32_CRC_BASE + 0x0) -#define STM32_CRC_DR16 REG16(STM32_CRC_BASE + 0x0) -#define STM32_CRC_DR8 REG8(STM32_CRC_BASE + 0x0) - -#define STM32_CRC_IDR REG32(STM32_CRC_BASE + 0x4) -#define STM32_CRC_CR REG32(STM32_CRC_BASE + 0x8) -#define STM32_CRC_INIT REG32(STM32_CRC_BASE + 0x10) -#define STM32_CRC_POL REG32(STM32_CRC_BASE + 0x14) - -#define STM32_CRC_CR_RESET BIT(0) -#define STM32_CRC_CR_POLYSIZE_32 (0 << 3) -#define STM32_CRC_CR_POLYSIZE_16 (1 << 3) -#define STM32_CRC_CR_POLYSIZE_8 (2 << 3) -#define STM32_CRC_CR_POLYSIZE_7 (3 << 3) -#define STM32_CRC_CR_REV_IN_BYTE (1 << 5) -#define STM32_CRC_CR_REV_IN_HWORD (2 << 5) -#define STM32_CRC_CR_REV_IN_WORD (3 << 5) -#define STM32_CRC_CR_REV_OUT BIT(7) - -/* --- USB --- */ -#define STM32_USB_EP(n) REG16(STM32_USB_FS_BASE + (n) * 4) - -#define STM32_USB_CNTR REG16(STM32_USB_FS_BASE + 0x40) - -#define STM32_USB_CNTR_FRES BIT(0) -#define STM32_USB_CNTR_PDWN BIT(1) -#define STM32_USB_CNTR_LP_MODE BIT(2) -#define STM32_USB_CNTR_FSUSP BIT(3) -#define STM32_USB_CNTR_RESUME BIT(4) -#define STM32_USB_CNTR_L1RESUME BIT(5) -#define STM32_USB_CNTR_L1REQM BIT(7) -#define STM32_USB_CNTR_ESOFM BIT(8) -#define STM32_USB_CNTR_SOFM BIT(9) -#define STM32_USB_CNTR_RESETM BIT(10) -#define STM32_USB_CNTR_SUSPM BIT(11) -#define STM32_USB_CNTR_WKUPM BIT(12) -#define STM32_USB_CNTR_ERRM BIT(13) -#define STM32_USB_CNTR_PMAOVRM BIT(14) -#define STM32_USB_CNTR_CTRM BIT(15) - -#define STM32_USB_ISTR REG16(STM32_USB_FS_BASE + 0x44) - -#define STM32_USB_ISTR_EP_ID_MASK (0x000f) -#define STM32_USB_ISTR_DIR BIT(4) -#define STM32_USB_ISTR_L1REQ BIT(7) -#define STM32_USB_ISTR_ESOF BIT(8) -#define STM32_USB_ISTR_SOF BIT(9) -#define STM32_USB_ISTR_RESET BIT(10) -#define STM32_USB_ISTR_SUSP BIT(11) -#define STM32_USB_ISTR_WKUP BIT(12) -#define STM32_USB_ISTR_ERR BIT(13) -#define STM32_USB_ISTR_PMAOVR BIT(14) -#define STM32_USB_ISTR_CTR BIT(15) - -#define STM32_USB_FNR REG16(STM32_USB_FS_BASE + 0x48) - -#define STM32_USB_FNR_RXDP_RXDM_SHIFT (14) -#define STM32_USB_FNR_RXDP_RXDM_MASK (3 << STM32_USB_FNR_RXDP_RXDM_SHIFT) - -#define STM32_USB_DADDR REG16(STM32_USB_FS_BASE + 0x4C) -#define STM32_USB_BTABLE REG16(STM32_USB_FS_BASE + 0x50) -#define STM32_USB_LPMCSR REG16(STM32_USB_FS_BASE + 0x54) -#define STM32_USB_BCDR REG16(STM32_USB_FS_BASE + 0x58) - -#define STM32_USB_BCDR_BCDEN BIT(0) -#define STM32_USB_BCDR_DCDEN BIT(1) -#define STM32_USB_BCDR_PDEN BIT(2) -#define STM32_USB_BCDR_SDEN BIT(3) -#define STM32_USB_BCDR_DCDET BIT(4) -#define STM32_USB_BCDR_PDET BIT(5) -#define STM32_USB_BCDR_SDET BIT(6) -#define STM32_USB_BCDR_PS2DET BIT(7) - -#define EP_MASK 0x0F0F -#define EP_TX_DTOG 0x0040 -#define EP_TX_MASK 0x0030 -#define EP_TX_VALID 0x0030 -#define EP_TX_NAK 0x0020 -#define EP_TX_STALL 0x0010 -#define EP_TX_DISAB 0x0000 -#define EP_RX_DTOG 0x4000 -#define EP_RX_MASK 0x3000 -#define EP_RX_VALID 0x3000 -#define EP_RX_NAK 0x2000 -#define EP_RX_STALL 0x1000 -#define EP_RX_DISAB 0x0000 - -#define EP_STATUS_OUT 0x0100 - -#define EP_TX_RX_MASK (EP_TX_MASK | EP_RX_MASK) -#define EP_TX_RX_VALID (EP_TX_VALID | EP_RX_VALID) - -#define STM32_TOGGLE_EP(n, mask, val, flags) \ - STM32_USB_EP(n) = (((STM32_USB_EP(n) & (EP_MASK | (mask))) \ - ^ (val)) | (flags)) - -/* --- TRNG --- */ -#define STM32_RNG_CR REG32(STM32_RNG_BASE + 0x0) -#define STM32_RNG_CR_RNGEN BIT(2) -#define STM32_RNG_CR_IE BIT(3) -#define STM32_RNG_CR_CED BIT(5) -#define STM32_RNG_SR REG32(STM32_RNG_BASE + 0x4) -#define STM32_RNG_SR_DRDY BIT(0) -#define STM32_RNG_DR REG32(STM32_RNG_BASE + 0x8) - -/* --- AXI interconnect --- */ - -/* STM32H7: AXI_TARGx_FN_MOD exists for masters x = 1, 2 and 7 */ -#define STM32_AXI_TARG_FN_MOD(x) REG32(STM32_GPV_BASE + 0x1108 + \ - 0x1000 * (x)) -#define WRITE_ISS_OVERRIDE BIT(1) -#define READ_ISS_OVERRIDE BIT(0) - -/* --- MISC --- */ -#define STM32_UNIQUE_ID_ADDRESS REG32_ADDR(STM32_UNIQUE_ID_BASE) -#define STM32_UNIQUE_ID_LENGTH (3 * 4) - #endif /* !__ASSEMBLER__ */ + diff --git a/chip/stm32/system.c b/chip/stm32/system.c index 1f5f9c9108..8d63ba8567 100644 --- a/chip/stm32/system.c +++ b/chip/stm32/system.c @@ -168,11 +168,20 @@ void chip_pre_init(void) STM32_RCC_PB2_TIM1 | STM32_RCC_PB2_TIM8 | STM32_RCC_PB2_TIM9 | STM32_RCC_PB2_TIM10 | STM32_RCC_PB2_TIM11; #elif defined(CHIP_FAMILY_STM32L4) + +#ifdef CHIP_VARIANT_STM32L431X + apb1fz_reg = + STM32_RCC_PB1_TIM2 | STM32_RCC_PB1_TIM7 | STM32_RCC_PB1_TIM6 | + STM32_RCC_PB1_WWDG | STM32_RCC_PB1_IWDG; + apb2fz_reg = + STM32_RCC_PB2_TIM1 | STM32_RCC_PB2_TIM15 | STM32_RCC_PB2_TIM16; +#else apb1fz_reg = STM32_RCC_PB1_TIM2 | STM32_RCC_PB1_TIM3 | STM32_RCC_PB1_TIM4 | STM32_RCC_PB1_TIM5 | STM32_RCC_PB1_TIM6 | STM32_RCC_PB1_TIM7 | STM32_RCC_PB1_WWDG | STM32_RCC_PB1_IWDG; apb2fz_reg = STM32_RCC_PB2_TIM1 | STM32_RCC_PB2_TIM8; +#endif #elif defined(CHIP_FAMILY_STM32L) apb1fz_reg = STM32_RCC_PB1_TIM2 | STM32_RCC_PB1_TIM3 | STM32_RCC_PB1_TIM4 | @@ -254,14 +263,21 @@ void system_pre_init(void) /* enable clock on Power module */ #ifndef CHIP_FAMILY_STM32H7 +#ifdef CHIP_FAMILY_STM32L4 + STM32_RCC_APB1ENR1 |= STM32_RCC_PWREN; +#else STM32_RCC_APB1ENR |= STM32_RCC_PWREN; #endif +#endif #if defined(CHIP_FAMILY_STM32F4) /* enable backup registers */ STM32_RCC_AHB1ENR |= STM32_RCC_AHB1ENR_BKPSRAMEN; #elif defined(CHIP_FAMILY_STM32H7) /* enable backup registers */ STM32_RCC_AHB4ENR |= BIT(28); +#elif defined(CHIP_FAMILY_STM32L4) + /* enable RTC APB clock */ + STM32_RCC_APB1ENR1 |= STM32_RCC_APB1ENR1_RTCAPBEN; #else /* enable backup registers */ STM32_RCC_APB1ENR |= BIT(27); |