MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Clock Driver

Overview

The MCUXpresso SDK provides APIs for MCUXpresso SDK devices' clock operation.

The clock driver supports:

The MCUXpresso SDK provides a peripheral clock driver for the SYSCON module of MCUXpresso SDK devices.

Function description

Clock driver provides these functions:

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 

Files

file  fsl_clock.h
 

Data Structures

struct  clock_sys_pll_t
 PLL configuration structure. More...
 

Macros

#define ADC_CLOCKS
 Clock ip name array for ADC. More...
 
#define ACMP_CLOCKS
 Clock ip name array for ACMP. More...
 
#define SWM_CLOCKS
 Clock ip name array for SWM. More...
 
#define ROM_CLOCKS
 Clock ip name array for ROM. More...
 
#define SRAM_CLOCKS
 Clock ip name array for SRAM. More...
 
#define IOCON_CLOCKS
 Clock ip name array for IOCON. More...
 
#define GPIO_CLOCKS
 Clock ip name array for GPIO. More...
 
#define GPIO_INT_CLOCKS
 Clock ip name array for GPIO_INT. More...
 
#define DMA_CLOCKS
 Clock ip name array for DMA. More...
 
#define CRC_CLOCKS
 Clock ip name array for CRC. More...
 
#define WWDT_CLOCKS
 Clock ip name array for WWDT. More...
 
#define SCT_CLOCKS
 Clock ip name array for SCT0. More...
 
#define I2C_CLOCKS
 Clock ip name array for I2C. More...
 
#define USART_CLOCKS
 Clock ip name array for I2C. More...
 
#define SPI_CLOCKS
 Clock ip name array for SPI. More...
 
#define MTB_CLOCKS
 Clock ip name array for MTB. More...
 
#define MRT_CLOCKS
 Clock ip name array for MRT. More...
 
#define WKT_CLOCKS
 Clock ip name array for WKT. More...
 
#define CLK_GATE_DEFINE(reg, bit)   ((((reg)&0xFFU) << 8U) | ((bit)&0xFFU))
 Internal used Clock definition only. More...
 

Enumerations

enum  clock_ip_name_t
 Clock gate name used for CLOCK_EnableClock/CLOCK_DisableClock. More...
 
enum  clock_name_t {
  kCLOCK_CoreSysClk,
  kCLOCK_MainClk,
  kCLOCK_SysOsc,
  kCLOCK_Irc,
  kCLOCK_ExtClk,
  kCLOCK_PllOut,
  kCLOCK_Pllin,
  kCLOCK_WdtOsc
}
 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_sys_pll_src {
  kCLOCK_SysPllSrcIrc = 0U,
  kCLOCK_SysPllSrcSysosc = 1U,
  kCLOCK_SysPllSrcExtClk = 3U
}
 PLL clock definition. More...
 
enum  clock_main_clk_src_t {
  kCLOCK_MainClkSrcIrc = CLK_MAIN_CLK_MUX_DEFINE(0U, 0U),
  kCLOCK_MainClkSrcSysPllin = CLK_MAIN_CLK_MUX_DEFINE(1U, 0U),
  kCLOCK_MainClkSrcWdtOsc = CLK_MAIN_CLK_MUX_DEFINE(2U, 0U),
  kCLOCK_MainClkSrcSysPll = CLK_MAIN_CLK_MUX_DEFINE(3U, 0U)
}
 Main clock source definition. More...
 

Variables

volatile uint32_t g_Wdt_Osc_Freq
 watchdog oscilltor clock frequency. More...
 
volatile uint32_t g_Ext_Clk_Freq
 external clock frequency. More...
 

Driver version

#define FSL_CLOCK_DRIVER_VERSION   (MAKE_VERSION(2, 3, 1))
 CLOCK driver version 2.3.1. More...
 

Clock gate, mux, and divider.

static void CLOCK_EnableClock (clock_ip_name_t clk)
 
static void CLOCK_DisableClock (clock_ip_name_t clk)
 
static void CLOCK_Select (clock_select_t sel)
 
static void CLOCK_SetClkDivider (clock_divider_t name, uint32_t value)
 
static uint32_t CLOCK_GetClkDivider (clock_divider_t name)
 
static void CLOCK_SetCoreSysClkDiv (uint32_t value)
 
void CLOCK_SetMainClkSrc (clock_main_clk_src_t src)
 Set main clock reference source. More...
 
