Power Management Controller (PMC) driver for SAM.
Copyright (c) 2011-2019 Microchip Technology Inc. and its subsidiaries.
#include "compiler.h"
Macros | |
#define | CKGR_MOR_KEY_PASSWD CKGR_MOR_KEY(0x37U) |
Key to unlock CKGR_MOR register. More... | |
#define | PMC_FAST_STARTUP_Msk (0x7FFFFu) |
Mask to access fast startup input. More... | |
#define | PMC_MASK_STATUS0 (0xFFFFFFFC) |
Bit mask for peripheral clocks (PCER0) More... | |
#define | PMC_MASK_STATUS1 (0xFFFFFFFF) |
Bit mask for peripheral clocks (PCER1) More... | |
#define | PMC_OSC_BYPASS 1 |
Oscillator in bypass mode. More... | |
#define | PMC_OSC_XTAL 0 |
Using external oscillator. More... | |
#define | PMC_PCK_0 0 /* PCK0 ID */ |
#define | PMC_PCK_1 1 /* PCK1 ID */ |
#define | PMC_PCK_2 2 /* PCK2 ID */ |
#define | PMC_PCK_3 3 /* PCK3 ID */ |
#define | PMC_PCK_4 4 /* PCK4 ID */ |
#define | PMC_PCK_5 5 /* PCK5 ID */ |
#define | PMC_PCK_6 6 /* PCK6 ID */ |
#define | PMC_PCK_7 7 /* PCK7 ID */ |
#define | PMC_TIMEOUT (2048) |
Loop counter timeout value. More... | |
#define | pmc_us_to_moscxtst(startup_us, slowck_freq) |
Convert startup time from us to MOSCXTST. More... | |
#define | PMC_WAIT_MODE_FLASH_DEEP_POWERDOWN PMC_FSMR_FLPM_FLASH_DEEP_POWERDOWN |
#define | PMC_WAIT_MODE_FLASH_IDLE PMC_FSMR_FLPM_FLASH_IDLE |
#define | PMC_WAIT_MODE_FLASH_STANDBY PMC_FSMR_FLPM_FLASH_STANDBY |
Flash state in Wait Mode. More... | |
#define | PMC_WPMR_WPKEY_PASSWD PMC_WPMR_WPKEY((uint32_t) 0x504D43) |
PMC_WPMR Write Protect KEY, unlock it. More... | |
#define | SUPC_CR_KEY_PASSWD SUPC_CR_KEY(0xA5U) |
Key used to write SUPC registers. More... | |
#define | SUPC_MR_KEY_PASSWD SUPC_MR_KEY(0xA5U) |
Functions | |
Master clock (MCK) Source and Prescaler configuration | |
| |
void | pmc_mck_set_prescaler (uint32_t ul_pres) |
Set the prescaler of the MCK. More... | |
void | pmc_mck_set_division (uint32_t ul_div) |
void | pmc_mck_set_source (uint32_t ul_source) |
Set the source of the MCK. More... | |
uint32_t | pmc_switch_mck_to_sclk (uint32_t ul_pres) |
Switch master clock source selection to slow clock. More... | |
uint32_t | pmc_switch_mck_to_mainck (uint32_t ul_pres) |
Switch master clock source selection to main clock. More... | |
uint32_t | pmc_switch_mck_to_pllack (uint32_t ul_pres) |
Switch master clock source selection to PLLA clock. More... | |
uint32_t | pmc_switch_mck_to_pllbck (uint32_t ul_pres) |
uint32_t | pmc_switch_mck_to_upllck (uint32_t ul_pres) |
void | pmc_set_flash_in_wait_mode (uint32_t ul_flash_state) |
Slow clock (SLCK) oscillator and configuration | |
void | pmc_switch_sclk_to_32kxtal (uint32_t ul_bypass) |
Switch slow clock source selection to external 32k (Xtal or Bypass). More... | |
uint32_t | pmc_osc_is_ready_32kxtal (void) |
Check if the external 32k Xtal is ready. More... | |
Main Clock (MAINCK) oscillator and configuration | |
void | pmc_switch_mainck_to_fastrc (uint32_t ul_moscrcf) |
Switch main clock source selection to internal fast RC. More... | |
void | pmc_osc_enable_fastrc (uint32_t ul_rc) |
Enable fast RC oscillator. More... | |
void | pmc_osc_disable_fastrc (void) |
Disable the internal fast RC. More... | |
uint32_t | pmc_osc_is_ready_fastrc (void) |
Check if the main fastrc is ready. More... | |
void | pmc_osc_enable_main_xtal (uint32_t ul_xtal_startup_time) |
Enable main XTAL oscillator. More... | |
void | pmc_osc_bypass_main_xtal (void) |
Bypass main XTAL. More... | |
void | pmc_osc_disable_main_xtal (void) |
Disable the main Xtal. More... | |
uint32_t | pmc_osc_is_bypassed_main_xtal (void) |
Check if the main crystal is bypassed. More... | |
uint32_t | pmc_osc_is_ready_main_xtal (void) |
Check if the main crystal is ready. More... | |
void | pmc_switch_mainck_to_xtal (uint32_t ul_bypass, uint32_t ul_xtal_startup_time) |
Switch main clock source selection to external Xtal/Bypass. More... | |
void | pmc_osc_disable_xtal (uint32_t ul_bypass) |
Disable the external Xtal. More... | |
uint32_t | pmc_osc_is_ready_mainck (void) |
Check if the MAINCK is ready. More... | |
void | pmc_mainck_osc_select (uint32_t ul_xtal_rc) |
Select Main Crystal or internal RC as main clock source. More... | |
PLL oscillator and configuration | |
void | pmc_enable_pllack (uint32_t mula, uint32_t pllacount, uint32_t diva) |
Enable PLLA clock. More... | |
void | pmc_disable_pllack (void) |
Disable PLLA clock. More... | |
uint32_t | pmc_is_locked_pllack (void) |
Is PLLA locked? More... | |
void | pmc_enable_pllbck (uint32_t mulb, uint32_t pllbcount, uint32_t divb) |
void | pmc_disable_pllbck (void) |
uint32_t | pmc_is_locked_pllbck (void) |
void | pmc_enable_upll_clock (void) |
void | pmc_disable_upll_clock (void) |
uint32_t | pmc_is_locked_upll (void) |
Peripherals clock configuration | |
uint32_t | pmc_enable_periph_clk (uint32_t ul_id) |
Enable the specified peripheral clock. More... | |
uint32_t | pmc_disable_periph_clk (uint32_t ul_id) |
Disable the specified peripheral clock. More... | |
void | pmc_enable_all_periph_clk (void) |
Enable all peripheral clocks. More... | |
void | pmc_disable_all_periph_clk (void) |
Disable all peripheral clocks. More... | |
uint32_t | pmc_is_periph_clk_enabled (uint32_t ul_id) |
Check if the specified peripheral clock is enabled. More... | |
Programmable clock Source and Prescaler configuration | |
The following functions may be used to select the clock source and prescaler for the specified programmable clock. | |
void | pmc_pck_set_prescaler (uint32_t ul_id, uint32_t ul_pres) |
Set the prescaler for the specified programmable clock. More... | |
void | pmc_pck_set_source (uint32_t ul_id, uint32_t ul_source) |
Set the source oscillator for the specified programmable clock. More... | |
uint32_t | pmc_switch_pck_to_sclk (uint32_t ul_id, uint32_t ul_pres) |
Switch programmable clock source selection to slow clock. More... | |
uint32_t | pmc_switch_pck_to_mainck (uint32_t ul_id, uint32_t ul_pres) |
Switch programmable clock source selection to main clock. More... | |
uint32_t | pmc_switch_pck_to_pllack (uint32_t ul_id, uint32_t ul_pres) |
Switch programmable clock source selection to PLLA clock. More... | |
uint32_t | pmc_get_slck_config (void) |
uint32_t | pmc_get_mainck_config (void) |
uint32_t | pmc_get_pllack_config (void) |
uint32_t | pmc_get_upllckdiv_config (void) |
void | pmc_enable_cpck (void) |
void | pmc_disable_cpck (void) |
bool | pmc_is_cpck_enabled (void) |
void | pmc_enable_cpbmck (void) |
void | pmc_disable_cpbmck (void) |
bool | pmc_is_cpbmck_enabled (void) |
void | pmc_cpck_set_prescaler (uint32_t ul_pres) |
void | pmc_cpck_set_source (uint32_t ul_source) |
uint32_t | pmc_switch_pck_to_pllbck (uint32_t ul_id, uint32_t ul_pres) |
uint32_t | pmc_switch_pck_to_upllck (uint32_t ul_id, uint32_t ul_pres) |
uint32_t | pmc_switch_pck_to_mck (uint32_t ul_id, uint32_t ul_pres) |
Switch programmable clock source selection to mck. More... | |
void | pmc_enable_pck (uint32_t ul_id) |
Enable the specified programmable clock. More... | |
void | pmc_disable_pck (uint32_t ul_id) |
Disable the specified programmable clock. More... | |
void | pmc_enable_all_pck (void) |
Enable all programmable clocks. More... | |
void | pmc_disable_all_pck (void) |
Disable all programmable clocks. More... | |
uint32_t | pmc_is_pck_enabled (uint32_t ul_id) |
Check if the specified programmable clock is enabled. More... | |
USB clock configuration | |
void | pmc_switch_udpck_to_pllack (uint32_t ul_usbdiv) |
void | pmc_switch_udpck_to_pllbck (uint32_t ul_usbdiv) |
void | pmc_switch_udpck_to_upllck (uint32_t ul_usbdiv) |
void | pmc_enable_udpck (void) |
void | pmc_disable_udpck (void) |
void | pmc_switch_uhpck_to_pllack (uint32_t ul_usbdiv) |
void | pmc_switch_uhpck_to_pllbck (uint32_t ul_usbdiv) |
void | pmc_enable_uhpck (void) |
Interrupt and status management | |
void | pmc_enable_interrupt (uint32_t ul_sources) |
Enable PMC interrupts. More... | |
void | pmc_disable_interrupt (uint32_t ul_sources) |
Disable PMC interrupts. More... | |
uint32_t | pmc_get_interrupt_mask (void) |
Get PMC interrupt mask. More... | |
uint32_t | pmc_get_status (void) |
Get current status. More... | |
Power management | |
The following functions are used to configure sleep mode and additional wake up inputs. | |
void | pmc_set_fast_startup_input (uint32_t ul_inputs) |
Set the wake-up inputs for fast startup mode registers (event generation). More... | |
void | pmc_clr_fast_startup_input (uint32_t ul_inputs) |
Clear the wake-up inputs for fast startup mode registers (remove event generation). More... | |
void | pmc_cp_set_fast_startup_input (uint32_t ul_inputs) |
void | pmc_cp_clr_fast_startup_input (uint32_t ul_inputs) |
void | pmc_enable_sleepmode (uint8_t uc_type) |
Enable Sleep Mode. More... | |
void | pmc_enable_waitmode (void) |
Enable Wait Mode. More... | |
void | pmc_enable_backupmode (void) |
Failure detector | |
void | pmc_enable_clock_failure_detector (void) |
Enable Clock Failure Detector. More... | |
void | pmc_disable_clock_failure_detector (void) |
Disable Clock Failure Detector. More... | |
Slow Crystal Oscillator Frequency Monitoring | |
void | pmc_enable_sclk_osc_freq_monitor (void) |
void | pmc_disable_sclk_osc_freq_monitor (void) |
Write protection | |
void | pmc_set_writeprotect (uint32_t ul_enable) |
Enable or disable write protect of PMC registers. More... | |
uint32_t | pmc_get_writeprotect_status (void) |
Return write protect status. More... | |
Sleepwalking configuration | |
uint32_t | pmc_enable_sleepwalking (uint32_t ul_id) |
uint32_t | pmc_disable_sleepwalking (uint32_t ul_id) |
uint32_t | pmc_get_sleepwalking_status0 (void) |
uint32_t | pmc_get_active_status0 (void) |
uint32_t | pmc_get_sleepwalking_status1 (void) |
uint32_t | pmc_get_active_status1 (void) |
#define CKGR_MOR_KEY_PASSWD CKGR_MOR_KEY(0x37U) |
Key to unlock CKGR_MOR register.
Referenced by pmc_disable_clock_failure_detector(), pmc_enable_clock_failure_detector(), pmc_mainck_osc_select(), pmc_osc_bypass_main_xtal(), pmc_osc_disable_fastrc(), pmc_osc_disable_main_xtal(), pmc_osc_disable_xtal(), pmc_osc_enable_fastrc(), pmc_osc_enable_main_xtal(), pmc_switch_mainck_to_fastrc(), and pmc_switch_mainck_to_xtal().
#define PMC_FAST_STARTUP_Msk (0x7FFFFu) |
Mask to access fast startup input.
Referenced by pmc_clr_fast_startup_input(), and pmc_set_fast_startup_input().
#define PMC_MASK_STATUS0 (0xFFFFFFFC) |
Bit mask for peripheral clocks (PCER0)
Referenced by pmc_disable_all_periph_clk(), and pmc_enable_all_periph_clk().
#define PMC_MASK_STATUS1 (0xFFFFFFFF) |
Bit mask for peripheral clocks (PCER1)
Referenced by pmc_disable_all_periph_clk(), and pmc_enable_all_periph_clk().
#define PMC_OSC_BYPASS 1 |
Oscillator in bypass mode.
Referenced by osc_disable(), and osc_enable().
#define PMC_OSC_XTAL 0 |
Using external oscillator.
Referenced by osc_disable(), and osc_enable().
#define PMC_PCK_0 0 /* PCK0 ID */ |
#define PMC_PCK_1 1 /* PCK1 ID */ |
#define PMC_PCK_2 2 /* PCK2 ID */ |
#define PMC_PCK_3 3 /* PCK3 ID */ |
#define PMC_PCK_4 4 /* PCK4 ID */ |
#define PMC_PCK_5 5 /* PCK5 ID */ |
#define PMC_PCK_6 6 /* PCK6 ID */ |
#define PMC_PCK_7 7 /* PCK7 ID */ |
#define PMC_TIMEOUT (2048) |
Loop counter timeout value.
Referenced by pmc_switch_mck_to_mainck(), pmc_switch_mck_to_pllack(), pmc_switch_mck_to_sclk(), pmc_switch_pck_to_mainck(), pmc_switch_pck_to_mck(), pmc_switch_pck_to_pllack(), and pmc_switch_pck_to_sclk().
#define pmc_us_to_moscxtst | ( | startup_us, | |
slowck_freq | |||
) |
Convert startup time from us to MOSCXTST.
Referenced by osc_enable().
#define PMC_WAIT_MODE_FLASH_DEEP_POWERDOWN PMC_FSMR_FLPM_FLASH_DEEP_POWERDOWN |
#define PMC_WAIT_MODE_FLASH_IDLE PMC_FSMR_FLPM_FLASH_IDLE |
#define PMC_WAIT_MODE_FLASH_STANDBY PMC_FSMR_FLPM_FLASH_STANDBY |
Flash state in Wait Mode.
#define PMC_WPMR_WPKEY_PASSWD PMC_WPMR_WPKEY((uint32_t) 0x504D43) |
PMC_WPMR Write Protect KEY, unlock it.
Referenced by pmc_set_writeprotect().
#define SUPC_CR_KEY_PASSWD SUPC_CR_KEY(0xA5U) |
Key used to write SUPC registers.
Referenced by pmc_switch_sclk_to_32kxtal().
#define SUPC_MR_KEY_PASSWD SUPC_MR_KEY(0xA5U) |
Referenced by pmc_switch_sclk_to_32kxtal().
void pmc_disable_sclk_osc_freq_monitor | ( | void | ) |
uint32_t pmc_disable_sleepwalking | ( | uint32_t | ul_id | ) |
void pmc_disable_udpck | ( | void | ) |
Referenced by sysclk_disable_usb().
void pmc_enable_sclk_osc_freq_monitor | ( | void | ) |
uint32_t pmc_enable_sleepwalking | ( | uint32_t | ul_id | ) |
void pmc_enable_udpck | ( | void | ) |
Referenced by sysclk_enable_usb().
void pmc_enable_uhpck | ( | void | ) |
uint32_t pmc_get_active_status0 | ( | void | ) |
uint32_t pmc_get_active_status1 | ( | void | ) |
uint32_t pmc_get_sleepwalking_status0 | ( | void | ) |
uint32_t pmc_get_sleepwalking_status1 | ( | void | ) |
void pmc_switch_udpck_to_pllack | ( | uint32_t | ul_usbdiv | ) |
Referenced by sysclk_enable_usb().
void pmc_switch_udpck_to_pllbck | ( | uint32_t | ul_usbdiv | ) |
Referenced by sysclk_enable_usb().
void pmc_switch_udpck_to_upllck | ( | uint32_t | ul_usbdiv | ) |
void pmc_switch_uhpck_to_pllack | ( | uint32_t | ul_usbdiv | ) |
void pmc_switch_uhpck_to_pllbck | ( | uint32_t | ul_usbdiv | ) |