CMUEMLIB

Detailed Description

Clock management unit (CMU) Peripheral API.

This module contains functions to control the CMU peripheral of Silicon Labs 32-bit MCUs and SoCs. The CMU controls oscillators and clocks.

Data Structures

struct CMU_HFXOInit_TypeDef
struct CMU_LFXOInit_TypeDef

Macros

#define CMU_HFXOINIT_DEFAULT
#define CMU_HFXOINIT_EXTERNAL_CLOCK
#define CMU_LFXOINIT_DEFAULT
#define CMU_LFXOINIT_EXTERNAL_CLOCK
#define cmuClkDiv_1 1
#define cmuClkDiv_1024 1024
#define cmuClkDiv_128 128
#define cmuClkDiv_16 16
#define cmuClkDiv_16384 16384
#define cmuClkDiv_2 2
#define cmuClkDiv_2048 2048
#define cmuClkDiv_256 256
#define cmuClkDiv_32 32
#define cmuClkDiv_32768 32768
#define cmuClkDiv_4 4
#define cmuClkDiv_4096 4096
#define cmuClkDiv_512 512
#define cmuClkDiv_64 64
#define cmuClkDiv_8 8
#define cmuClkDiv_8192 8192

Typedefs

typedef uint32_t CMU_ClkDiv_TypeDef

Enumerations

enum CMU_AUXHFRCOBand_TypeDef {
cmuAUXHFRCOBand_1MHz = _CMU_AUXHFRCOCTRL_BAND_1MHZ,
cmuAUXHFRCOBand_7MHz = _CMU_AUXHFRCOCTRL_BAND_7MHZ,
cmuAUXHFRCOBand_11MHz = _CMU_AUXHFRCOCTRL_BAND_11MHZ,
cmuAUXHFRCOBand_14MHz = _CMU_AUXHFRCOCTRL_BAND_14MHZ,
cmuAUXHFRCOBand_21MHz = _CMU_AUXHFRCOCTRL_BAND_21MHZ
}
enum CMU_Clock_TypeDef {
cmuClock_HF ,
cmuClock_DBG ,
cmuClock_AUX ,
cmuClock_HFPER ,
cmuClock_USART1 ,
cmuClock_TIMER0 ,
cmuClock_TIMER1 ,
cmuClock_ACMP0 ,
cmuClock_PRS ,
cmuClock_IDAC0 ,
cmuClock_GPIO ,
cmuClock_VCMP ,
cmuClock_ADC0 ,
cmuClock_I2C0 ,
cmuClock_CORE ,
cmuClock_AES ,
cmuClock_DMA ,
cmuClock_HFLE ,
cmuClock_LFA ,
cmuClock_RTC ,
cmuClock_PCNT0 ,
cmuClock_LFB ,
cmuClock_LEUART0
}
enum CMU_HFRCOBand_TypeDef {
cmuHFRCOBand_1MHz = _CMU_HFRCOCTRL_BAND_1MHZ,
cmuHFRCOBand_7MHz = _CMU_HFRCOCTRL_BAND_7MHZ,
cmuHFRCOBand_11MHz = _CMU_HFRCOCTRL_BAND_11MHZ,
cmuHFRCOBand_14MHz = _CMU_HFRCOCTRL_BAND_14MHZ,
cmuHFRCOBand_21MHz = _CMU_HFRCOCTRL_BAND_21MHZ
}
enum CMU_LFXOBoost_TypeDef {
cmuLfxoBoost70 = 0x0,
cmuLfxoBoost100 = 0x2
}
enum CMU_Osc_TypeDef {
cmuOsc_LFXO ,
cmuOsc_LFRCO ,
cmuOsc_HFXO ,
cmuOsc_HFRCO ,
cmuOsc_AUXHFRCO ,
cmuOsc_ULFRCO
}
enum CMU_OscMode_TypeDef {
cmuOscMode_Crystal ,
cmuOscMode_AcCoupled ,
cmuOscMode_External
}
enum CMU_Select_TypeDef {
cmuSelect_Error ,
cmuSelect_Disabled ,
cmuSelect_LFXO ,
cmuSelect_LFRCO ,
cmuSelect_HFXO ,
cmuSelect_HFRCO ,
cmuSelect_HFCLKLE ,
cmuSelect_AUXHFRCO ,
cmuSelect_HFSRCCLK ,
cmuSelect_HFCLK ,
cmuSelect_ULFRCO
}

Functions