static void CLOCK_SetFRGClkMul (uint32_t mul)
 

Get frequency

uint32_t CLOCK_GetMainClkFreq (void)
 Return Frequency of Main Clock. More...
 
static uint32_t CLOCK_GetCoreSysClkFreq (void)
 Return Frequency of core. More...
 
uint32_t CLOCK_GetClockOutClkFreq (void)
 Return Frequency of ClockOut. More...
 
uint32_t CLOCK_GetIrcFreq (void)
 Return Frequency of IRC. More...
 
uint32_t CLOCK_GetSysOscFreq (void)
 Return Frequency of SYSOSC. More...
 
uint32_t CLOCK_GetUartClkFreq (void)
 Get UART0 frequency. More...
 
uint32_t CLOCK_GetFreq (clock_name_t clockName)
 Return Frequency of selected clock. More...
 
uint32_t CLOCK_GetSystemPLLInClockRate (void)
 Return System PLL input clock rate. More...
 
static uint32_t CLOCK_GetSystemPLLFreq (void)
 Return Frequency of System PLL. More...
 
static uint32_t CLOCK_GetWdtOscFreq (void)
 Get watch dog OSC frequency. More...
 
static uint32_t CLOCK_GetExtClkFreq (void)
 Get external clock frequency. More...
 

PLL operations

void CLOCK_InitSystemPll (const clock_sys_pll_t *config)
 System PLL initialize. More...
 
static void CLOCK_DenitSystemPll (void)
 System PLL Deinitialize. More...
 

External/internal oscillator clock operations

void CLOCK_InitExtClkin (uint32_t clkInFreq)
 Init external CLK IN, select the CLKIN as the external clock source. More...
 
void CLOCK_InitSysOsc (uint32_t oscFreq)
 Init SYS OSC. More...
 
void CLOCK_InitXtalin (uint32_t xtalInFreq)
 XTALIN init function system oscillator is bypassed, sys_osc_clk is fed driectly from the XTALIN. More...
 
static void CLOCK_DeinitSysOsc (void)
 Deinit SYS OSC.
 
void CLOCK_InitWdtOsc (clock_wdt_analog_freq_t wdtOscFreq, uint32_t wdtOscDiv)
 Init watch dog OSC Any setting of the FREQSEL bits will yield a Fclkana value within 40% of the listed frequency value. More...
 
static void CLOCK_DeinitWdtOsc (void)
 Deinit watch dog OSC.
 
bool CLOCK_SetUARTFRGClkFreq (uint32_t freq)
 Set UARTFRG. More...
 
static void CLOCK_SetUARTFRGMULT (uint32_t mul)
 Set UARTFRGMULT. More...
 
void CLOCK_UpdateClkOUTsrc (void)
 Update CLKOUT src.
 

Data Structure Documentation

struct clock_sys_pll_t

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.
 

Macro Definition Documentation

#define FSL_CLOCK_DRIVER_VERSION   (MAKE_VERSION(2, 3, 1))
#define ADC_CLOCKS
Value:
{ \
kCLOCK_Adc, \
}
#define ACMP_CLOCKS
Value:
{ \
kCLOCK_Acmp, \
}
#define SWM_CLOCKS
Value:
{ \
kCLOCK_Swm, \
}
#define ROM_CLOCKS
Value:
{ \
kCLOCK_Rom, \
}
#define SRAM_CLOCKS
Value:
{ \
kCLOCK_Ram0_1, \
}
#define IOCON_CLOCKS
Value:
{ \
kCLOCK_Iocon, \
}
#define GPIO_CLOCKS
Value:
{ \
kCLOCK_Gpio0, \
}
#define GPIO_INT_CLOCKS
Value:
{ \
kCLOCK_GpioInt, \
}
#define DMA_CLOCKS
Value:
{ \
kCLOCK_Dma, \
}
#define CRC_CLOCKS
Value:
{ \
kCLOCK_Crc, \
}
#define WWDT_CLOCKS
Value:
{ \
kCLOCK_Wwdt, \
}
#define SCT_CLOCKS
Value:
{ \
kCLOCK_Sct, \
}
#define I2C_CLOCKS
Value:
{ \
kCLOCK_I2c0, \
}
#define USART_CLOCKS
Value:
{ \
kCLOCK_Uart0, kCLOCK_Uart1, kCLOCK_Uart2, \
}
#define SPI_CLOCKS
Value:
{ \
kCLOCK_Spi0, kCLOCK_Spi1, \
}
#define MTB_CLOCKS
Value:
{ \
kCLOCK_Mtb, \
}
#define MRT_CLOCKS
Value:
{ \
kCLOCK_Mrt, \
}
#define WKT_CLOCKS
Value:
{ \
kCLOCK_Wkt, \
}
#define CLK_GATE_DEFINE (   reg,
  bit 
)    ((((reg)&0xFFU) << 8U) | ((bit)&0xFFU))

