SAM L21 Clock Driver.
Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries.
Data Structures | |
struct | _system_clock_dfll_config |
DFLL-specific data container. More... | |
struct | _system_clock_dpll_config |
DPLL-specific data container. More... | |
struct | _system_clock_module |
System clock module data container. More... | |
struct | _system_clock_xosc_config |
XOSC-specific data container. More... | |
Macros | |
#define | NVM_DFLL_COARSE_POS 26 /* DFLL48M Coarse calibration value bit position.*/ |
#define | NVM_DFLL_COARSE_SIZE 6 /* DFLL48M Coarse calibration value bit size.*/ |
Functions | |
static void | _system_clock_source_dfll_set_config_errata_9905 (void) |
static void | _system_clock_source_osc16m_freq_sel (void) |
OSC16M frequency selection. Frequency selection can be done only when OSC16M is disabled,thus, OSCULP32K is temporarily used as a new clocksource for mainclock . More... | |
static void | _system_dfll_wait_for_sync (void) |
Wait for sync to the DFLL control registers. More... | |
static void | _system_osc32k_wait_for_sync (void) |
Wait for sync to the OSC32K control registers. More... | |
void | system_clock_init (void) |
Initialize clock system based on the configuration in conf_clocks.h. More... | |
void | system_clock_source_dfll_set_config (struct system_clock_source_dfll_config *const config) |
Configure the DFLL clock source. More... | |
enum status_code | system_clock_source_disable (const enum system_clock_source clock_source) |
Disables a clock source. More... | |
void | system_clock_source_dpll_set_config (struct system_clock_source_dpll_config *const config) |
Configure the DPLL clock source. More... | |
enum status_code | system_clock_source_enable (const enum system_clock_source clock_source) |
Enables a clock source. More... | |
uint32_t | system_clock_source_get_hz (const enum system_clock_source clock_source) |
Retrieve the frequency of a clock source. More... | |
bool | system_clock_source_is_ready (const enum system_clock_source clock_source) |
Checks if a clock source is ready. More... | |
void | system_clock_source_osc16m_set_config (struct system_clock_source_osc16m_config *const config) |
Configure the internal OSC16M oscillator clock source. More... | |
void | system_clock_source_osc32k_set_config (struct system_clock_source_osc32k_config *const config) |
Configure the internal OSC32K oscillator clock source. More... | |
void | system_clock_source_osculp32k_set_config (struct system_clock_source_osculp32k_config *const config) |
Configure the internal OSCULP32K oscillator clock source. More... | |
enum status_code | system_clock_source_write_calibration (const enum system_clock_source clock_source, const uint16_t calibration_value, const uint8_t freq_select) |
Writes the calibration values for a given oscillator clock source. More... | |
void | system_clock_source_xosc32k_set_config (struct system_clock_source_xosc32k_config *const config) |
Configure the XOSC32K external 32KHz oscillator clock source. More... | |
void | system_clock_source_xosc_set_config (struct system_clock_source_xosc_config *const config) |
Configure the external oscillator clock source. More... | |
Variables | |
static struct _system_clock_module | _system_clock_inst |
Internal module instance to cache configuration values. More... | |
#define NVM_DFLL_COARSE_POS 26 /* DFLL48M Coarse calibration value bit position.*/ |
Referenced by system_clock_init().
#define NVM_DFLL_COARSE_SIZE 6 /* DFLL48M Coarse calibration value bit size.*/ |
Referenced by system_clock_init().
|
inlinestatic |
|
inlinestatic |
OSC16M frequency selection. Frequency selection can be done only when OSC16M is disabled,thus, OSCULP32K is temporarily used as a new clocksource for mainclock .
References system_clock_source_osc16m_config::fsel, GCLK_GENERATOR_0, system_clock_source_osc16m_config::on_demand, system_clock_source_osc16m_config::run_in_standby, system_gclk_gen_config::source_clock, system_clock_source_disable(), system_clock_source_enable(), system_clock_source_is_ready(), SYSTEM_CLOCK_SOURCE_OSC16M, system_clock_source_osc16m_get_config_defaults(), system_clock_source_osc16m_set_config(), SYSTEM_CLOCK_SOURCE_ULP32K, system_gclk_gen_get_config_defaults(), and system_gclk_gen_set_config().
Referenced by system_clock_init().
|
inlinestatic |
Wait for sync to the DFLL control registers.
Referenced by _system_clock_source_dfll_set_config_errata_9905(), and system_clock_source_get_hz().
|
inlinestatic |
Wait for sync to the OSC32K control registers.
Referenced by system_clock_source_write_calibration().
enum status_code system_clock_source_enable | ( | const enum system_clock_source | clock_source | ) |
Enables a clock source.
Enables a clock source which has been previously configured.
[in] | clock_source | Clock source to enable |
STATUS_OK | Clock source was enabled successfully and is ready |
STATUS_ERR_INVALID_ARG | The clock source is not available on this device |
References _system_clock_source_dfll_set_config_errata_9905(), Assert, _system_clock_dfll_config::control, _system_clock_module::dfll, STATUS_ERR_INVALID_ARG, STATUS_OK, SYSTEM_CLOCK_SOURCE_DFLL, SYSTEM_CLOCK_SOURCE_DPLL, SYSTEM_CLOCK_SOURCE_OSC16M, SYSTEM_CLOCK_SOURCE_OSC32K, SYSTEM_CLOCK_SOURCE_ULP32K, SYSTEM_CLOCK_SOURCE_XOSC, and SYSTEM_CLOCK_SOURCE_XOSC32K.
Referenced by _system_clock_source_osc16m_freq_sel(), init_dfll(), init_osc32k(), init_xosc32k(), main(), main_clock_select_dfll(), main_clock_select_osc16m(), system_clock_init(), test_standby_mode_dynamic_power_sleepwalking(), and test_standby_mode_static_power_sleepwalking().
enum status_code system_clock_source_write_calibration | ( | const enum system_clock_source | clock_source, |
const uint16_t | calibration_value, | ||
const uint8_t | freq_select | ||
) |
Writes the calibration values for a given oscillator clock source.
Writes an oscillator calibration value to the given oscillator control registers. The acceptable ranges are:
For OSC32K:
[in] | clock_source | Clock source to calibrate |
[in] | calibration_value | Calibration value to write |
[in] | freq_range | Frequency range (8MHz oscillator only) |
STATUS_OK | The calibration value was written successfully |
STATUS_ERR_INVALID_ARG | The setting is not valid for selected clock source |
References _system_osc32k_wait_for_sync(), Assert, STATUS_ERR_INVALID_ARG, STATUS_OK, SYSTEM_CLOCK_SOURCE_OSC16M, SYSTEM_CLOCK_SOURCE_OSC32K, and SYSTEM_CLOCK_SOURCE_ULP32K.
|
static |
Internal module instance to cache configuration values.