CMU_AUXHFRCOBand_TypeDef CMU_AUXHFRCOBandGet (void)
Get the AUXHFRCO band in use.
void CMU_AUXHFRCOBandSet ( CMU_AUXHFRCOBand_TypeDef band)
Set the AUXHFRCO band and the tuning value based on the value in the calibration table made during production.
uint32_t CMU_Calibrate (uint32_t HFCycles, CMU_Osc_TypeDef reference)
Calibrate the clock.
void CMU_CalibrateConfig (uint32_t downCycles, CMU_Osc_TypeDef downSel, CMU_Osc_TypeDef upSel)
Configure the clock calibration.
__STATIC_INLINE void CMU_CalibrateCont (bool enable)
Configure continuous calibration mode.
uint32_t CMU_CalibrateCountGet (void)
Get the calibration count register.
__STATIC_INLINE void CMU_CalibrateStart (void)
Start calibration.
__STATIC_INLINE void CMU_CalibrateStop (void)
Stop the calibration counters.
CMU_ClkDiv_TypeDef CMU_ClockDivGet ( CMU_Clock_TypeDef clock)
Get the clock divisor/prescaler.
void CMU_ClockDivSet ( CMU_Clock_TypeDef clock, CMU_ClkDiv_TypeDef div)
Set the clock divisor/prescaler.
void CMU_ClockEnable ( CMU_Clock_TypeDef clock, bool enable)
Enable/disable a clock.
uint32_t CMU_ClockFreqGet ( CMU_Clock_TypeDef clock)
Get the clock frequency for a clock point.
CMU_Select_TypeDef CMU_ClockSelectGet ( CMU_Clock_TypeDef clock)
Get the currently selected reference clock used for a clock branch.
void CMU_ClockSelectSet ( CMU_Clock_TypeDef clock, CMU_Select_TypeDef ref)
Select the reference clock/oscillator used for a clock branch.
__STATIC_INLINE uint32_t CMU_DivToLog2 ( CMU_ClkDiv_TypeDef div)
Convert dividend to logarithmic value. It only works for even numbers equal to 2^n.
void CMU_FreezeEnable (bool enable)
CMU low frequency register synchronization freeze control.
CMU_HFRCOBand_TypeDef CMU_HFRCOBandGet (void)
Get HFRCO band in use.
void CMU_HFRCOBandSet ( CMU_HFRCOBand_TypeDef band)
Set HFRCO band and the tuning value based on the value in the calibration table made during production.
uint32_t CMU_HFRCOStartupDelayGet (void)
Get the HFRCO startup delay.
void CMU_HFRCOStartupDelaySet (uint32_t delay)
Set the HFRCO startup delay.
void CMU_HFXOInit (const CMU_HFXOInit_TypeDef *hfxoInit)
Set HFXO control registers.
__STATIC_INLINE void CMU_IntClear (uint32_t flags)
Clear one or more pending CMU interrupts.
__STATIC_INLINE void CMU_IntDisable (uint32_t flags)
Disable one or more CMU interrupts.
__STATIC_INLINE void CMU_IntEnable (uint32_t flags)
Enable one or more CMU interrupts.
__STATIC_INLINE uint32_t CMU_IntGet (void)
Get pending CMU interrupts.
__STATIC_INLINE uint32_t CMU_IntGetEnabled (void)
Get enabled and pending CMU interrupt flags.
__STATIC_INLINE void CMU_IntSet (uint32_t flags)
Set one or more pending CMU interrupts.
uint32_t CMU_LCDClkFDIVGet (void)
Get the LCD framerate divisor (FDIV) setting.
void CMU_LCDClkFDIVSet (uint32_t div)
Set the LCD framerate divisor (FDIV) setting.
void CMU_LFXOInit (const CMU_LFXOInit_TypeDef *lfxoInit)
Set LFXO control registers.
__STATIC_INLINE void CMU_Lock (void)
Lock the CMU to protect some of its registers against unintended modification.
__STATIC_INLINE uint32_t CMU_Log2ToDiv (uint32_t log2)
Convert logarithm of 2 prescaler to division factor.
void CMU_OscillatorEnable ( CMU_Osc_TypeDef osc, bool enable, bool wait)
Enable/disable oscillator.
uint32_t CMU_OscillatorTuningGet ( CMU_Osc_TypeDef osc)
Get the oscillator frequency tuning setting.
void CMU_OscillatorTuningSet ( CMU_Osc_TypeDef osc, uint32_t val)
Set the oscillator frequency tuning control.
bool CMU_PCNTClockExternalGet (unsigned int instance)
Determine if the currently selected PCNTn clock used is external or LFBCLK.
void CMU_PCNTClockExternalSet (unsigned int instance, bool external)
Select the PCNTn clock.
__STATIC_INLINE void CMU_Unlock (void)
Unlock the CMU so that writing to locked registers again is possible.
void CMU_UpdateWaitStates (uint32_t freq, int vscale)

Macro Definition Documentation

#define CMU_HFXOINIT_DEFAULT
Value:
{ \
_CMU_CTRL_HFXOBOOST_DEFAULT, /* 100% HFXO boost */ \
_CMU_CTRL_HFXOTIMEOUT_DEFAULT, /* 16 K startup delay */ \
false, /* Disable glitch detector */ \
cmuOscMode_Crystal, /* Crystal oscillator */ \
}

Default HFXO initialization values for Platform 1 devices.

Definition at line 2303 of file em_cmu.h .

#define CMU_HFXOINIT_EXTERNAL_CLOCK
Value:
{ \
0, /* Minimal HFXO boost, 50% */ \
_CMU_CTRL_HFXOTIMEOUT_8CYCLES, /* Minimal startup delay, 8 cycles */ \
false, /* Disable glitch detector */ \
cmuOscMode_External, /* External digital clock */ \
}

Definition at line 2310 of file em_cmu.h .

#define CMU_LFXOINIT_DEFAULT
Value:
{ \
cmuLfxoBoost70, \
_CMU_CTRL_LFXOTIMEOUT_DEFAULT, \
cmuOscMode_Crystal, \
}

Default LFXO initialization values for platform 1 devices.

Definition at line 2166 of file em_cmu.h .

#define CMU_LFXOINIT_EXTERNAL_CLOCK
Value:
{ \
cmuLfxoBoost70, \
_CMU_CTRL_LFXOTIMEOUT_8CYCLES, \
cmuOscMode_External, \
}

Definition at line 2172 of file em_cmu.h .

#define cmuClkDiv_1   1

