Skip to content

Commit 1c7c450

Browse files
FRASTMMaureenHelm
authored andcommitted
drivers: clock_control of the stm32l0x or stm32l1x devices
Fix register bit field when clock source is MSI on the stm32L0x or stm32L1x mcus Use RCC_CR_MSIRGSEL bit field instead of not soc stm32wbx serie That bit of the RCC CR is common to several stm32 mcus Signed-off-by: Francois Ramu <[email protected]>
1 parent 7f4471c commit 1c7c450

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

drivers/clock_control/clock_stm32_ll_common.c

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,14 @@
3535
#define fn_mco2_prescaler(v) LL_RCC_MCO2_DIV_ ## v
3636
#define mco2_prescaler(v) fn_mco2_prescaler(v)
3737

38-
/* Calculate MSI freq for the given range(at RUN range, not after standby) */
39-
#if defined(CONFIG_SOC_SERIES_STM32WBX)
40-
#define RCC_CALC_MSI_RUN_FREQ(range) __LL_RCC_CALC_MSI_FREQ( \
41-
range << RCC_CR_MSIRANGE_Pos)
38+
/* Calculate MSI freq for the given range (at RUN range, not after standby) */
39+
#if !defined(LL_RCC_MSIRANGESEL_RUN)
40+
/* CONFIG_SOC_SERIES_STM32WBX or CONFIG_SOC_SERIES_STM32L0X or CONFIG_SOC_SERIES_STM32L1X */
41+
#define RCC_CALC_MSI_RUN_FREQ() __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_GetRange())
4242
#else
43-
#define RCC_CALC_MSI_RUN_FREQ(range) __LL_RCC_CALC_MSI_FREQ( \
44-
LL_RCC_MSIRANGESEL_RUN, range << RCC_CR_MSIRANGE_Pos)
43+
/* mainly CONFIG_SOC_SERIES_STM32WLX or CONFIG_SOC_SERIES_STM32L4X or CONFIG_SOC_SERIES_STM32L5X */
44+
#define RCC_CALC_MSI_RUN_FREQ() __LL_RCC_CALC_MSI_FREQ( \
45+
LL_RCC_MSIRANGESEL_RUN, LL_RCC_MSI_GetRange())
4546
#endif
4647

4748
#if defined(CONFIG_SOC_SERIES_STM32WBX) || defined(CONFIG_SOC_SERIES_STM32WLX)
@@ -444,9 +445,9 @@ int stm32_clock_control_init(const struct device *dev)
444445
#if STM32_PLL_SRC_MSI
445446

446447
/* Set MSI Range */
447-
#if !defined(CONFIG_SOC_SERIES_STM32WBX)
448+
#if defined(RCC_CR_MSIRGSEL)
448449
LL_RCC_MSI_EnableRangeSelection();
449-
#endif
450+
#endif /* RCC_CR_MSIRGSEL */
450451
LL_RCC_MSI_SetRange(STM32_MSI_RANGE << RCC_CR_MSIRANGE_Pos);
451452
LL_RCC_MSI_SetCalibTrimming(0);
452453

@@ -604,11 +605,11 @@ int stm32_clock_control_init(const struct device *dev)
604605
GET_CURRENT_FLASH_PRESCALER());
605606

606607
new_hclk_freq = __LL_RCC_CALC_HCLK_FREQ(
607-
RCC_CALC_MSI_RUN_FREQ(STM32_MSI_RANGE),
608+
RCC_CALC_MSI_RUN_FREQ(),
608609
hclk_prescaler);
609610
#if defined(CONFIG_SOC_SERIES_STM32WBX) || defined(CONFIG_SOC_SERIES_STM32WLX)
610611
new_flash_freq = RCC_CALC_FLASH_FREQ(
611-
RCC_CALC_MSI_RUN_FREQ(STM32_MSI_RANGE),
612+
RCC_CALC_MSI_RUN_FREQ(),
612613
flash_prescaler);
613614
#else
614615
new_flash_freq = new_hclk_freq;
@@ -626,10 +627,15 @@ int stm32_clock_control_init(const struct device *dev)
626627
}
627628

628629
/* Set MSI Range */
629-
#if !defined(CONFIG_SOC_SERIES_STM32WBX)
630+
#if defined(RCC_CR_MSIRGSEL)
630631
LL_RCC_MSI_EnableRangeSelection();
631-
#endif
632+
#endif /* RCC_CR_MSIRGSEL */
633+
634+
#if defined(CONFIG_SOC_SERIES_STM32L0X) || defined(CONFIG_SOC_SERIES_STM32L1X)
635+
LL_RCC_MSI_SetRange(STM32_MSI_RANGE << RCC_ICSCR_MSIRANGE_Pos);
636+
#else
632637
LL_RCC_MSI_SetRange(STM32_MSI_RANGE << RCC_CR_MSIRANGE_Pos);
638+
#endif /* CONFIG_SOC_SERIES_STM32L0X || CONFIG_SOC_SERIES_STM32L1X */
633639

634640
#if STM32_MSI_PLL_MODE
635641
/* Enable MSI hardware auto calibration */

0 commit comments

Comments
 (0)