The MCUXpresso SDK provides a peripheral clock driver for the SYSCON module of MCUXpresso SDK devices.
Function description
Clock driver provides these functions:
- Functions to initialize the Core clock to given frequency
- Functions to configure the clock selection muxes.
- Functions to setup peripheral clock dividers
- Functions to set the flash wait states for the input freuqency
- Functions to get the frequency of the selected clock
- Functions to set PLL frequency
SYSCON Clock frequency functions
SYSCON clock module provides clocks, such as MCLKCLK, ADCCLK, DMICCLK, MCGFLLCLK, FXCOMCLK, WDTOSC, RTCOSC, USBCLK, and SYSPLL. The functions CLOCK_EnableClock() and CLOCK_DisableClock() enables and disables the various clocks. CLOCK_SetupFROClocking() initializes the FRO to 12 MHz, 48 MHz, or 96 MHz frequency. CLOCK_SetupPLLData(), CLOCK_SetupSystemPLLPrec(), and CLOCK_SetPLLFreq() functions are used to setup the PLL. The SYSCON clock driver provides functions to get the frequency of these clocks, such as CLOCK_GetFreq(), CLOCK_GetFro12MFreq(), CLOCK_GetExtClkFreq(), CLOCK_GetWdtOscFreq(), CLOCK_GetFroHfFreq(), CLOCK_GetPllOutFreq(), CLOCK_GetOsc32KFreq(), CLOCK_GetCoreSysClkFreq(), CLOCK_GetI2SMClkFreq(), CLOCK_GetFlexCommClkFreq, and CLOCK_GetAsyncApbClkFreq.
SYSCON clock Selection Muxes
The SYSCON clock driver provides the function to configure the clock selected. The function CLOCK_AttachClk() is implemented for this. The function selects the clock source for a particular peripheral like MAINCLK, DMIC, FLEXCOMM, USB, ADC, and PLL.
SYSCON clock dividers
The SYSCON clock module provides the function to setup the peripheral clock dividers. The function CLOCK_SetClkDiv() configures the CLKDIV registers for various periperals like USB, DMIC, I2S, SYSTICK, AHB, ADC, and also CLKOUT and TRACE functions.
SYSCON flash wait states
The SYSCON clock driver provides the function CLOCK_SetFLASHAccessCyclesForFreq() that configures FLASHCFG register with a selected FLASHTIM value.
Typical use case
POWER_DisablePD(kPDRUNCFG_PD_FRO_EN); /*!< Ensure FRO is on so that we can switch to its 12MHz mode temporarily
|
enum | clock_ip_name_t |
| Clock gate name used for CLOCK_EnableClock/CLOCK_DisableClock. More...
|
|
enum | clock_name_t {
kCLOCK_CoreSysClk,
kCLOCK_MainClk,
kCLOCK_Fro,
kCLOCK_FroDiv,
kCLOCK_ExtClk,
kCLOCK_PllOut,
kCLOCK_WdtOsc,
kCLOCK_Frg0,
kCLOCK_Frg1
} |
| Clock name used to get clock frequency. More...
|
|
enum | clock_select_t |
| Clock Mux Switches CLK_MUX_DEFINE(reg, mux) reg is used to define the mux register mux is used to define the mux value. More...
|
|
enum | clock_divider_t |
| Clock divider.
|
|
enum | clock_wdt_analog_freq_t |
| watch dog analog output frequency
|
|
enum | clock_fro_src_t {
kCLOCK_FroSrcLpwrBootValue = 0U,
kCLOCK_FroSrcFroOsc = 1U << SYSCON_FROOSCCTRL_FRO_DIRECT_SHIFT
} |
| fro output frequency source definition More...
|
|
enum | clock_fro_osc_freq_t {
kCLOCK_FroOscOut18M = 18000U,
kCLOCK_FroOscOut24M = 24000U,
kCLOCK_FroOscOut30M = 30000U
} |
| fro oscillator output frequency value definition More...
|
|
enum | clock_sys_pll_src {
kCLOCK_SysPllSrcFRO = 0U,
kCLOCK_SysPllSrcExtClk = 1U,
kCLOCK_SysPllSrcWdtOsc = 2U,
kCLOCK_SysPllSrcFroDiv = 3U
} |
| PLL clock definition. More...
|
|
enum | clock_main_clk_src_t {
kCLOCK_MainClkSrcFro = CLK_MAIN_CLK_MUX_DEFINE(0U, 0U),
kCLOCK_MainClkSrcExtClk = CLK_MAIN_CLK_MUX_DEFINE(1U, 0U),
kCLOCK_MainClkSrcWdtOsc = CLK_MAIN_CLK_MUX_DEFINE(2U, 0U),
kCLOCK_MainClkSrcFroDiv = CLK_MAIN_CLK_MUX_DEFINE(3U, 0U),
kCLOCK_MainClkSrcSysPll = CLK_MAIN_CLK_MUX_DEFINE(0U, 1U)
} |
|
Data Fields |
uint32_t | targetFreq |
| System pll fclk output frequency, the output frequency should be lower than 100MHZ.
|
|
clock_sys_pll_src | src |
| System pll clock source.
|
|
#define CLOCK_FRO_SETTING_API_ROM_ADDRESS (0x0F0026F5U) |
Value:{ \
kCLOCK_Dac0, kCLOCK_Dac1, \
}
Value:{ \
kCLOCK_Gpio0, kCLOCK_Gpio1, \
}
Value:{ \
kCLOCK_I2c0, kCLOCK_I2c1, kCLOCK_I2c2, kCLOCK_I2c3, \
}
Value:{ \
kCLOCK_Uart0, kCLOCK_Uart1, kCLOCK_Uart2, kCLOCK_Uart3, kCLOCK_Uart4, \
}
Value:{ \
kCLOCK_Spi0, kCLOCK_Spi1, \
}
#define CLK_GATE_DEFINE |
( |
|
reg, |
|
|
|
bit |
|
) |
| ((((reg)&0xFFU) << 8U) | ((bit)&0xFFU)) |
Enumerator |
---|
kCLOCK_CoreSysClk |
Cpu/AHB/AHB matrix/Memories,etc.
|
kCLOCK_MainClk |
Main clock.
|
kCLOCK_Fro |
FRO18/24/30.
|
kCLOCK_FroDiv |
FRO div clock.
|
kCLOCK_ExtClk |
External Clock.
|
kCLOCK_PllOut |
PLL Output.
|
kCLOCK_WdtOsc |
Watchdog Oscillator.
|
kCLOCK_Frg0 |
fractional rate0
|
kCLOCK_Frg1 |
fractional rate1
|
Enumerator |
---|
kCLOCK_FroSrcLpwrBootValue |
fro source from the fro oscillator divided by low power boot value
|
kCLOCK_FroSrcFroOsc |
fre source from the fro oscillator directly
|
Enumerator |
---|
kCLOCK_FroOscOut18M |
FRO oscillator output 18M.
|
kCLOCK_FroOscOut24M |
FRO oscillator output 24M.
|
kCLOCK_FroOscOut30M |
FRO oscillator output 30M.
|
Enumerator |
---|
kCLOCK_SysPllSrcFRO |
system pll source from FRO
|
kCLOCK_SysPllSrcExtClk |
system pll source from external clock
|
kCLOCK_SysPllSrcWdtOsc |
system pll source from watchdog oscillator
|
kCLOCK_SysPllSrcFroDiv |
system pll source from FRO divided clock
|
Enumerator |
---|
kCLOCK_MainClkSrcFro |
main clock source from FRO
|
kCLOCK_MainClkSrcExtClk |
main clock source from Ext clock
|
kCLOCK_MainClkSrcWdtOsc |
main clock source from watchdog oscillator
|
kCLOCK_MainClkSrcFroDiv |
main clock source from FRO Div
|
kCLOCK_MainClkSrcSysPll |
main clock source from system pll
|
- Parameters
-
src,reference | clock_main_clk_src_t to set the main clock source. |
- Parameters
-
src,please | reference _clock_fro_src definition. |
uint32_t CLOCK_GetFRG0ClkFreq |
( |
void |
| ) |
|
- Returns
- Frequency of FRG0 Clock.
uint32_t CLOCK_GetFRG1ClkFreq |
( |
void |
| ) |
|
- Returns
- Frequency of FRG1 Clock.
uint32_t CLOCK_GetMainClkFreq |
( |
void |
| ) |
|
- Returns
- Frequency of Main Clock.
uint32_t CLOCK_GetFroFreq |
( |
void |
| ) |
|
static uint32_t CLOCK_GetCoreSysClkFreq |
( |
void |
| ) |
|
|
inlinestatic |
- Returns
- Frequency of core.
uint32_t CLOCK_GetClockOutClkFreq |
( |
void |
| ) |
|
- Returns
- Frequency of ClockOut
- Returns
- Frequency of selected clock
uint32_t CLOCK_GetSystemPLLInClockRate |
( |
void |
| ) |
|
- Returns
- System PLL input clock rate
static uint32_t CLOCK_GetSystemPLLFreq |
( |
void |
| ) |
|
|
inlinestatic |
static uint32_t CLOCK_GetWdtOscFreq |
( |
void |
| ) |
|
|
inlinestatic |
- Return values
-
watch | dog OSC frequency value. |
static uint32_t CLOCK_GetExtClkFreq |
( |
void |
| ) |
|
|
inlinestatic |
- Return values
-
external | clock frequency value. |
- Parameters
-
config | System PLL configurations. |
static void CLOCK_DenitSystemPll |
( |
void |
| ) |
|
|
inlinestatic |
bool CLOCK_SetFRG0ClkFreq |
( |
uint32_t |
freq | ) |
|
- Parameters
-
freq,target | output frequency,freq < input and (input / freq) < 2 should be satisfy. |
- Return values
-
true | - successfully, false - input argument is invalid. |
bool CLOCK_SetFRG1ClkFreq |
( |
uint32_t |
freq | ) |
|
- Parameters
-
freq,target | output frequency,freq < input and (input / freq) < 2 should be satisfy. |
- Return values
-
true | - successfully, false - input argument is invalid. |
void CLOCK_InitExtClkin |
( |
uint32_t |
clkInFreq | ) |
|
- Parameters
-
clkInFreq | external clock in frequency. |
void CLOCK_InitSysOsc |
( |
uint32_t |
oscFreq | ) |
|
- Parameters
-
oscFreq | oscillator frequency value. |
void CLOCK_InitXtalin |
( |
uint32_t |
xtalInFreq | ) |
|
- Parameters
-
xtalInFreq | XTALIN frequency value |
- Returns
- Frequency of PLL
static void CLOCK_DeinitSysOsc |
( |
void |
| ) |
|
|
inlinestatic |
- Parameters
-
config | oscillator configuration. |
The watchdog oscillator is the clock source with the lowest power consumption. If accurate timing is required, use the FRO or system oscillator. The frequency of the watchdog oscillator is undefined after reset. The watchdog oscillator frequency must be programmed by writing to the WDTOSCCTRL register before using the watchdog oscillator. Watchdog osc output frequency = wdtOscFreq / wdtOscDiv, should in range 9.3KHZ to 2.3MHZ.
- Parameters
-
wdtOscFreq | watch dog analog part output frequency, reference _wdt_analog_output_freq. |
wdtOscDiv | watch dog analog part output frequency divider, shoule be a value >= 2U and multiple of 2 |
static void CLOCK_DeinitWdtOsc |
( |
void |
| ) |
|
|
inlinestatic |
- Parameters
-
config | oscillator configuration. |
Initialize the FRO clock to given frequency (18, 24 or 30 MHz).
- Parameters
-
freq,please | reference clock_fro_osc_freq_t definition, frequency must be one of 18000, 24000 or 30000 KHz. |
void SDK_DelayAtLeastUs |
( |
uint32_t |
delay_us | ) |
|
Please note that, this API will calculate the microsecond period with the maximum supported CPU frequency, so this API will only delay for at least the given microseconds, if precise delay count was needed, please implement a new timer count to achieve this function.
- Parameters
-
delay_us | Delay time in unit of microsecond. |
volatile uint32_t g_Wdt_Osc_Freq |
This variable is used to store the watchdog oscillator frequency which is set by CLOCK_InitWdtOsc, and it is returned by CLOCK_GetWdtOscFreq.
volatile uint32_t g_Ext_Clk_Freq |
This variable is used to store the external clock frequency which is include external oscillator clock and external clk in clock frequency value, it is set by CLOCK_InitExtClkin when CLK IN is used as external clock or by CLOCK_InitSysOsc when external oscillator is used as external clock ,and it is returned by CLOCK_GetExtClkFreq.