Clock divisors. These values are valid for prescalers. Divide clock by 1.

Definition at line 877 of file em_cmu.h .

Referenced by CAPLESENSE_setupCMU() , CMU_ClockDivGet() , CMU_ClockDivSet() , and RETARGET_SerialInit() .

#define cmuClkDiv_1024   1024

Divide clock by 1024.

Definition at line 887 of file em_cmu.h .

#define cmuClkDiv_128   128

Divide clock by 128.

Definition at line 884 of file em_cmu.h .

Referenced by CMU_ClockDivSet() , and CMU_LCDClkFDIVSet() .

#define cmuClkDiv_16   16

Divide clock by 16.

Definition at line 881 of file em_cmu.h .

Referenced by CMU_ClockDivGet() , CMU_ClockDivSet() , and CMU_ClockFreqGet() .

#define cmuClkDiv_16384   16384

Divide clock by 16384.

Definition at line 891 of file em_cmu.h .

#define cmuClkDiv_2   2

Divide clock by 2.

Definition at line 878 of file em_cmu.h .

#define cmuClkDiv_2048   2048

Divide clock by 2048.

Definition at line 888 of file em_cmu.h .

#define cmuClkDiv_256   256

Divide clock by 256.

Definition at line 885 of file em_cmu.h .

Referenced by UDELAY_Calibrate() .

#define cmuClkDiv_32   32

Divide clock by 32.

Definition at line 882 of file em_cmu.h .

#define cmuClkDiv_32768   32768

Divide clock by 32768.

Definition at line 892 of file em_cmu.h .

Referenced by CMU_ClockDivSet() .

#define cmuClkDiv_4   4

Divide clock by 4.

Definition at line 879 of file em_cmu.h .

#define cmuClkDiv_4096   4096

Divide clock by 4096.

Definition at line 889 of file em_cmu.h .

#define cmuClkDiv_512   512

Divide clock by 512.

Definition at line 886 of file em_cmu.h .

Referenced by CMU_ClockDivSet() .

#define cmuClkDiv_64   64

Divide clock by 64.

Definition at line 883 of file em_cmu.h .

#define cmuClkDiv_8   8

Divide clock by 8.

Definition at line 880 of file em_cmu.h .

Referenced by CMU_ClockDivSet() .

#define cmuClkDiv_8192   8192

Divide clock by 8192.

Definition at line 890 of file em_cmu.h .

Typedef Documentation

typedef uint32_t CMU_ClkDiv_TypeDef

Clock divider configuration

Definition at line 895 of file em_cmu.h .

Enumeration Type Documentation

AUX high-frequency RCO bands

Enumerator
cmuAUXHFRCOBand_1MHz

1 MHz RC band

cmuAUXHFRCOBand_7MHz

7 MHz RC band

cmuAUXHFRCOBand_11MHz

11 MHz RC band

cmuAUXHFRCOBand_14MHz

14 MHz RC band

cmuAUXHFRCOBand_21MHz

21 MHz RC band

Definition at line 918 of file em_cmu.h .

Clock points in CMU. See CMU overview in the reference manual.

Enumerator
cmuClock_HF

High-frequency clock

cmuClock_DBG

Debug clock

cmuClock_AUX

AUX clock

cmuClock_HFPER

High-frequency peripheral clock

cmuClock_USART1

Universal sync/async receiver/transmitter 1 clock

cmuClock_TIMER0

Timer 0 clock

cmuClock_TIMER1

Timer 1 clock

cmuClock_ACMP0

Analog comparator 0 clock

cmuClock_PRS

Peripheral-reflex system clock

cmuClock_IDAC0

Current digital-to-analog converter 0 clock

cmuClock_GPIO

General-purpose input/output clock

cmuClock_VCMP

Voltage comparator clock

cmuClock_ADC0

Analog-to-digital converter 0 clock

cmuClock_I2C0

I2C 0 clock

cmuClock_CORE

Core clock

cmuClock_AES

Advanced encryption standard accelerator clock

cmuClock_DMA

Direct memory access controller clock

cmuClock_HFLE

Low-energy clock divided down from HFCORECLK

cmuClock_LFA

Low-frequency A clock

cmuClock_RTC

Real time counter clock

cmuClock_PCNT0

Pulse counter 0 clock

cmuClock_LFB

Low-frequency B clock

cmuClock_LEUART0

Low-energy universal asynchronous receiver/transmitter 0 clock

Definition at line 1026 of file em_cmu.h .

High-frequency system RCO bands

Enumerator
cmuHFRCOBand_1MHz

1 MHz HFRCO band

cmuHFRCOBand_7MHz

7 MHz HFRCO band

cmuHFRCOBand_11MHz

11 MHz HFRCO band

cmuHFRCOBand_14MHz

14 MHz HFRCO band

cmuHFRCOBand_21MHz

21 MHz HFRCO band

Definition at line 904 of file em_cmu.h .

LFXO Boost values.

Definition at line 2099 of file em_cmu.h .

Oscillator types.

Enumerator
cmuOsc_LFXO

Low-frequency crystal oscillator.

cmuOsc_LFRCO

Low-frequency RC oscillator.

cmuOsc_HFXO

High-frequency crystal oscillator.

cmuOsc_HFRCO

High-frequency RC oscillator.

cmuOsc_AUXHFRCO

Auxiliary high-frequency RC oscillator.

cmuOsc_ULFRCO

Ultra low-frequency RC oscillator.

Definition at line 2020 of file em_cmu.h .

Oscillator modes.

