Missing initializations and some code reorganization.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14500 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
cbb355f514
commit
94b88b3c41
|
@ -249,6 +249,83 @@ static const system_limits_t vos_range2 = {
|
|||
|
||||
#include "stm32_bd.inc"
|
||||
|
||||
/**
|
||||
* @brief Configures the PWR unit.
|
||||
* @note CR1, CR2 and CR5 are not initialized inside this function.
|
||||
*/
|
||||
static void hal_lld_set_static_pwr(void) {
|
||||
|
||||
/* PWR clock enabled.*/
|
||||
rccEnablePWRInterface(false);
|
||||
|
||||
/* Static PWR configurations.*/
|
||||
PWR->CR3 = STM32_PWR_CR3;
|
||||
PWR->CR4 = STM32_PWR_CR4;
|
||||
PWR->PUCRA = STM32_PWR_PUCRA;
|
||||
PWR->PDCRA = STM32_PWR_PDCRA;
|
||||
PWR->PUCRB = STM32_PWR_PUCRB;
|
||||
PWR->PDCRB = STM32_PWR_PDCRB;
|
||||
PWR->PUCRC = STM32_PWR_PUCRC;
|
||||
PWR->PDCRC = STM32_PWR_PDCRC;
|
||||
#if STM32_HAS_GPIOD
|
||||
PWR->PUCRD = STM32_PWR_PUCRD;
|
||||
PWR->PDCRD = STM32_PWR_PDCRD;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOE
|
||||
PWR->PUCRE = STM32_PWR_PUCRE;
|
||||
PWR->PDCRE = STM32_PWR_PDCRE;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOF
|
||||
PWR->PUCRF = STM32_PWR_PUCRF;
|
||||
PWR->PDCRF = STM32_PWR_PDCRF;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOG
|
||||
PWR->PUCRG = STM32_PWR_PUCRG;
|
||||
PWR->PDCRG = STM32_PWR_PDCRG;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOH
|
||||
PWR->PUCRH = STM32_PWR_PUCRH;
|
||||
PWR->PDCRH = STM32_PWR_PDCRH;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOI
|
||||
PWR->PUCRI = STM32_PWR_PUCRI;
|
||||
PWR->PDCRI = STM32_PWR_PDCRI;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Initializes static muxes and dividers.
|
||||
*/
|
||||
static void hal_lld_set_static_clocks(void) {
|
||||
uint32_t ccipr;
|
||||
|
||||
/*Clock-related settings (dividers, MCO etc).*/
|
||||
RCC->CFGR = STM32_MCOPRE | STM32_MCOSEL | STM32_STOPWUCK |
|
||||
STM32_PPRE2 | STM32_PPRE1 | STM32_HPRE;
|
||||
|
||||
/* CCIPR register initialization, note, must take care of the _OFF
|
||||
pseudo settings.*/
|
||||
ccipr = STM32_ADCSEL |
|
||||
STM32_CLK48SEL | STM32_LPTIM2SEL | STM32_LPTIM1SEL |
|
||||
STM32_I2C3SEL | STM32_I2C2SEL | STM32_I2C1SEL |
|
||||
STM32_LPUART1SEL | STM32_UART5SEL | STM32_UART4SEL |
|
||||
STM32_USART3SEL | STM32_USART2SEL | STM32_USART1SEL;
|
||||
RCC->CCIPR = ccipr;
|
||||
|
||||
/* CCIPR2 register initialization, note, must take care of the _OFF
|
||||
pseudo settings.*/
|
||||
ccipr = STM32_OSPISEL | STM32_PLLSAI2DIVR |
|
||||
STM32_SDMMCSEL | STM32_DSISEL | STM32_ADFSDMSEL |
|
||||
STM32_DFSDMSEL | STM32_I2C4SEL;
|
||||
#if STM32_SAI2SEL != STM32_SAI2SEL_OFF
|
||||
ccipr |= STM32_SAI2SEL;
|
||||
#endif
|
||||
#if STM32_SAI1SEL != STM32_SAI1SEL_OFF
|
||||
ccipr |= STM32_SAI1SEL;
|
||||
#endif
|
||||
RCC->CCIPR2 = ccipr;
|
||||
}
|
||||
|
||||
#if defined(HAL_LLD_USE_CLOCK_MANAGEMENT) || defined(__DOXYGEN__)
|
||||
static bool hal_lld_check_pll(const system_limits_t *slp,
|
||||
uint32_t cfgr,
|
||||
|
@ -703,44 +780,12 @@ void stm32_clock_init(void) {
|
|||
among multiple drivers.*/
|
||||
rccEnableAPB2(RCC_APB2ENR_SYSCFGEN, false);
|
||||
|
||||
/* PWR clock enabled.*/
|
||||
rccEnablePWRInterface(false);
|
||||
/* Static PWR configurations.*/
|
||||
hal_lld_set_static_pwr();
|
||||
|
||||
/* Backup domain made accessible.*/
|
||||
PWR->CR1 |= PWR_CR1_DBP;
|
||||
|
||||
/* Static PWR initializations.*/
|
||||
PWR->PUCRA = STM32_PWR_PUCRA;
|
||||
PWR->PDCRA = STM32_PWR_PDCRA;
|
||||
PWR->PUCRB = STM32_PWR_PUCRB;
|
||||
PWR->PDCRB = STM32_PWR_PDCRB;
|
||||
PWR->PUCRC = STM32_PWR_PUCRC;
|
||||
PWR->PDCRC = STM32_PWR_PDCRC;
|
||||
#if STM32_HAS_GPIOD
|
||||
PWR->PUCRD = STM32_PWR_PUCRD;
|
||||
PWR->PDCRD = STM32_PWR_PDCRD;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOE
|
||||
PWR->PUCRE = STM32_PWR_PUCRE;
|
||||
PWR->PDCRE = STM32_PWR_PDCRE;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOF
|
||||
PWR->PUCRF = STM32_PWR_PUCRF;
|
||||
PWR->PDCRF = STM32_PWR_PDCRF;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOG
|
||||
PWR->PUCRG = STM32_PWR_PUCRG;
|
||||
PWR->PDCRG = STM32_PWR_PDCRG;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOH
|
||||
PWR->PUCRH = STM32_PWR_PUCRH;
|
||||
PWR->PDCRH = STM32_PWR_PDCRH;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOI
|
||||
PWR->PUCRI = STM32_PWR_PUCRI;
|
||||
PWR->PDCRI = STM32_PWR_PDCRI;
|
||||
#endif
|
||||
|
||||
/* Backup domain reset.*/
|
||||
bd_reset();
|
||||
|
||||
|
@ -752,6 +797,9 @@ void stm32_clock_init(void) {
|
|||
RCC->CR |= RCC_CR_MSIRGSEL;
|
||||
RCC->CSR = (RCC->CSR & ~RCC_CSR_MSISRANGE_Msk) | STM32_MSISRANGE;
|
||||
|
||||
/* Static clocks setup.*/
|
||||
hal_lld_set_static_clocks();
|
||||
|
||||
/* Selecting the default clock/power/flash configuration.*/
|
||||
if (hal_lld_clock_raw_switch(&hal_clkcfg_default)) {
|
||||
osalSysHalt("clkswc");
|
||||
|
@ -791,50 +839,18 @@ void stm32_clock_init(void) {
|
|||
among multiple drivers.*/
|
||||
rccEnableAPB2(RCC_APB2ENR_SYSCFGEN, false);
|
||||
|
||||
/* PWR clock enabled.*/
|
||||
rccEnablePWRInterface(false);
|
||||
/* Static PWR configurations.*/
|
||||
hal_lld_set_static_pwr();
|
||||
|
||||
/* Additional PWR configurations.*/
|
||||
PWR->CR2 = STM32_PWR_CR2;
|
||||
PWR->CR5 = STM32_CR5BITS;
|
||||
|
||||
/* Core voltage setup, backup domain access enabled and left open.*/
|
||||
PWR->CR1 = STM32_VOS | PWR_CR1_DBP;
|
||||
while ((PWR->SR2 & PWR_SR2_VOSF) != 0) /* Wait until regulator is */
|
||||
; /* stable. */
|
||||
|
||||
/* Additional PWR configurations.*/
|
||||
PWR->CR2 = STM32_PWR_CR2;
|
||||
PWR->CR3 = STM32_PWR_CR3;
|
||||
PWR->CR4 = STM32_PWR_CR4;
|
||||
PWR->CR5 = STM32_CR5BITS;
|
||||
PWR->PUCRA = STM32_PWR_PUCRA;
|
||||
PWR->PDCRA = STM32_PWR_PDCRA;
|
||||
PWR->PUCRB = STM32_PWR_PUCRB;
|
||||
PWR->PDCRB = STM32_PWR_PDCRB;
|
||||
PWR->PUCRC = STM32_PWR_PUCRC;
|
||||
PWR->PDCRC = STM32_PWR_PDCRC;
|
||||
#if STM32_HAS_GPIOD
|
||||
PWR->PUCRD = STM32_PWR_PUCRD;
|
||||
PWR->PDCRD = STM32_PWR_PDCRD;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOE
|
||||
PWR->PUCRE = STM32_PWR_PUCRE;
|
||||
PWR->PDCRE = STM32_PWR_PDCRE;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOF
|
||||
PWR->PUCRF = STM32_PWR_PUCRF;
|
||||
PWR->PDCRF = STM32_PWR_PDCRF;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOG
|
||||
PWR->PUCRG = STM32_PWR_PUCRG;
|
||||
PWR->PDCRG = STM32_PWR_PDCRG;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOH
|
||||
PWR->PUCRH = STM32_PWR_PUCRH;
|
||||
PWR->PDCRH = STM32_PWR_PDCRH;
|
||||
#endif
|
||||
#if STM32_HAS_GPIOI
|
||||
PWR->PUCRI = STM32_PWR_PUCRI;
|
||||
PWR->PDCRI = STM32_PWR_PDCRI;
|
||||
#endif
|
||||
|
||||
/* MSI clock reset.*/
|
||||
msi_reset();
|
||||
|
||||
|
@ -857,35 +873,8 @@ void stm32_clock_init(void) {
|
|||
pllsai1_init();
|
||||
pllsai2_init();
|
||||
|
||||
/* Other clock-related settings (dividers, MCO etc).*/
|
||||
RCC->CFGR = STM32_MCOPRE | STM32_MCOSEL | STM32_STOPWUCK |
|
||||
STM32_PPRE2 | STM32_PPRE1 | STM32_HPRE;
|
||||
|
||||
/* CCIPR register initialization, note, must take care of the _OFF
|
||||
pseudo settings.*/
|
||||
{
|
||||
uint32_t ccipr = STM32_ADCSEL |
|
||||
STM32_CLK48SEL | STM32_LPTIM2SEL | STM32_LPTIM1SEL |
|
||||
STM32_I2C3SEL | STM32_I2C2SEL | STM32_I2C1SEL |
|
||||
STM32_LPUART1SEL | STM32_UART5SEL | STM32_UART4SEL |
|
||||
STM32_USART3SEL | STM32_USART2SEL | STM32_USART1SEL;
|
||||
RCC->CCIPR = ccipr;
|
||||
}
|
||||
|
||||
/* CCIPR2 register initialization, note, must take care of the _OFF
|
||||
pseudo settings.*/
|
||||
{
|
||||
uint32_t ccipr = STM32_OSPISEL | STM32_PLLSAI2DIVR |
|
||||
STM32_SDMMCSEL | STM32_DSISEL | STM32_ADFSDMSEL |
|
||||
STM32_DFSDMSEL | STM32_I2C4SEL;
|
||||
#if STM32_SAI2SEL != STM32_SAI2SEL_OFF
|
||||
ccipr |= STM32_SAI2SEL;
|
||||
#endif
|
||||
#if STM32_SAI1SEL != STM32_SAI1SEL_OFF
|
||||
ccipr |= STM32_SAI1SEL;
|
||||
#endif
|
||||
RCC->CCIPR2 = ccipr;
|
||||
}
|
||||
/* Static clocks setup.*/
|
||||
hal_lld_set_static_clocks();
|
||||
|
||||
/* Set flash WS's for SYSCLK source */
|
||||
if (STM32_FLASHBITS > STM32_MSI_FLASHBITS) {
|
||||
|
|
Loading…
Reference in New Issue