140 lines
5.8 KiB
C
140 lines
5.8 KiB
C
/***********************************************************************************************************************
|
|
* This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
|
|
* will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
|
|
**********************************************************************************************************************/
|
|
/*
|
|
* How to setup clock using clock driver functions:
|
|
*
|
|
* 1. Setup clock sources.
|
|
*
|
|
* 2. Set up wait states of the flash.
|
|
*
|
|
* 3. Set up all dividers.
|
|
*
|
|
* 4. Set up all selectors to provide selected clocks.
|
|
*
|
|
*/
|
|
|
|
/* clang-format off */
|
|
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
|
!!GlobalInfo
|
|
product: Clocks v13.0
|
|
processor: MCXN947
|
|
package_id: MCXN947VDF
|
|
mcu_data: ksdk2_0
|
|
processor_version: 15.1.0
|
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
|
/* clang-format on */
|
|
|
|
#include "fsl_clock.h"
|
|
#include "clock_config.h"
|
|
#include "fsl_spc.h"
|
|
|
|
/*******************************************************************************
|
|
* Definitions
|
|
******************************************************************************/
|
|
|
|
/*******************************************************************************
|
|
* Variables
|
|
******************************************************************************/
|
|
/* System clock frequency. */
|
|
extern uint32_t SystemCoreClock;
|
|
|
|
/*******************************************************************************
|
|
************************ BOARD_InitBootClocks function ************************
|
|
******************************************************************************/
|
|
void BOARD_InitBootClocks(void)
|
|
{
|
|
BOARD_BootClockPLL150M();
|
|
}
|
|
|
|
/*******************************************************************************
|
|
******************** Configuration BOARD_BootClockPLL150M *********************
|
|
******************************************************************************/
|
|
/* clang-format off */
|
|
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
|
!!Configuration
|
|
name: BOARD_BootClockPLL150M
|
|
called_from_default_init: true
|
|
outputs:
|
|
- {id: CLK_144M_clock.outFreq, value: 144 MHz}
|
|
- {id: CLK_48M_clock.outFreq, value: 48 MHz}
|
|
- {id: FRO_12M_clock.outFreq, value: 12 MHz}
|
|
- {id: FRO_HF_clock.outFreq, value: 48 MHz}
|
|
- {id: MAIN_clock.outFreq, value: 150 MHz}
|
|
- {id: PLL0_CLK_clock.outFreq, value: 150 MHz}
|
|
- {id: Slow_clock.outFreq, value: 37.5 MHz}
|
|
- {id: System_clock.outFreq, value: 150 MHz}
|
|
- {id: gdet_clock.outFreq, value: 48 MHz}
|
|
- {id: trng_clock.outFreq, value: 48 MHz}
|
|
settings:
|
|
- {id: PLL0_Mode, value: Normal}
|
|
- {id: RunPowerMode, value: OD}
|
|
- {id: SCGMode, value: PLL0}
|
|
- {id: SCG.PLL0M_MULT.scale, value: '50', locked: true}
|
|
- {id: SCG.PLL0SRCSEL.sel, value: SCG.FIRC_48M}
|
|
- {id: SCG.PLL0_NDIV.scale, value: '8', locked: true}
|
|
- {id: SCG.SCSSEL.sel, value: SCG.PLL0_CLK}
|
|
- {id: SYSCON.FLEXSPICLKSEL.sel, value: NO_CLOCK}
|
|
- {id: SYSCON.FREQMEREFCLKSEL.sel, value: SYSCON.evtg_out0a}
|
|
- {id: SYSCON.FREQMETARGETCLKSEL.sel, value: SYSCON.evtg_out0a}
|
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
|
/* clang-format on */
|
|
|
|
/*******************************************************************************
|
|
* Variables for BOARD_BootClockPLL150M configuration
|
|
******************************************************************************/
|
|
/*******************************************************************************
|
|
* Code for BOARD_BootClockPLL150M configuration
|
|
******************************************************************************/
|
|
void BOARD_BootClockPLL150M(void)
|
|
{
|
|
CLOCK_EnableClock(kCLOCK_Scg); /*!< Enable SCG clock */
|
|
|
|
/* FRO OSC setup - begin, attach FRO12M to MainClock for safety switching */
|
|
CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch to FRO 12M first to ensure we can change the clock setting */
|
|
|
|
/* Set the DCDC VDD regulator to 1.2 V voltage level */
|
|
spc_active_mode_dcdc_option_t dcdcOpt = {
|
|
.DCDCVoltage = kSPC_DCDC_OverdriveVoltage,
|
|
.DCDCDriveStrength = kSPC_DCDC_NormalDriveStrength,
|
|
};
|
|
SPC_SetActiveModeDCDCRegulatorConfig(SPC0, &dcdcOpt);
|
|
/* Set the LDO_CORE VDD regulator to 1.2 V voltage level */
|
|
spc_active_mode_core_ldo_option_t ldoOpt = {
|
|
.CoreLDOVoltage = kSPC_CoreLDO_OverDriveVoltage,
|
|
.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength,
|
|
};
|
|
SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOpt);
|
|
/* Configure Flash wait-states to support 1.2V voltage level and 150000000Hz frequency */;
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x3U));
|
|
/* Specifies the 1.2V operating voltage for the SRAM's read/write timing margin */
|
|
spc_sram_voltage_config_t sramCfg = {
|
|
.operateVoltage = kSPC_sramOperateAt1P2V,
|
|
.requestVoltageUpdate = true,
|
|
};
|
|
SPC_SetSRAMOperateVoltage(SPC0, &sramCfg);
|
|
|
|
CLOCK_SetupFROHFClocking(48000000U); /*!< Enable FRO HF(48MHz) output */
|
|
/*!< Set up PLL0 */
|
|
const pll_setup_t pll0Setup = {
|
|
.pllctrl = SCG_APLLCTRL_SOURCE(1U) | SCG_APLLCTRL_SELI(27U) | SCG_APLLCTRL_SELP(13U),
|
|
.pllndiv = SCG_APLLNDIV_NDIV(8U),
|
|
.pllpdiv = SCG_APLLPDIV_PDIV(1U),
|
|
.pllmdiv = SCG_APLLMDIV_MDIV(50U),
|
|
.pllRate = 150000000U
|
|
};
|
|
CLOCK_SetPLL0Freq(&pll0Setup); /*!< Configure PLL0 to the desired values */
|
|
CLOCK_SetPll0MonitorMode(kSCG_Pll0MonitorDisable); /* Pll0 Monitor is disabled */
|
|
|
|
/*!< Set up clock selectors */
|
|
CLOCK_AttachClk(kPLL0_to_MAIN_CLK);
|
|
|
|
/*!< Set up dividers */
|
|
CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U); /*!< Set AHBCLKDIV divider to value 1 */
|
|
|
|
/* Set SystemCoreClock variable */
|
|
SystemCoreClock = BOARD_BOOTCLOCKPLL150M_CORE_CLOCK;
|
|
}
|
|
|