Enumerator
cmuOscMode_Crystal

Crystal oscillator.

cmuOscMode_AcCoupled

AC-coupled buffer.

cmuOscMode_External

External digital clock.

Definition at line 2038 of file em_cmu.h .

Selectable clock sources.

Enumerator
cmuSelect_Error

Usage error.

cmuSelect_Disabled

Clock selector disabled.

cmuSelect_LFXO

Low-frequency crystal oscillator.

cmuSelect_LFRCO

Low-frequency RC oscillator.

cmuSelect_HFXO

High-frequency crystal oscillator.

cmuSelect_HFRCO

High-frequency RC oscillator.

cmuSelect_HFCLKLE

High-frequency LE clock divided by 2 or 4.

cmuSelect_AUXHFRCO

Auxilliary clock source can be used for debug clock.

cmuSelect_HFSRCCLK

High-frequency source clock.

cmuSelect_HFCLK

Divided HFCLK on Giant for debug clock, undivided on Tiny Gecko and for USBC (not used on Gecko).

cmuSelect_ULFRCO

Ultra low-frequency RC oscillator.

Definition at line 2045 of file em_cmu.h .

Function Documentation

CMU_AUXHFRCOBand_TypeDef CMU_AUXHFRCOBandGet ( void )

Get the AUXHFRCO band in use.

Returns
AUXHFRCO band in use.

Definition at line 3553 of file em_cmu.c .

References _CMU_AUXHFRCOCTRL_BAND_MASK , _CMU_AUXHFRCOCTRL_BAND_SHIFT , and CMU .

uint32_t CMU_Calibrate ( uint32_t HFCycles,
CMU_Osc_TypeDef reference
)

Calibrate the clock.

Run a calibration for HFCLK against a selectable reference clock. See the reference manual, CMU chapter, for more details.

Note
This function will not return until the calibration measurement is completed.
Parameters
[in] HFCycles The number of HFCLK cycles to run the calibration. Increasing this number increases precision but the calibration will take more time.
[in] ref The reference clock used to compare HFCLK.
Returns
The number of ticks the reference clock after HFCycles ticks on the HF clock.

Definition at line 3761 of file em_cmu.c .

References _CMU_CALCNT_CALCNT_MASK , _CMU_CALCNT_CALCNT_SHIFT , _CMU_STATUS_CALBSY_SHIFT , BUS_RegBitRead() , CMU , CMU_CALCTRL_UPSEL_AUXHFRCO , CMU_CALCTRL_UPSEL_HFRCO , CMU_CALCTRL_UPSEL_HFXO , CMU_CALCTRL_UPSEL_LFRCO , CMU_CALCTRL_UPSEL_LFXO , CMU_CMD_CALSTART , cmuOsc_AUXHFRCO , cmuOsc_HFRCO , cmuOsc_HFXO , cmuOsc_LFRCO , and cmuOsc_LFXO .

void CMU_CalibrateConfig ( uint32_t downCycles,
CMU_Osc_TypeDef downSel,
CMU_Osc_TypeDef upSel
)

Configure the clock calibration.

Configure a calibration for a selectable clock source against another selectable reference clock. See the reference manual, CMU chapter, for more details.

Note
After configuration, a call to CMU_CalibrateStart() is required and the resulting calibration value can be read out with the CMU_CalibrateCountGet() function call.
Parameters
[in] downCycles The number of downSel clock cycles to run the calibration. Increasing this number increases precision but the calibration will take more time.
[in] downSel The clock, which will be counted down downCycles.
[in] upSel The reference clock; the number of cycles generated by this clock will be counted and added up and the result can be given with the CMU_CalibrateCountGet() function call.

Definition at line 3844 of file em_cmu.c .

References _CMU_CALCNT_CALCNT_MASK , _CMU_CALCNT_CALCNT_SHIFT , _CMU_CALCTRL_DOWNSEL_MASK , _CMU_CALCTRL_UPSEL_MASK , CMU , CMU_CALCTRL_DOWNSEL_AUXHFRCO , CMU_CALCTRL_DOWNSEL_HFRCO , CMU_CALCTRL_DOWNSEL_HFXO , CMU_CALCTRL_DOWNSEL_LFRCO , CMU_CALCTRL_DOWNSEL_LFXO , CMU_CALCTRL_UPSEL_AUXHFRCO , CMU_CALCTRL_UPSEL_HFRCO , CMU_CALCTRL_UPSEL_HFXO , CMU_CALCTRL_UPSEL_LFRCO , CMU_CALCTRL_UPSEL_LFXO , cmuOsc_AUXHFRCO , cmuOsc_HFRCO , cmuOsc_HFXO , cmuOsc_LFRCO , and cmuOsc_LFXO .

__STATIC_INLINE void CMU_CalibrateCont ( bool enable )

Configure continuous calibration mode.

Parameters
[in] enable If true, enables continuous calibration, if false disables continuous calibration.

Definition at line 2453 of file em_cmu.h .

References _CMU_CALCTRL_CONT_SHIFT , BUS_RegBitWrite() , and CMU .

uint32_t CMU_CalibrateCountGet ( void )

Get the calibration count register.

Note
If continuous calibration mode is active, calibration busy will almost always be off and only the value needs to be read. In a normal case, this function call is triggered by the CALRDY interrupt flag.
Returns
The calibration count, the number of UPSEL clocks (see CMU_CalibrateConfig() ) in the period of DOWNSEL oscillator clock cycles configured by a previous write operation to CMU->CALCNT.

