
I will be porting tinyuf2 to MCXA156 and N947 and need this work in place. This is the 1st step before bringing in support for other MCX devices. We had previous patched https://github.com/hathach/mcux-sdk.git' for MCX support as it was not pulically available I updated get_deps to point to the mcux-sdk version 2.16.10 from NXP. I repointed the entry in the get_deps script to use NXP MCU repo. The existing current code couldn't build as the MCUXpresso SDK was old. - For now, I put a copy of fsl_spc.c in the drivers folder for the mcx family. None of the ports could build with the version in the mcux github sdk. The sdk on github has version 2.4.0. The SDK package that can be downloaded with the SDK generator uses 2.4.2. All of the clock_config routines use versions of the datastructure from 2.4.2. For now, keeping an updated copy in hw/bsp/mcx/drivers so we can build against the latest mcuxpresso sdk and enable MCXA156. I'll file an issue on the nxp github. - Cleaned up the MCX family.c a little bit. the MCXA/N these chips don't have SCT so I removed the neopixel code. - fixed a clock init issue w/ N947 that was causing it to crash when initializing the uart. - I tested the cmake and make scripts on the A153,A156 and N947 using the CDC/MSC sample. All worked OK. - Patched get_deps so it will do a fetch/check on a new folder. Some of the deps were failing on a fresh clone of tinyusb - Fixed lpc51,54 and lpc55 make/cmake files to build with mcuxpresso sdk 2.16.10 The folder structure for flexcomm/uart changed a little bit - lpc55s59 libpower_hardabi.a no longer is included in mcuxpressosdk, (fsl_power.c is replacement). remove of libpower_hardabi.a from the linker config. LPC55 still works as expected. - Using tinyuf2 get deps
483 lines
22 KiB
C
483 lines
22 KiB
C
/*
|
|
* Copyright 2024 NXP
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
/***********************************************************************************************************************
|
|
* 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: MCXA156
|
|
package_id: MCXA156VLL
|
|
mcu_data: ksdk2_0
|
|
processor_version: 0.15.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_BootClockFRO96M();
|
|
}
|
|
|
|
/*******************************************************************************
|
|
******************** Configuration BOARD_BootClockFRO12M **********************
|
|
******************************************************************************/
|
|
/* clang-format off */
|
|
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
|
!!Configuration
|
|
name: BOARD_BootClockFRO12M
|
|
outputs:
|
|
- {id: CLK_1M_clock.outFreq, value: 1 MHz}
|
|
- {id: CPU_clock.outFreq, value: 12 MHz}
|
|
- {id: FRO_12M_clock.outFreq, value: 12 MHz}
|
|
- {id: MAIN_clock.outFreq, value: 12 MHz}
|
|
- {id: Slow_clock.outFreq, value: 3 MHz}
|
|
- {id: System_clock.outFreq, value: 12 MHz}
|
|
- {id: UTICK_clock.outFreq, value: 1 MHz}
|
|
settings:
|
|
- {id: SCGMode, value: SIRC}
|
|
- {id: FRO_HF_PERIPHERALS_EN_CFG, value: Disabled}
|
|
- {id: MRCC.FREQMEREFCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.FREQMETARGETCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.OSTIMERCLKSEL.sel, value: VBAT.CLK16K_1}
|
|
- {id: SCG.SCSSEL.sel, value: SCG.SIRC}
|
|
- {id: SCG_FIRCCSR_FIRCEN_CFG, value: Disabled}
|
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
|
/* clang-format on */
|
|
|
|
/*******************************************************************************
|
|
* Variables for BOARD_BootClockFRO12M configuration
|
|
******************************************************************************/
|
|
/*******************************************************************************
|
|
* Code for BOARD_BootClockFRO12M configuration
|
|
******************************************************************************/
|
|
void BOARD_BootClockFRO12M(void)
|
|
{
|
|
uint32_t coreFreq;
|
|
spc_active_mode_core_ldo_option_t ldoOption;
|
|
spc_sram_voltage_config_t sramOption;
|
|
|
|
/* Get the CPU Core frequency */
|
|
coreFreq = CLOCK_GetCoreSysClkFreq();
|
|
|
|
/* The flow of increasing voltage and frequency */
|
|
if (coreFreq <= BOARD_BOOTCLOCKFRO12M_CORE_CLOCK) {
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_MidDriveVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x0U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P0V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
}
|
|
|
|
CLOCK_SetupFRO12MClocking(); /*!< Setup FRO12M clock */
|
|
|
|
CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /* !< Switch MAIN_CLK to FRO12M */
|
|
|
|
/* The flow of decreasing voltage and frequency */
|
|
if (coreFreq > BOARD_BOOTCLOCKFRO12M_CORE_CLOCK) {
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x0U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P0V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_MidDriveVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
}
|
|
|
|
/*!< Set up clock selectors - Attach clocks to the peripheries */
|
|
|
|
/*!< Set up dividers */
|
|
CLOCK_SetClockDiv(kCLOCK_DivAHBCLK, 1U); /* !< Set AHBCLKDIV divider to value 1 */
|
|
|
|
/* Set SystemCoreClock variable */
|
|
SystemCoreClock = BOARD_BOOTCLOCKFRO12M_CORE_CLOCK;
|
|
}
|
|
/*******************************************************************************
|
|
******************** Configuration BOARD_BootClockFRO24M **********************
|
|
******************************************************************************/
|
|
/* clang-format off */
|
|
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
|
!!Configuration
|
|
name: BOARD_BootClockFRO24M
|
|
outputs:
|
|
- {id: CLK_1M_clock.outFreq, value: 1 MHz}
|
|
- {id: CLK_48M_clock.outFreq, value: 48 MHz}
|
|
- {id: CPU_clock.outFreq, value: 24 MHz}
|
|
- {id: FRO_12M_clock.outFreq, value: 12 MHz}
|
|
- {id: FRO_HF_DIV_clock.outFreq, value: 48 MHz}
|
|
- {id: FRO_HF_clock.outFreq, value: 48 MHz}
|
|
- {id: MAIN_clock.outFreq, value: 48 MHz}
|
|
- {id: Slow_clock.outFreq, value: 6 MHz}
|
|
- {id: System_clock.outFreq, value: 24 MHz}
|
|
- {id: UTICK_clock.outFreq, value: 1 MHz}
|
|
settings:
|
|
- {id: MRCC.FREQMEREFCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.FREQMETARGETCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.OSTIMERCLKSEL.sel, value: VBAT.CLK16K_1}
|
|
- {id: SYSCON.AHBCLKDIV.scale, value: '2', locked: true}
|
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
|
/* clang-format on */
|
|
|
|
/*******************************************************************************
|
|
* Variables for BOARD_BootClockFRO24M configuration
|
|
******************************************************************************/
|
|
/*******************************************************************************
|
|
* Code for BOARD_BootClockFRO24M configuration
|
|
******************************************************************************/
|
|
void BOARD_BootClockFRO24M(void)
|
|
{
|
|
uint32_t coreFreq;
|
|
spc_active_mode_core_ldo_option_t ldoOption;
|
|
spc_sram_voltage_config_t sramOption;
|
|
|
|
/* Get the CPU Core frequency */
|
|
coreFreq = CLOCK_GetCoreSysClkFreq();
|
|
|
|
/* The flow of increasing voltage and frequency */
|
|
if (coreFreq <= BOARD_BOOTCLOCKFRO24M_CORE_CLOCK) {
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_MidDriveVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x0U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P0V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
}
|
|
|
|
CLOCK_SetupFROHFClocking(48000000U); /*!< Enable FRO HF(48MHz) output */
|
|
|
|
CLOCK_SetupFRO12MClocking(); /*!< Setup FRO12M clock */
|
|
|
|
CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /* !< Switch MAIN_CLK to FRO_HF */
|
|
|
|
/* The flow of decreasing voltage and frequency */
|
|
if (coreFreq > BOARD_BOOTCLOCKFRO24M_CORE_CLOCK) {
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x0U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P0V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_MidDriveVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
}
|
|
|
|
/*!< Set up clock selectors - Attach clocks to the peripheries */
|
|
|
|
/*!< Set up dividers */
|
|
CLOCK_SetClockDiv(kCLOCK_DivAHBCLK, 2U); /* !< Set AHBCLKDIV divider to value 2 */
|
|
CLOCK_SetClockDiv(kCLOCK_DivFRO_HF_DIV, 1U); /* !< Set FROHFDIV divider to value 1 */
|
|
|
|
/* Set SystemCoreClock variable */
|
|
SystemCoreClock = BOARD_BOOTCLOCKFRO24M_CORE_CLOCK;
|
|
}
|
|
/*******************************************************************************
|
|
******************** Configuration BOARD_BootClockFRO48M **********************
|
|
******************************************************************************/
|
|
/* clang-format off */
|
|
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
|
!!Configuration
|
|
name: BOARD_BootClockFRO48M
|
|
outputs:
|
|
- {id: CLK_1M_clock.outFreq, value: 1 MHz}
|
|
- {id: CLK_48M_clock.outFreq, value: 48 MHz}
|
|
- {id: CPU_clock.outFreq, value: 48 MHz}
|
|
- {id: FRO_12M_clock.outFreq, value: 12 MHz}
|
|
- {id: FRO_HF_DIV_clock.outFreq, value: 48 MHz}
|
|
- {id: FRO_HF_clock.outFreq, value: 48 MHz}
|
|
- {id: MAIN_clock.outFreq, value: 48 MHz}
|
|
- {id: Slow_clock.outFreq, value: 12 MHz}
|
|
- {id: System_clock.outFreq, value: 48 MHz}
|
|
- {id: UTICK_clock.outFreq, value: 1 MHz}
|
|
settings:
|
|
- {id: MRCC.FREQMEREFCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.FREQMETARGETCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.OSTIMERCLKSEL.sel, value: VBAT.CLK16K_1}
|
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
|
/* clang-format on */
|
|
|
|
/*******************************************************************************
|
|
* Variables for BOARD_BootClockFRO48M configuration
|
|
******************************************************************************/
|
|
/*******************************************************************************
|
|
* Code for BOARD_BootClockFRO48M configuration
|
|
******************************************************************************/
|
|
void BOARD_BootClockFRO48M(void)
|
|
{
|
|
uint32_t coreFreq;
|
|
spc_active_mode_core_ldo_option_t ldoOption;
|
|
spc_sram_voltage_config_t sramOption;
|
|
|
|
/* Get the CPU Core frequency */
|
|
coreFreq = CLOCK_GetCoreSysClkFreq();
|
|
|
|
/* The flow of increasing voltage and frequency */
|
|
if (coreFreq <= BOARD_BOOTCLOCKFRO48M_CORE_CLOCK) {
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_MidDriveVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x1U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P0V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
}
|
|
|
|
CLOCK_SetupFROHFClocking(48000000U); /*!< Enable FRO HF(48MHz) output */
|
|
|
|
CLOCK_SetupFRO12MClocking(); /*!< Setup FRO12M clock */
|
|
|
|
CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /* !< Switch MAIN_CLK to FRO_HF */
|
|
|
|
/* The flow of decreasing voltage and frequency */
|
|
if (coreFreq > BOARD_BOOTCLOCKFRO48M_CORE_CLOCK) {
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x1U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P0V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_MidDriveVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
}
|
|
|
|
/*!< Set up clock selectors - Attach clocks to the peripheries */
|
|
|
|
/*!< Set up dividers */
|
|
CLOCK_SetClockDiv(kCLOCK_DivAHBCLK, 1U); /* !< Set AHBCLKDIV divider to value 1 */
|
|
CLOCK_SetClockDiv(kCLOCK_DivFRO_HF_DIV, 1U); /* !< Set FROHFDIV divider to value 1 */
|
|
|
|
/* Set SystemCoreClock variable */
|
|
SystemCoreClock = BOARD_BOOTCLOCKFRO48M_CORE_CLOCK;
|
|
}
|
|
/*******************************************************************************
|
|
******************** Configuration BOARD_BootClockFRO64M **********************
|
|
******************************************************************************/
|
|
/* clang-format off */
|
|
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
|
!!Configuration
|
|
name: BOARD_BootClockFRO64M
|
|
outputs:
|
|
- {id: CLK_1M_clock.outFreq, value: 1 MHz}
|
|
- {id: CLK_48M_clock.outFreq, value: 48 MHz}
|
|
- {id: CPU_clock.outFreq, value: 64 MHz}
|
|
- {id: FRO_12M_clock.outFreq, value: 12 MHz}
|
|
- {id: FRO_HF_DIV_clock.outFreq, value: 64 MHz}
|
|
- {id: FRO_HF_clock.outFreq, value: 64 MHz}
|
|
- {id: MAIN_clock.outFreq, value: 64 MHz}
|
|
- {id: Slow_clock.outFreq, value: 16 MHz}
|
|
- {id: System_clock.outFreq, value: 64 MHz}
|
|
- {id: UTICK_clock.outFreq, value: 1 MHz}
|
|
settings:
|
|
- {id: VDD_CORE, value: voltage_1v1}
|
|
- {id: MRCC.FREQMEREFCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.FREQMETARGETCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.FROHFDIV.scale, value: '1', locked: true}
|
|
- {id: MRCC.OSTIMERCLKSEL.sel, value: VBAT.CLK16K_1}
|
|
- {id: SYSCON.AHBCLKDIV.scale, value: '1', locked: true}
|
|
sources:
|
|
- {id: SCG.FIRC.outFreq, value: 64 MHz}
|
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
|
/* clang-format on */
|
|
|
|
/*******************************************************************************
|
|
* Variables for BOARD_BootClockFRO64M configuration
|
|
******************************************************************************/
|
|
/*******************************************************************************
|
|
* Code for BOARD_BootClockFRO64M configuration
|
|
******************************************************************************/
|
|
void BOARD_BootClockFRO64M(void)
|
|
{
|
|
uint32_t coreFreq;
|
|
spc_active_mode_core_ldo_option_t ldoOption;
|
|
spc_sram_voltage_config_t sramOption;
|
|
|
|
/* Get the CPU Core frequency */
|
|
coreFreq = CLOCK_GetCoreSysClkFreq();
|
|
|
|
/* The flow of increasing voltage and frequency */
|
|
if (coreFreq <= BOARD_BOOTCLOCKFRO64M_CORE_CLOCK) {
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_NormalVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x1U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P1V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
}
|
|
|
|
CLOCK_SetupFROHFClocking(64000000U); /*!< Enable FRO HF(64MHz) output */
|
|
|
|
CLOCK_SetupFRO12MClocking(); /*!< Setup FRO12M clock */
|
|
|
|
CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /* !< Switch MAIN_CLK to FRO_HF */
|
|
|
|
/* The flow of decreasing voltage and frequency */
|
|
if (coreFreq > BOARD_BOOTCLOCKFRO64M_CORE_CLOCK) {
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x1U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P1V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_NormalVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
}
|
|
|
|
/*!< Set up clock selectors - Attach clocks to the peripheries */
|
|
|
|
/*!< Set up dividers */
|
|
CLOCK_SetClockDiv(kCLOCK_DivAHBCLK, 1U); /* !< Set AHBCLKDIV divider to value 1 */
|
|
CLOCK_SetClockDiv(kCLOCK_DivFRO_HF_DIV, 1U); /* !< Set FROHFDIV divider to value 1 */
|
|
|
|
/* Set SystemCoreClock variable */
|
|
SystemCoreClock = BOARD_BOOTCLOCKFRO64M_CORE_CLOCK;
|
|
}
|
|
/*******************************************************************************
|
|
******************** Configuration BOARD_BootClockFRO96M **********************
|
|
******************************************************************************/
|
|
/* clang-format off */
|
|
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
|
!!Configuration
|
|
name: BOARD_BootClockFRO96M
|
|
called_from_default_init: true
|
|
outputs:
|
|
- {id: CLK_1M_clock.outFreq, value: 1 MHz}
|
|
- {id: CLK_48M_clock.outFreq, value: 48 MHz}
|
|
- {id: CPU_clock.outFreq, value: 96 MHz}
|
|
- {id: FRO_12M_clock.outFreq, value: 12 MHz}
|
|
- {id: FRO_HF_DIV_clock.outFreq, value: 96 MHz}
|
|
- {id: FRO_HF_clock.outFreq, value: 96 MHz}
|
|
- {id: MAIN_clock.outFreq, value: 96 MHz}
|
|
- {id: Slow_clock.outFreq, value: 24 MHz}
|
|
- {id: System_clock.outFreq, value: 96 MHz}
|
|
- {id: UTICK_clock.outFreq, value: 1 MHz}
|
|
settings:
|
|
- {id: VDD_CORE, value: voltage_1v1}
|
|
- {id: CLKOUTDIV_HALT, value: Enable}
|
|
- {id: MRCC.FREQMEREFCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.FREQMETARGETCLKSEL.sel, value: MRCC.aoi0_out0}
|
|
- {id: MRCC.FROHFDIV.scale, value: '1', locked: true}
|
|
- {id: MRCC.OSTIMERCLKSEL.sel, value: VBAT.CLK16K_1}
|
|
- {id: SYSCON.AHBCLKDIV.scale, value: '1', locked: true}
|
|
sources:
|
|
- {id: SCG.FIRC.outFreq, value: 96 MHz}
|
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
|
/* clang-format on */
|
|
|
|
/*******************************************************************************
|
|
* Variables for BOARD_BootClockFRO96M configuration
|
|
******************************************************************************/
|
|
/*******************************************************************************
|
|
* Code for BOARD_BootClockFRO96M configuration
|
|
******************************************************************************/
|
|
void BOARD_BootClockFRO96M(void)
|
|
{
|
|
uint32_t coreFreq;
|
|
spc_active_mode_core_ldo_option_t ldoOption;
|
|
spc_sram_voltage_config_t sramOption;
|
|
|
|
/* Get the CPU Core frequency */
|
|
coreFreq = CLOCK_GetCoreSysClkFreq();
|
|
|
|
/* The flow of increasing voltage and frequency */
|
|
if (coreFreq <= BOARD_BOOTCLOCKFRO96M_CORE_CLOCK) {
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_NormalVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x2U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P1V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
}
|
|
|
|
CLOCK_SetupFROHFClocking(96000000U); /*!< Enable FRO HF(96MHz) output */
|
|
|
|
CLOCK_SetupFRO12MClocking(); /*!< Setup FRO12M clock */
|
|
|
|
CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /* !< Switch MAIN_CLK to FRO_HF */
|
|
|
|
/* The flow of decreasing voltage and frequency */
|
|
if (coreFreq > BOARD_BOOTCLOCKFRO96M_CORE_CLOCK) {
|
|
/* Configure Flash to support different voltage level and frequency */
|
|
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x2U));
|
|
/* Specifies the operating voltage for the SRAM's read/write timing margin */
|
|
sramOption.operateVoltage = kSPC_sramOperateAt1P1V;
|
|
sramOption.requestVoltageUpdate = true;
|
|
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
|
|
/* Set the LDO_CORE VDD regulator level */
|
|
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_NormalVoltage;
|
|
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
|
|
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
|
|
}
|
|
|
|
/*!< Set up clock selectors - Attach clocks to the peripheries */
|
|
|
|
/*!< Set up dividers */
|
|
CLOCK_SetClockDiv(kCLOCK_DivAHBCLK, 1U); /* !< Set AHBCLKDIV divider to value 1 */
|
|
CLOCK_SetClockDiv(kCLOCK_DivFRO_HF_DIV, 1U); /* !< Set FROHFDIV divider to value 1 */
|
|
|
|
/* Set SystemCoreClock variable */
|
|
SystemCoreClock = BOARD_BOOTCLOCKFRO96M_CORE_CLOCK;
|
|
}
|