/** * @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 prvSetupHardware( void ) { EMU_DCDCInit_TypeDef xDCDInit = EMU_DCDCINIT_STK_DEFAULT; CMU_HFXOInit_TypeDef xHFXOInit = CMU_HFXOINIT_STK_DEFAULT; /* Chip errata */ CHIP_Init(); /* Init DCDC regulator and HFXO with kit specific parameters */ EMU_DCDCInit( &xDCDInit ); CMU_HFXOInit( &xHFXOInit ); /* Switch HFCLK to HFXO and disable HFRCO */ CMU_ClockSelectSet( cmuClock_HF, cmuSelect_HFXO ); CMU_OscillatorEnable( cmuOsc_HFRCO, false, false ); /* Initialize LED driver. */ BSP_LedsInit(); BSP_LedSet( 0 ); BSP_LedClear( 1 ); }
//================================================================================ // 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]$ }