Definition at line 3940 of file em_cmu.c .

References _CMU_CALCTRL_CONT_SHIFT , _CMU_STATUS_CALBSY_SHIFT , BUS_RegBitRead() , and CMU .

__STATIC_INLINE void CMU_CalibrateStart ( void )

Start calibration.

Note
This call is usually invoked after CMU_CalibrateConfig() and possibly CMU_CalibrateCont() .

Definition at line 2466 of file em_cmu.h .

References CMU , and CMU_CMD_CALSTART .

Get the clock divisor/prescaler.

Parameters
[in] clock A clock point to get the divisor/prescaler for. Notice that not all clock points have a divisor/prescaler. See the CMU overview in the reference manual.
Returns
The current clock point divisor/prescaler. 1 is returned if clock specifies a clock point without a divisor/prescaler.

Definition at line 3975 of file em_cmu.c .

References _CMU_HFCORECLKDIV_HFCORECLKDIV_MASK , _CMU_HFCORECLKDIV_HFCORECLKDIV_SHIFT , _CMU_HFPERCLKDIV_HFPERCLKDIV_MASK , _CMU_HFPERCLKDIV_HFPERCLKDIV_SHIFT , _CMU_LFAPRESC0_RTC_MASK , _CMU_LFAPRESC0_RTC_SHIFT , _CMU_LFBPRESC0_LEUART0_MASK , _CMU_LFBPRESC0_LEUART0_SHIFT , CMU , CMU_DivToLog2() , CMU_Log2ToDiv() , cmuClkDiv_1 , cmuClkDiv_16 , cmuClock_LEUART0 , and cmuClock_RTC .

Referenced by UDELAY_Calibrate() .

void CMU_ClockDivSet ( CMU_Clock_TypeDef clock,
CMU_ClkDiv_TypeDef div
)

Set the clock divisor/prescaler.

Note
If setting an LF clock prescaler, synchronization into the low-frequency domain is required. If the same register is modified before a previous update has completed, this function will stall until the previous synchronization has completed. See CMU_FreezeEnable() for a suggestion on how to reduce the stalling time in some use cases.

HFCLKLE prescaler is automatically modified when peripherals with clock domain HFBUSCLK is chosen based on the maximum HFLE frequency allowed.

Parameters
[in] clock Clock point to set divisor/prescaler for. Notice that not all clock points have a divisor/prescaler. See the CMU overview in the reference manual.
[in] div The clock divisor to use (<= cmuClkDiv_512).

Definition at line 4106 of file em_cmu.c .

References _CMU_HFCORECLKDIV_HFCORECLKDIV_MASK , _CMU_HFCORECLKDIV_HFCORECLKDIV_SHIFT , _CMU_HFPERCLKDIV_HFPERCLKDIV_MASK , _CMU_HFPERCLKDIV_HFPERCLKDIV_SHIFT , _CMU_LFAPRESC0_RTC_MASK , _CMU_LFAPRESC0_RTC_SHIFT , _CMU_LFBPRESC0_LEUART0_MASK , _CMU_LFBPRESC0_LEUART0_SHIFT , CMU , CMU_DivToLog2() , CMU_SYNCBUSY_LFAPRESC0 , CMU_SYNCBUSY_LFBPRESC0 , cmuClkDiv_1 , cmuClkDiv_128 , cmuClkDiv_16 , cmuClkDiv_32768 , cmuClkDiv_512 , cmuClkDiv_8 , cmuClock_LEUART0 , cmuClock_RTC , SystemCoreClockGet() , and SystemHFClockGet() .

Referenced by CAPLESENSE_setupCMU() , RETARGET_SerialInit() , RTCDRV_Init() , SegmentLCD_Init() , UARTDRV_InitLeuart() , and UDELAY_Calibrate() .

void CMU_ClockEnable ( CMU_Clock_TypeDef clock,
bool enable
)

Enable/disable a clock.

In general, module clocking is disabled after a reset. If a module clock is disabled, the registers of that module are not accessible and reading from such registers may return undefined values. Writing to registers of clock-disabled modules has no effect. Avoid accessing module registers of a module with a disabled clock.

Note
If enabling/disabling an LF clock, synchronization into the low-frequency domain is required. If the same register is modified before a previous update has completed, this function will stall until the previous synchronization has completed. See CMU_FreezeEnable() for a suggestion on how to reduce the stalling time in some use cases.

HFCLKLE prescaler is automatically modified when peripherals with clock domain HFBUSCLK is chosen based on the maximum HFLE frequency allowed.

Parameters
[in] clock The clock to enable/disable. Notice that not all defined clock points have separate enable/disable control. See the CMU overview in the reference manual.
[in] enable
  • true - enable specified clock.
  • false - disable specified clock.

Definition at line 4314 of file em_cmu.c .

References BUS_RegBitWrite() , CMU , CMU_ClockFreqGet() , CMU_SYNCBUSY_LFACLKEN0 , CMU_SYNCBUSY_LFBCLKEN0 , and cmuClock_HFLE .