Enumeration Type Documentation

Enumerator
kCLOCK_CoreSysClk 

Cpu/AHB/AHB matrix/Memories,etc.

kCLOCK_MainClk 

Main clock.

kCLOCK_SysOsc 

Crystal Oscillator.

kCLOCK_Irc 

IRC12M.

kCLOCK_ExtClk 

External Clock.

kCLOCK_PllOut 

PLL Output.

kCLOCK_Pllin 

PLL Input.

kCLOCK_WdtOsc 

Watchdog Oscillator.

Enumerator
kCLOCK_SysPllSrcIrc 

system pll source from FRO

kCLOCK_SysPllSrcSysosc 

system pll source from system osc

kCLOCK_SysPllSrcExtClk 

system pll source from ext clkin

Enumerator
kCLOCK_MainClkSrcIrc 

main clock source from FRO

kCLOCK_MainClkSrcSysPllin 

main clock source from pll input

kCLOCK_MainClkSrcWdtOsc 

main clock source from watchdog oscillator

kCLOCK_MainClkSrcSysPll 

main clock source from system pll

Function Documentation

void CLOCK_SetMainClkSrc ( clock_main_clk_src_t  src)
Parameters
srcRefer to clock_main_clk_src_t to set the main clock source.
uint32_t CLOCK_GetMainClkFreq ( void  )
Returns
Frequency of Main Clock.
static uint32_t CLOCK_GetCoreSysClkFreq ( void  )
inlinestatic
Returns
Frequency of core.
uint32_t CLOCK_GetClockOutClkFreq ( void  )
Returns
Frequency of ClockOut
uint32_t CLOCK_GetIrcFreq ( void  )
Returns
Frequency of IRC
uint32_t CLOCK_GetSysOscFreq ( void  )
Returns
Frequency of SYSOSC
uint32_t CLOCK_GetUartClkFreq ( void  )
Return values
UART0frequency value.
uint32_t CLOCK_GetFreq ( clock_name_t  clockName)
Returns
Frequency of selected clock
uint32_t CLOCK_GetSystemPLLInClockRate ( void  )
Returns
System PLL input clock rate
static uint32_t CLOCK_GetSystemPLLFreq ( void  )
inlinestatic
Returns
Frequency of PLL
static uint32_t CLOCK_GetWdtOscFreq ( void  )
inlinestatic
Return values
watchdog OSC frequency value.
static uint32_t CLOCK_GetExtClkFreq ( void  )
inlinestatic
Return values
externalclock frequency value.
void CLOCK_InitSystemPll ( const clock_sys_pll_t config)
Parameters
configSystem PLL configurations.
static void CLOCK_DenitSystemPll ( void  )
inlinestatic
void CLOCK_InitExtClkin ( uint32_t  clkInFreq)
Parameters
clkInFreqexternal clock in frequency.
void CLOCK_InitSysOsc ( uint32_t  oscFreq)
Parameters
oscFreqoscillator frequency value.
void CLOCK_InitXtalin ( uint32_t  xtalInFreq)
Parameters
xtalInFreqXTALIN frequency value
Returns
Frequency of PLL
void CLOCK_InitWdtOsc ( clock_wdt_analog_freq_t  wdtOscFreq,
uint32_t  wdtOscDiv 
)

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
wdtOscFreqwatch dog analog part output frequency, reference _wdt_analog_output_freq.
wdtOscDivwatch dog analog part output frequency divider, shoule be a value >= 2U and multiple of 2
bool CLOCK_SetUARTFRGClkFreq ( uint32_t  freq)
Parameters
freqThe frequency specified by src.
static void CLOCK_SetUARTFRGMULT ( uint32_t  mul)
inlinestatic
Deprecated:
Do not use this function. Refer to CLOCK_SetFRGClkMul().
Parameters
mulUARTFRGMULT.

Variable Documentation

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.