clock_control: stm32: Add support for MSI PLL MODE

Add support for Low Speed External 32.768 kHz oscillator (LSE ).
Add support for MSI PLL-Mode offering an automatic calibration feature
in combination with the LSE. This allows the MSI to reach an accurate
+/-0,25% clock perfectly suitable for USB full-speed clock.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
This commit is contained in:
Loic Poulain 2018-07-11 11:44:02 +02:00 committed by Anas Nashif
parent 131a61d80b
commit 85b8a6b84b
4 changed files with 39 additions and 1 deletions

View file

@ -366,6 +366,20 @@ config CLOCK_STM32_PLL_R_DIVISOR
help
PLL R Output divisor, allowed values: 0, 2, 4, 6, 8.
config CLOCK_STM32_LSE
bool "Low-speed external clock"
default n
help
Enable the low-speed external (LSE) clock supplied with a 32.768 kHz
crystal resonator oscillator.
config CLOCK_STM32_MSI_PLL_MODE
bool "MSI PLL MODE"
depends on CLOCK_STM32_LSE
default n
help
Enable hardware auto-calibration with LSE.
endif # SOC_SERIES_STM32L4X
config CLOCK_STM32_AHB_PRESCALER

View file

@ -363,6 +363,10 @@ static int stm32_clock_control_init(struct device *dev)
while (LL_RCC_MSI_IsReady() != 1) {
/* Wait for HSI ready */
}
#ifdef CONFIG_CLOCK_STM32_MSI_PLL_MODE
/* Enable MSI hardware auto calibration */
LL_RCC_MSI_EnablePLLMode();
#endif
}
/* Set MSI as SYSCLCK source */

View file

@ -39,5 +39,24 @@ void config_pll_init(LL_UTILS_PLLInitTypeDef *pllinit)
*/
void config_enable_default_clocks(void)
{
/* Nothing for now */
#ifdef CONFIG_CLOCK_STM32_LSE
/* LSE belongs to the back-up domain, enable access.*/
/* Enable the power interface clock */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
/* Set the DBP bit in the Power control register 1 (PWR_CR1) */
LL_PWR_EnableBkUpAccess();
while (!LL_PWR_IsEnabledBkUpAccess()) {
/* Wait for Backup domain access */
}
/* Enable LSE Oscillator (32.768 kHz) */
LL_RCC_LSE_Enable();
while (!LL_RCC_LSE_IsReady()) {
/* Wait for LSE ready */
}
LL_PWR_DisableBkUpAccess();
#endif
}

View file

@ -44,6 +44,7 @@
#include <stm32l4xx_ll_bus.h>
#include <stm32l4xx_ll_rcc.h>
#include <stm32l4xx_ll_system.h>
#include <stm32l4xx_ll_pwr.h>
#endif /* CONFIG_CLOCK_CONTROL_STM32_CUBE */
#ifdef CONFIG_SPI_STM32