Referenced by adcInit() , BOARD_init() , BSP_BccDeInit() , BSP_BccInit() , BSP_BusControlModeSet() , BSP_EbiInit() , BSP_initBoard() , BSP_McuBoard_Init() , CAPLESENSE_setupCMU() , CAPSENSE_Init() , DMA_Init() , DMADRV_DeInit() , ezradio_hal_GpioInit() , gpioInit() , I2CSPM_Init() , ICM20648_spiInit() , initEbiCommon() , initGpio() , MIC_init() , MICROSD_Init() , MICROSD_PowerOff() , MICROSD_PowerOn() , MSDD_Init() , RETARGET_SerialInit() , RTCDRV_DeInit() , RTCDRV_Init() , SegmentLCD_Disable() , SegmentLCD_Init() , SPI_TFT_Init() , SPIDRV_DeInit() , SPIDRV_Init() , TOUCH_Init() , UARTDRV_DeInit() , UARTDRV_InitLeuart() , UARTDRV_InitUart() , UDELAY_Calibrate() , USTIMER_DeInit() , USTIMER_Init() , VDDCHECK_Disable() , and VDDCHECK_Init() .

void CMU_ClockSelectSet ( CMU_Clock_TypeDef clock,
CMU_Select_TypeDef ref
)

Select the reference clock/oscillator used for a clock branch.

Notice that if a selected reference is not enabled prior to selecting its use, it will be enabled and this function will wait for the selected oscillator to be stable. It will however NOT be disabled if another reference clock is selected later.

This feature is particularly important if selecting a new reference clock for the clock branch clocking the core. Otherwise, the system may halt.

Note
HFCLKLE prescaler is automatically modified when peripherals with clock domain HFBUSCLK is chosen based on the maximum HFLE frequency allowed.
Parameters
[in] clock A clock branch to select reference clock for. One of:
[in] ref A reference selected for clocking. See the reference manual for details about references available for a specific clock branch.

Definition at line 5814 of file em_cmu.c .

References _CMU_CTRL_HFXOBUFCUR_MASK , _CMU_HFCORECLKEN0_LE_SHIFT , _CMU_LFCLKSEL_LFA_DISABLED , _CMU_LFCLKSEL_LFA_HFCORECLKLEDIV2 , _CMU_LFCLKSEL_LFA_LFRCO , _CMU_LFCLKSEL_LFA_LFXO , _CMU_LFCLKSEL_LFA_MASK , _CMU_LFCLKSEL_LFA_SHIFT , _CMU_LFCLKSEL_LFAE_MASK , _CMU_LFCLKSEL_LFAE_SHIFT , _CMU_LFCLKSEL_LFB_MASK , _CMU_LFCLKSEL_LFB_SHIFT , _CMU_LFCLKSEL_LFBE_MASK , _CMU_LFCLKSEL_LFBE_SHIFT , BUS_RegBitWrite() , CMU , CMU_ClockFreqGet() , CMU_CMD_HFCLKSEL_HFRCO , CMU_CMD_HFCLKSEL_HFXO , CMU_CMD_HFCLKSEL_LFRCO , CMU_CMD_HFCLKSEL_LFXO , CMU_HFRCOBandGet() , CMU_OscillatorEnable() , cmuClock_HF , cmuClock_HFLE , cmuOsc_AUXHFRCO , cmuOsc_HFRCO , cmuOsc_HFXO , cmuOsc_LFRCO , cmuOsc_LFXO , cmuSelect_AUXHFRCO , cmuSelect_Disabled , cmuSelect_HFCLK , cmuSelect_HFCLKLE , cmuSelect_HFRCO , cmuSelect_HFSRCCLK , cmuSelect_HFXO , cmuSelect_LFRCO , cmuSelect_LFXO , cmuSelect_ULFRCO , SL_FALLTHROUGH , SystemCoreClockGet() , and SystemHFXOClockGet() .

Referenced by BSP_BccInit() , BSP_initClocks() , CAPLESENSE_setupCMU() , MIC_init() , RETARGET_SerialInit() , RTCDRV_Init() , SegmentLCD_Init() , UARTDRV_InitLeuart() , and UDELAY_Calibrate() .

__STATIC_INLINE uint32_t CMU_DivToLog2 ( CMU_ClkDiv_TypeDef div )

Convert dividend to logarithmic value. It only works for even numbers equal to 2^n.

Parameters
[in] div An unscaled dividend.
Returns
Logarithm of 2, as used by fixed prescalers.

Definition at line 2493 of file em_cmu.h .

Referenced by CMU_ClockDivGet() , CMU_ClockDivSet() , CMU_ClockFreqGet() , and RTCDRV_Init() .

void CMU_FreezeEnable ( bool enable )

CMU low frequency register synchronization freeze control.

Some CMU registers require synchronization into the low-frequency (LF) domain. The freeze feature allows for several such registers to be modified before passing them to the LF domain simultaneously (which takes place when the freeze mode is disabled).

Another use case for this feature is using an API (such as the CMU API) for modifying several bit fields consecutively in the same register. If freeze mode is enabled during this sequence, stalling can be avoided.

Note
When enabling freeze mode, this function will wait for all current ongoing CMU synchronization to LF domain to complete (normally synchronization will not be in progress.) However, for this reason, when using freeze mode, modifications of registers requiring LF synchronization should be done within one freeze enable/disable block to avoid unnecessary stalling.
Parameters
[in] enable
  • true - enable freeze, modified registers are not propagated to the LF domain
  • false - disable freeze, modified registers are propagated to the LF domain

Definition at line 6695 of file em_cmu.c .

References CMU , and CMU_FREEZE_REGFREEZE .

CMU_HFRCOBand_TypeDef CMU_HFRCOBandGet ( void )

Get HFRCO band in use.

Returns
HFRCO band in use.

Definition at line 6722 of file em_cmu.c .

References _CMU_HFRCOCTRL_BAND_MASK , _CMU_HFRCOCTRL_BAND_SHIFT , and CMU .

