/** * @brief Initialize the system clock * * @return N/A * */ static ALWAYS_INLINE void clkInit(void) { #ifdef CONFIG_CMU_HFCLK_HFXO CMU_HFXOInit(&hfxoInit); CMU_OscillatorEnable(cmuOsc_HFXO, true, true); CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); CMU_OscillatorEnable(cmuOsc_HFRCO, false, false); SystemHFXOClockSet(CONFIG_CMU_HFXO_FREQ); #elif (defined CONFIG_CMU_HFCLK_LFXO) CMU_LFXOInit(&lfxoInit); CMU_OscillatorEnable(cmuOsc_LFXO, true, true); CMU_ClockSelectSet(cmuClock_HF, cmuSelect_LFXO); CMU_OscillatorEnable(cmuOsc_HFRCO, false, false); SystemLFXOClockSet(CONFIG_CMU_LFXO_FREQ); #elif (defined CONFIG_CMU_HFCLK_HFRCO) /* * This is the default clock, the controller starts with, so nothing to * do here. */ #else #error "Unsupported clock source for HFCLK selected" #endif /* Enable the High Frequency Peripheral Clock */ CMU_ClockEnable(cmuClock_HFPER, true); #ifdef CONFIG_GPIO_GECKO CMU_ClockEnable(cmuClock_GPIO, true); #endif }
static void cpu_clock_init(void) { SystemLFXOClockSet((uint32_t)EFM32_LFXO_FREQ); CMU_OscillatorEnable(cmuOsc_LFXO, true, true); CMU_OscillatorEnable(cmuOsc_HFRCO, true, true); CMU_HFRCOBandSet(cmuHFRCOBand_28MHz); // /* HF Core clock is connected to external oscillator */ // CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); /* HF Core clock is connected to internal RC clock */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFRCO); /* RTC, LESENSE, LETIMER0, LCD is connected to external 36kHz oscillator */ CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO); CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO); /* HFPER clock is divided by 2 - 14MHz */ CMU_ClockDivSet(cmuClock_HFPER, cmuClkDiv_2); /* core, DMA etc. clock */ CMU_ClockDivSet(cmuClock_CORE, cmuClkDiv_1); /* enabling clocks */ CMU_ClockEnable(cmuClock_HFPER, true); CMU_ClockEnable(cmuClock_CORELE, true); }
//================================================================================ // CMU_enter_DefaultMode_from_RESET //================================================================================ extern void CMU_enter_DefaultMode_from_RESET(void) { // $[High Frequency Clock Setup] /* Initializing HFXO */ CMU_HFXOInit_TypeDef hfxoInit = CMU_HFXOINIT_DEFAULT; CMU_HFXOInit(&hfxoInit); /* Setting system HFXO frequency */ SystemHFXOClockSet(38400000); /* Enable HFXO oscillator, and wait for it to be stable */ CMU_OscillatorEnable(cmuOsc_HFXO, true, true); /* Skipping HFXO oscillator select, as it is auto-enabled and selected on EM0/EM1 * entry */ /* Set autostart behaviour */ CMU_HFXOAutostartEnable(0, true, true); /* HFRCO not needed when using HFXO */ CMU_OscillatorEnable(cmuOsc_HFRCO, false, false); // [High Frequency Clock Setup]$ // $[LE clocks enable] /* Enable clock to LE modules */ CMU_ClockEnable(cmuClock_CORELE, true); /* Initializing LFXO */ CMU_LFXOInit_TypeDef lfxoInit = CMU_LFXOINIT_DEFAULT; lfxoInit.ctune = 32; CMU_LFXOInit(&lfxoInit); /* Enable LFXO oscillator, and wait for it to be stable */ CMU_OscillatorEnable(cmuOsc_LFXO, true, true); /* Setting system LFXO frequency */ SystemLFXOClockSet(32768); // [LE clocks enable]$ // $[LFACLK Setup] /* Select LFXO as clock source for LFACLK */ CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO); // [LFACLK Setup]$ // $[LFBCLK Setup] /* Select LFXO as clock source for LFBCLK */ CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO); // [LFBCLK Setup]$ // $[LFECLK Setup] /* Select LFXO as clock source for LFECLK */ CMU_ClockSelectSet(cmuClock_LFE, cmuSelect_LFXO); // [LFECLK Setup]$ // $[Peripheral Clock enables] /* Enable clock for HF peripherals */ CMU_ClockEnable(cmuClock_HFPER, true); /* Enable clock for ADC0 */ CMU_ClockEnable(cmuClock_ADC0, true); /* Enable clock for GPCRC */ CMU_ClockEnable(cmuClock_GPCRC, true); /* Enable clock for LDMA */ CMU_ClockEnable(cmuClock_LDMA, true); /* Enable clock for PRS */ CMU_ClockEnable(cmuClock_PRS, true); /* Enable clock for RTCC */ CMU_ClockEnable(cmuClock_RTCC, true); /* Enable clock for TIMER1 */ CMU_ClockEnable(cmuClock_TIMER1, true); /* Enable clock for GPIO by default */ CMU_ClockEnable(cmuClock_GPIO, true); // [Peripheral Clock enables]$ // $[Clock output] /* Disable CLKOUT0 output */ CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_CLKOUTSEL0_MASK) | CMU_CTRL_CLKOUTSEL0_DISABLED; /* Disable CLKOUT1 output */ CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_CLKOUTSEL1_MASK) | CMU_CTRL_CLKOUTSEL1_DISABLED; // [Clock output]$ // $[CMU_IO] /* Disable CLKOUT0 pin */ CMU->ROUTEPEN &= ~CMU_ROUTEPEN_CLKOUT0PEN; /* Disable CLKOUT1 pin */ CMU->ROUTEPEN &= ~CMU_ROUTEPEN_CLKOUT1PEN; // [CMU_IO]$ }