GD32F1 Core. Added enhancements from @victor_pv to disable USB prescaler and re-enable so that the USB prescaler can be changed by the core during startup
This commit is contained in:
parent
d79f346747
commit
b96247af1e
|
@ -162,3 +162,12 @@ void rcc_set_prescaler(rcc_prescaler prescaler, uint32 divider) {
|
|||
};
|
||||
rcc_do_set_prescaler(masks, prescaler, divider);
|
||||
}
|
||||
|
||||
void rcc_clk_disable(rcc_clk_id id) {
|
||||
static __io uint32* enable_regs[] = {
|
||||
[APB1] = &RCC_BASE->APB1ENR,
|
||||
[APB2] = &RCC_BASE->APB2ENR,
|
||||
[AHB] = &RCC_BASE->AHBENR,
|
||||
};
|
||||
rcc_do_clk_disable(enable_regs, id);
|
||||
}
|
|
@ -169,6 +169,12 @@ static inline void rcc_disable_css() {
|
|||
RCC_BASE->CR &= ~RCC_CR_CSSON;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Turn off the clock line on a peripheral
|
||||
* @param id Clock ID of the peripheral to turn on.
|
||||
*/
|
||||
extern void rcc_clk_disable(rcc_clk_id id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
@ -64,4 +64,11 @@ static inline void rcc_do_set_prescaler(const uint32 *masks,
|
|||
RCC_BASE->CFGR = cfgr;
|
||||
}
|
||||
|
||||
static inline void rcc_do_clk_disable(__io uint32** enable_regs,
|
||||
rcc_clk_id id) {
|
||||
__io uint32 *enable_reg = enable_regs[rcc_dev_clk(id)];
|
||||
uint8 line_num = rcc_dev_table[id].line_num;
|
||||
bb_peri_set_bit(enable_reg, line_num, 0);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -79,12 +79,15 @@ namespace wirish {
|
|||
rcc_set_prescaler(RCC_PRESCALER_AHB, RCC_AHB_SYSCLK_DIV_1);
|
||||
rcc_set_prescaler(RCC_PRESCALER_APB1, RCC_APB1_HCLK_DIV_2);
|
||||
rcc_set_prescaler(RCC_PRESCALER_APB2, RCC_APB2_HCLK_DIV_1);
|
||||
rcc_clk_disable(RCC_USB);
|
||||
#if F_CPU == 120000000
|
||||
rcc_set_prescaler(RCC_PRESCALER_USB, RCC_USB_SYSCLK_DIV_2_5);
|
||||
#elif F_CPU == 96000000
|
||||
rcc_set_prescaler(RCC_PRESCALER_USB, RCC_USB_SYSCLK_DIV_2);
|
||||
#elif F_CPU == 72000000
|
||||
rcc_set_prescaler(RCC_PRESCALER_USB, RCC_USB_SYSCLK_DIV_1_5);
|
||||
#elif F_CPU == 48000000
|
||||
rcc_set_prescaler(RCC_PRESCALER_USB, RCC_USB_SYSCLK_DIV_1_5);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue