/******************************************************************************* * Code for BOARD_BootClockRUN configuration ******************************************************************************/ void BOARD_BootClockRUN(void) { /* Setup the reference oscillator. */ BOARD_RfOscInit(); /* Set the system clock dividers in SIM to safe value. */ CLOCK_SetSimSafeDivs(); /* Enable RTC oscillator. */ CLOCK_CONFIG_EnableRtcOsc(RTC_OSC_CAP_LOAD_0PF); /* Initializes OSC0 according to Ref OSC needs. */ BOARD_InitOsc0(); /* Set MCG to FEE mode. */ CLOCK_BootToFeeMode(mcgConfig_BOARD_BootClockRUN.oscsel, mcgConfig_BOARD_BootClockRUN.frdiv, mcgConfig_BOARD_BootClockRUN.dmx32, mcgConfig_BOARD_BootClockRUN.drs, CLOCK_CONFIG_FllStableDelay); /* Configure the Internal Reference clock (MCGIRCLK). */ CLOCK_SetInternalRefClkConfig(mcgConfig_BOARD_BootClockRUN.irclkEnableMode, mcgConfig_BOARD_BootClockRUN.ircs, mcgConfig_BOARD_BootClockRUN.fcrdiv); /* Set the clock configuration in SIM module. */ CLOCK_SetSimConfig(&simConfig_BOARD_BootClockRUN); /* Configure RTC clock. */ CLOCK_CONFIG_SetRtcClock(); /* Set SystemCoreClock variable. */ SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK; /* Set LPUART0 clock source. */ CLOCK_SetLpuartClock(SIM_LPUART_CLK_SEL_OSCERCLK_CLK); /* Set TPM clock source. */ CLOCK_SetTpmClock(SIM_TPM_CLK_SEL_OSCERCLK_CLK); }
void APP_BootToFeeExample(void) { /* Boot to Fee mode */ CLOCK_BootToFeeMode(kMCG_OscselOsc, g_frdivValue, kMCG_Dmx32Default, kMCG_DrsLow, APP_FllStableDelay); assert(kMCG_ModeFEE == CLOCK_GetMode()); }
/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* !!Configuration name: BOARD_BootClockVLPR outputs: - {id: Bus_clock.outFreq, value: 800 kHz} - {id: Core_clock.outFreq, value: 4 MHz} - {id: Flash_clock.outFreq, value: 800 kHz} - {id: LPO_clock.outFreq, value: 1 kHz} - {id: MCGIRCLK.outFreq, value: 4 MHz} - {id: System_clock.outFreq, value: 4 MHz} settings: - {id: MCGMode, value: BLPI} - {id: powerMode, value: VLPR} - {id: MCG.CLKS.sel, value: MCG.IRCS} - {id: MCG.FCRDIV.scale, value: '1'} - {id: MCG.IRCS.sel, value: MCG.FCRDIV} - {id: MCG_C1_IRCLKEN_CFG, value: Enabled} - {id: SIM.OUTDIV4.scale, value: '5'} * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ void BOARD_BootClockVLPR(void) { const sim_clock_config_t simConfig = { .er32kSrc = 0U, .clkdiv1 = 0x00040000U, }; /* ERR010224 */ RSIM->RF_OSC_CTRL |= RSIM_RF_OSC_CTRL_RADIO_EXT_OSC_OVRD_EN_MASK; /* Prevent XTAL_OUT_EN from generating XTAL_OUT request */ CLOCK_SetSimSafeDivs(); CLOCK_BootToBlpiMode(0U, kMCG_IrcFast, kMCG_IrclkEnable); CLOCK_SetSimConfig(&simConfig); SystemCoreClock = 4000000U; SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll); SMC_SetPowerModeVlpr(SMC); while (SMC_GetPowerModeState(SMC) != kSMC_PowerStateVlpr) { } } /******************************************************************************* ********************** Configuration BOARD_BootClockRUN *********************** ******************************************************************************/ /* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* !!Configuration name: BOARD_BootClockRUN called_from_default_init: true outputs: - {id: Bus_clock.outFreq, value: 20 MHz} - {id: Core_clock.outFreq, value: 40 MHz} - {id: Flash_clock.outFreq, value: 20 MHz} - {id: LPO_clock.outFreq, value: 1 kHz} - {id: MCGFLLCLK.outFreq, value: 40 MHz} - {id: MCGIRCLK.outFreq, value: 32.768 kHz} - {id: OSCERCLK.outFreq, value: 32 MHz} - {id: System_clock.outFreq, value: 40 MHz} settings: - {id: MCGMode, value: FEE} - {id: MCG.FCRDIV.scale, value: '1'} - {id: MCG.FLL_mul.scale, value: '1280'} - {id: MCG.FRDIV.scale, value: '1024'} - {id: MCG.IREFS.sel, value: MCG.FRDIV} - {id: MCG_C1_IRCLKEN_CFG, value: Enabled} - {id: MCG_C2_RANGE0_FRDIV_CFG, value: Very_high} - {id: MCG_C2_RANGE_CFG, value: Very_high} - {id: RTC_CR_OSCE_CFG, value: Oscillator_enabled} sources: - {id: REFOSC.OSC.outFreq, value: 32 MHz, enabled: true} * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ void BOARD_BootClockRUN(void) { const sim_clock_config_t simConfig = { .er32kSrc = 0U, .clkdiv1 = 0x00010000U, }; BOARD_RfOscInit(); CLOCK_SetSimSafeDivs(); BOARD_InitOsc0(); CLOCK_BootToFeeMode(kMCG_OscselOsc, 5U, kMCG_Dmx32Default, kMCG_DrsMid, CLOCK_SYS_FllStableDelay); CLOCK_SetInternalRefClkConfig(kMCG_IrclkEnable, kMCG_IrcSlow, 0U); CLOCK_SetSimConfig(&simConfig); SystemCoreClock = 40000000U; } void BOARD_RfOscInit(void) { uint32_t temp, tempTrim; uint8_t revId; /* Obtain REV ID from SIM */ temp = SIM->SDID; revId = (uint8_t)((temp & SIM_SDID_REVID_MASK) >> SIM_SDID_REVID_SHIFT); if(0 == revId) { tempTrim = RSIM->ANA_TRIM; RSIM->ANA_TRIM |= RSIM_ANA_TRIM_BB_LDO_XO_TRIM_MASK; /* Set max trim for BB LDO for XO */ }/* Workaround for Rev 1.0 XTAL startup and ADC analog diagnostics circuitry */ /* Turn on clocks for the XCVR */ /* Enable RF OSC in RSIM and wait for ready */ temp = RSIM->CONTROL; temp &= ~RSIM_CONTROL_RF_OSC_EN_MASK; RSIM->CONTROL = temp | RSIM_CONTROL_RF_OSC_EN(1); /* ERR010224 */ RSIM->RF_OSC_CTRL |= RSIM_RF_OSC_CTRL_RADIO_EXT_OSC_OVRD_EN_MASK; /* Prevent XTAL_OUT_EN from generating XTAL_OUT request */ while((RSIM->CONTROL & RSIM_CONTROL_RF_OSC_READY_MASK) == 0); /* Wait for RF_OSC_READY */ if(0 == revId) { SIM->SCGC5 |= SIM_SCGC5_PHYDIG_MASK; XCVR_TSM->OVRD0 |= XCVR_TSM_OVRD0_BB_LDO_ADCDAC_EN_OVRD_EN_MASK | XCVR_TSM_OVRD0_BB_LDO_ADCDAC_EN_OVRD_MASK; /* Force ADC DAC LDO on to prevent BGAP failure */ RSIM->ANA_TRIM = tempTrim; /* Reset LDO trim settings */ }/* Workaround for Rev 1.0 XTAL startup and ADC analog diagnostics circuitry */ } void BOARD_InitOsc0(void) { const osc_config_t oscConfig = { .freq = BOARD_XTAL0_CLK_HZ, .workMode = kOSC_ModeExt, }; CLOCK_InitOsc0(&oscConfig); /* Passing the XTAL0 frequency to clock driver. */ CLOCK_SetXtal0Freq(BOARD_XTAL0_CLK_HZ); }