Referenced by CMU_ClockSelectSet() .

uint32_t CMU_HFRCOStartupDelayGet ( void )

Get the HFRCO startup delay.

See the reference manual for more details.

Returns
The startup delay in use.

Definition at line 7005 of file em_cmu.c .

References _CMU_HFRCOCTRL_SUDELAY_MASK , _CMU_HFRCOCTRL_SUDELAY_SHIFT , and CMU .

void CMU_HFRCOStartupDelaySet ( uint32_t delay )

Set the HFRCO startup delay.

See the reference manual for more details.

Parameters
[in] delay The startup delay to set (<= 31).

Definition at line 7021 of file em_cmu.c .

References _CMU_HFRCOCTRL_SUDELAY_MASK , _CMU_HFRCOCTRL_SUDELAY_SHIFT , and CMU .

__STATIC_INLINE void CMU_IntClear ( uint32_t flags )

Clear one or more pending CMU interrupts.

Parameters
[in] flags CMU interrupt sources to clear.

Definition at line 2526 of file em_cmu.h .

References CMU .

__STATIC_INLINE void CMU_IntDisable ( uint32_t flags )

Disable one or more CMU interrupts.

Parameters
[in] flags CMU interrupt sources to disable.

Definition at line 2538 of file em_cmu.h .

References CMU .

__STATIC_INLINE void CMU_IntEnable ( uint32_t flags )

Enable one or more CMU interrupts.

Note
Depending on use case, a pending interrupt may already be set prior to enabling the interrupt. Consider using CMU_IntClear() prior to enabling if the pending interrupt should be ignored.
Parameters
[in] flags CMU interrupt sources to enable.

Definition at line 2555 of file em_cmu.h .

References CMU .

__STATIC_INLINE uint32_t CMU_IntGet ( void )

Get pending CMU interrupts.

Returns
CMU interrupt sources pending.

Definition at line 2567 of file em_cmu.h .

References CMU .

__STATIC_INLINE uint32_t CMU_IntGetEnabled ( void )

Get enabled and pending CMU interrupt flags.

Useful for handling more interrupt sources in the same interrupt handler.

Note
This function does not clear event bits.
Returns
Pending and enabled CMU interrupt sources. The return value is the bitwise AND of
  • the enabled interrupt sources in CMU_IEN and
  • the pending interrupt flags CMU_IF

Definition at line 2588 of file em_cmu.h .

References CMU .

__STATIC_INLINE void CMU_IntSet ( uint32_t flags )

Set one or more pending CMU interrupts.

Parameters
[in] flags CMU interrupt sources to set to pending.

Definition at line 2603 of file em_cmu.h .

References CMU .

uint32_t CMU_LCDClkFDIVGet ( void )

Get the LCD framerate divisor (FDIV) setting.

Returns
The LCD framerate divisor.

Definition at line 7332 of file em_cmu.c .

References CMU .

void CMU_LCDClkFDIVSet ( uint32_t div )

Set the LCD framerate divisor (FDIV) setting.

Note
The FDIV field (CMU LCDCTRL register) should only be modified while the LCD module is clock disabled (CMU LFACLKEN0.LCD bit is 0). This function will NOT modify FDIV if the LCD module clock is enabled. See CMU_ClockEnable() for disabling/enabling LCD clock.
Parameters
[in] div The FDIV setting to use.

Definition at line 7354 of file em_cmu.c .

References CMU , and cmuClkDiv_128 .

Referenced by SegmentLCD_Init() .

void CMU_LFXOInit ( const CMU_LFXOInit_TypeDef * lfxoInit )

Set LFXO control registers.

Note
LFXO configuration should be obtained from a configuration tool, app note, or xtal data sheet. This function disables the LFXO when necessary to ensure a valid state before update.
Parameters
[in] lfxoInit LFXO setup parameters.

Definition at line 7384 of file em_cmu.c .

References _CMU_CTRL_LFXOBOOST_MASK , _CMU_CTRL_LFXOBOOST_SHIFT , _CMU_CTRL_LFXOMODE_MASK , _CMU_CTRL_LFXOMODE_SHIFT , _CMU_CTRL_LFXOTIMEOUT_MASK , _CMU_CTRL_LFXOTIMEOUT_SHIFT , CMU_LFXOInit_TypeDef::boost , BUS_RegBitWrite() , BUS_RegMaskedWrite() , CMU , CMU_ClockSelectGet() , CMU_OscillatorEnable() , cmuClock_HF , cmuOsc_LFXO , cmuSelect_LFXO , EMU , CMU_LFXOInit_TypeDef::mode , and CMU_LFXOInit_TypeDef::timeout .

Referenced by BSP_initClocks() .

__STATIC_INLINE void CMU_Lock ( void )

Lock the CMU to protect some of its registers against unintended modification.

See the reference manual for CMU registers that will be locked.

Note
If locking the CMU registers, they must be unlocked prior to using any CMU API functions modifying CMU registers protected by the lock.

Definition at line 2621 of file em_cmu.h .

References CMU , and CMU_LOCK_LOCKKEY_LOCK .

Referenced by EMU_EnterEM3() .

__STATIC_INLINE uint32_t CMU_Log2ToDiv ( uint32_t log2 )

Convert logarithm of 2 prescaler to division factor.

Parameters
[in] log2 Logarithm of 2, as used by fixed prescalers.
Returns
Dividend.

Definition at line 2636 of file em_cmu.h .

