@@ -104,7 +104,7 @@ void rcc_clk_init(rcc_sysclk_src sysclk_src,
104104 ASSERT (sysclk_src == RCC_CLKSRC_PLL &&
105105 pll_src == RCC_PLLSRC_HSE );
106106
107- RCC_BASE -> CFGR = pll_src | pll_mul ;
107+ RCC_BASE -> CFGR = pll_src | pll_mul | ( 0x3 << 22 ) ;
108108
109109 /* Turn on, and wait for, HSE. */
110110 rcc_turn_on_clk (RCC_CLK_HSE );
@@ -125,13 +125,13 @@ void rcc_configure_pll(rcc_pll_cfg *pll_cfg) {
125125 stm32f1_rcc_pll_data * data = pll_cfg -> data ;
126126 rcc_pll_multiplier pll_mul = data -> pll_mul ;
127127 uint32 cfgr ;
128-
129128 /* Check that the PLL is disabled. */
130129 ASSERT_FAULT (!rcc_is_clk_on (RCC_CLK_PLL ));
131130
132131 cfgr = RCC_BASE -> CFGR ;
133132 cfgr &= ~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL );
134133 cfgr |= pll_cfg -> pllsrc | pll_mul ;
134+
135135 RCC_BASE -> CFGR = cfgr ;
136136}
137137
@@ -162,3 +162,12 @@ void rcc_set_prescaler(rcc_prescaler prescaler, uint32 divider) {
162162 };
163163 rcc_do_set_prescaler (masks , prescaler , divider );
164164}
165+
166+ void rcc_clk_disable (rcc_clk_id id ) {
167+ static __io uint32 * enable_regs [] = {
168+ [APB1 ] = & RCC_BASE -> APB1ENR ,
169+ [APB2 ] = & RCC_BASE -> APB2ENR ,
170+ [AHB ] = & RCC_BASE -> AHBENR ,
171+ };
172+ rcc_do_clk_disable (enable_regs , id );
173+ }
0 commit comments