Referenced by CMU_ClockDivGet() , and CMU_ClockFreqGet() .

void CMU_OscillatorEnable ( CMU_Osc_TypeDef osc,
bool enable,
bool wait
)

Enable/disable oscillator.

Note
WARNING: When this function is called to disable either cmuOsc_LFXO or cmuOsc_HFXO, the LFXOMODE or HFXOMODE fields of the CMU_CTRL register are reset to the reset value. In other words, if external clock sources are selected in either LFXOMODE or HFXOMODE fields, the configuration will be cleared and needs to be reconfigured if needed later.
Parameters
[in] osc The oscillator to enable/disable.
[in] enable
  • true - enable specified oscillator.
  • false - disable specified oscillator.
[in] wait Only used if enable is true.
  • true - wait for oscillator start-up time to timeout before returning.
  • false - do not wait for oscillator start-up time to timeout before returning.

Definition at line 7451 of file em_cmu.c .

References _CMU_STATUS_AUXHFRCOENS_SHIFT , _CMU_STATUS_AUXHFRCORDY_SHIFT , _CMU_STATUS_HFRCOENS_SHIFT , _CMU_STATUS_HFRCORDY_SHIFT , _CMU_STATUS_HFXOENS_SHIFT , _CMU_STATUS_HFXORDY_SHIFT , _CMU_STATUS_LFRCOENS_SHIFT , _CMU_STATUS_LFRCORDY_SHIFT , _CMU_STATUS_LFXOENS_SHIFT , _CMU_STATUS_LFXORDY_SHIFT , BUS_RegBitRead() , CMU , CMU_OSCENCMD_AUXHFRCODIS , CMU_OSCENCMD_AUXHFRCOEN , CMU_OSCENCMD_HFRCODIS , CMU_OSCENCMD_HFRCOEN , CMU_OSCENCMD_HFXODIS , CMU_OSCENCMD_HFXOEN , CMU_OSCENCMD_LFRCODIS , CMU_OSCENCMD_LFRCOEN , CMU_OSCENCMD_LFXODIS , CMU_OSCENCMD_LFXOEN , CMU_OscillatorTuningGet() , CMU_OscillatorTuningSet() , cmuOsc_AUXHFRCO , cmuOsc_HFRCO , cmuOsc_HFXO , cmuOsc_LFRCO , cmuOsc_LFXO , and EMU .

Referenced by BSP_initClocks() , CMU_ClockSelectSet() , CMU_HFXOInit() , CMU_LFXOInit() , and UDELAY_Calibrate() .

uint32_t CMU_OscillatorTuningGet ( CMU_Osc_TypeDef osc )

Get the oscillator frequency tuning setting.

Parameters
[in] osc An oscillator to get tuning value for, one of the following:
Returns
The oscillator frequency tuning setting in use.

Definition at line 7626 of file em_cmu.c .

References _CMU_AUXHFRCOCTRL_TUNING_MASK , _CMU_AUXHFRCOCTRL_TUNING_SHIFT , _CMU_HFRCOCTRL_TUNING_MASK , _CMU_HFRCOCTRL_TUNING_SHIFT , _CMU_LFRCOCTRL_TUNING_MASK , _CMU_LFRCOCTRL_TUNING_SHIFT , CMU , cmuOsc_AUXHFRCO , cmuOsc_HFRCO , cmuOsc_HFXO , and cmuOsc_LFRCO .

Referenced by CMU_OscillatorEnable() .

void CMU_OscillatorTuningSet ( CMU_Osc_TypeDef osc,
uint32_t val
)

Set the oscillator frequency tuning control.

Note
Oscillator tuning is done during production and the tuning value is automatically loaded after reset. Changing the tuning value from the calibrated value is for more advanced use. Certain oscillators also have build-in tuning optimization.
Parameters
[in] osc An oscillator to set tuning value for, one of the following:
[in] val The oscillator frequency tuning setting to use.

Definition at line 7694 of file em_cmu.c .

References _CMU_AUXHFRCOCTRL_TUNING_MASK , _CMU_AUXHFRCOCTRL_TUNING_SHIFT , _CMU_HFRCOCTRL_TUNING_MASK , _CMU_HFRCOCTRL_TUNING_SHIFT , _CMU_LFRCOCTRL_TUNING_MASK , _CMU_LFRCOCTRL_TUNING_SHIFT , BUS_RegBitRead() , CMU , CMU_STATUS_HFXOENS , cmuOsc_AUXHFRCO , cmuOsc_HFRCO , cmuOsc_HFXO , and cmuOsc_LFRCO .

Referenced by CMU_OscillatorEnable() .

bool CMU_PCNTClockExternalGet ( unsigned int instance )

Determine if the currently selected PCNTn clock used is external or LFBCLK.

Parameters
[in] instance PCNT instance number to get currently selected clock source for.
Returns
  • true - selected clock is external clock.
  • false - selected clock is LFBCLK.

Definition at line 7907 of file em_cmu.c .

References CMU , and CMU_PCNTCTRL_PCNT0CLKSEL_PCNT0S0 .

void CMU_PCNTClockExternalSet ( unsigned int instance,
bool external
)

Select the PCNTn clock.

Parameters
[in] instance PCNT instance number to set selected clock source for.
[in] external Set to true to select the external clock, false to select LFBCLK.

Definition at line 7947 of file em_cmu.c .

References BUS_RegBitWrite() , CMU , and PCNT_COUNT .

Referenced by PCNT_Init() , and PCNT_Reset() .