Microchip® Advanced Software Framework

uc3c/sysclk.h File Reference

Chip-specific system clock management functions.

Copyright (c) 2010-2018 Microchip Technology Inc. and its subsidiaries.

#include <board.h>
#include <avr32/io.h>
#include <osc.h>
#include <pll.h>
#include <genclk.h>

Macros

#define AVR32_ADCIFA_CLK_PBC   134
 
#define AVR32_CANIF_CLK_PBC   132
 
#define AVR32_MDMA_CLK_PBC   129
 
#define AVR32_PDCA_CLK_PBC   128
 
#define AVR32_PM_PBASEL_PBSEL   0
 
#define AVR32_PM_PBBSEL_PBSEL   0
 
#define AVR32_PM_PBCSEL_PBSEL   0
 
#define AVR32_SPI0_CLK_PBC   131
 
#define AVR32_TC0_CLK_PBC   133
 
#define AVR32_TWIM2_CLK_PBC   136
 
#define AVR32_TWIS2_CLK_PBC   137
 
#define AVR32_USART1_CLK_PBC   130
 
#define AVR32_USART4_CLK_PBC   135
 
#define CONFIG_SYSCLK_INIT_HSBMASK
 Configuration symbol for the HSB clocks enabled at power-on after the sysclock module has been initialized. More...
 
#define CONFIG_USBCLK_DIV
 Configuration symbol for the USB generic clock divider setting. More...
 
#define CONFIG_USBCLK_SOURCE
 Configuration symbol for the USB generic clock source. More...
 
#define USBCLK_STARTUP_TIMEOUT   (OSC0_STARTUP_TIMEOUT*(1000000/AVR32_SCIF_RCOSC_FREQUENCY))
 Number of us to wait for USB clock to start. More...
 
Configuration Symbols
#define CONFIG_SYSCLK_SOURCE   SYSCLK_SRC_RCSYS
 Initial/static main system clock source. More...
 
#define CONFIG_SYSCLK_CPU_DIV   0
 Initial/static CPU/HSB/PBB clock divider (log2) More...
 
#define CONFIG_SYSCLK_PBA_DIV   0
 Initial/static PBA clock divider (log2) More...
 
#define CONFIG_SYSCLK_PBB_DIV   0
 Initial/static PBB clock divider (log2) More...
 
#define CONFIG_SYSCLK_PBC_DIV   0
 Initial/static PBC clock divider (log2) More...
 
#define CONFIG_SYSCLK_INIT_CPUMASK
 Configuration symbol for the CPU clocks enabled at power-on after the sysclock module has been initialized. More...
 
#define CONFIG_SYSCLK_INIT_PBAMASK
 Configuration symbol for the PBA clocks enabled at power-on after the sysclock module has been initialized. More...
 
#define CONFIG_SYSCLK_INIT_PBBMASK
 Configuration symbol for the PBB clocks enabled at power-on after the sysclock module has been initialized. More...
 
#define CONFIG_SYSCLK_INIT_PBCMASK
 Configuration symbol for the PBC clocks enabled at power-on after the sysclock module has been initialized. More...
 
System clock source
#define SYSCLK_SRC_RCSYS   0
 System RC oscillator. More...
 
#define SYSCLK_SRC_OSC0   1
 Oscillator 0. More...
 
#define SYSCLK_SRC_OSC1   2
 Oscillator 1. More...
 
#define SYSCLK_SRC_PLL0   3
 Phase Locked Loop 0. More...
 
#define SYSCLK_SRC_PLL1   4
 Phase Locked Loop 1. More...
 
#define SYSCLK_SRC_RC8M   5
 8 MHz RC oscillator More...
 
#define SYSCLK_SRC_RC120M   7
 120 MHz RC oscillator More...
 
USB Clock Sources
#define USBCLK_SRC_OSC0   GENCLK_SRC_OSC0
 Use OSC0. More...
 
#define USBCLK_SRC_OSC1   GENCLK_SRC_OSC1
 Use OSC1. More...
 
#define USBCLK_SRC_PLL0   GENCLK_SRC_PLL0
 Use PLL0. More...
 
#define USBCLK_SRC_PLL1   GENCLK_SRC_PLL1
 Use PLL1. More...
 
Clocks derived from the CPU clock
#define SYSCLK_OCD   AVR32_OCD_CLK_CPU
 On-Chip Debug system. More...
 
#define SYSCLK_SYSTIMER   AVR32_CORE_CLK_CPU_COUNT
 COUNT/COMPARE system registers. More...
 
Clocks derived from the HSB clock
#define SYSCLK_SAU_HSB   (AVR32_SAU_CLK_HSB % 32)
 Secure Access Unit HSB interface. More...
 
#define SYSCLK_PDCA_HSB   (AVR32_PDCA_CLK_HSB % 32)
 PDCA memory interface. More...
 
#define SYSCLK_MDMA_HSB   (AVR32_MDMA_CLK_HSB % 32)
 MDMA memory interface. More...
 
#define SYSCLK_USBC_DATA   (AVR32_USBC_CLK_HSB % 32)
 USBC DMA and FIFO interface. More...
 
#define SYSCLK_CANIF_DATA   (AVR32_CANIF_CLK_HSB % 32)
 CANIF DMA interface. More...
 
#define SYSCLK_FLASHC_DATA   (AVR32_FLASHC_CLK_HSB % 32)
 Flash data interface. More...
 
#define SYSCLK_PBA_BRIDGE   (AVR32_HMATRIX_CLK_HSB_PBA_BRIDGE % 32)
 HSB<->PBA bridge. More...
 
#define SYSCLK_PBB_BRIDGE   (AVR32_HMATRIX_CLK_HSB_PBB_BRIDGE % 32)
 HSB<->PBB bridge. More...
 
#define SYSCLK_PBC_BRIDGE   (AVR32_HMATRIX_CLK_HSB_PBC_BRIDGE % 32)
 HSB<->PBC bridge. More...
 
#define SYSCLK_HSB_RAM   (AVR32_RAM_CLK_HSB % 32)
 HSB RAM. More...
 
#define SYSCLK_EBI   (AVR32_EBI_CLK_HSB % 32)
 External Bus Interface. More...
 
#define SYSCLK_PEVC_HSB   (AVR32_PEVC_CLK_HSB % 32)
 Peripheral Event Controller. More...
 
Clocks derived from the PBA clock
#define SYSCLK_INTC   (AVR32_INTC_CLK_PBA % 32)
 Internal interrupt controller. More...
 
#define SYSCLK_PM   (AVR32_PM_CLK_PBA % 32)
 PM/RTC/EIM configuration. More...
 
#define SYSCLK_SCIF   (AVR32_SCIF_CLK_PBA % 32)
 System Control Interface. More...
 
#define SYSCLK_AST   (AVR32_AST_CLK_PBA % 32)
 Asynchronous Timer. More...
 
#define SYSCLK_WDT   (AVR32_WDT_CLK_PBA % 32)
 Watchdog Timer. More...
 
#define SYSCLK_EIC   (AVR32_EIC_CLK_PBA % 32)
 External Interrupt Controller. More...
 
#define SYSCLK_FREQM   (AVR32_FREQM_CLK_PBA % 32)
 Frequency Meter. More...
 
#define SYSCLK_GPIO   (AVR32_GPIO_CLK_PBA % 32)
 General-Purpose I/O. More...
 
#define SYSCLK_USART0   (AVR32_USART0_CLK_PBA % 32)
 USART 0. More...
 
#define SYSCLK_USART2   (AVR32_USART2_CLK_PBA % 32)
 USART 2. More...
 
#define SYSCLK_USART3   (AVR32_USART3_CLK_PBA % 32)
 USART 3. More...
 
#define SYSCLK_SPI1   (AVR32_SPI1_CLK_PBA % 32)
 SPI Controller 1. More...
 
#define SYSCLK_TWIM0   (AVR32_TWIM0_CLK_PBA % 32)
 TWI Master 0. More...
 
#define SYSCLK_TWIM1   (AVR32_TWIM1_CLK_PBA % 32)
 TWI Master 1. More...
 
#define SYSCLK_TWIS0   (AVR32_TWIS0_CLK_PBA % 32)
 TWI Slave 0. More...
 
#define SYSCLK_TWIS1   (AVR32_TWIS1_CLK_PBA % 32)
 TWI Slave 1. More...
 
#define SYSCLK_IISC   (AVR32_IISC_CLK_PBA % 32)
 Inter-IC Sound (I2S) Controller. More...
 
#define SYSCLK_PWM   (AVR32_PWM_CLK_PBA % 32)
 Pulse Width Modulator. More...
 
#define SYSCLK_QDEC0   (AVR32_QDEC0_CLK_PBA % 32)
 Quadrature Decoder 0. More...
 
#define SYSCLK_QDEC1   (AVR32_QDEC1_CLK_PBA % 32)
 Quadrature Decoder 1. More...
 
#define SYSCLK_TC1   (AVR32_TC1_CLK_PBA % 32)
 Timer/Counter 1. More...
 
#define SYSCLK_PEVC_REGS   (AVR32_PEVC_CLK_PBA % 32)
 Peripheral Event Controller. More...
 
#define SYSCLK_ACIFA0   (AVR32_ACIFA0_CLK_PBA % 32)
 Analog Comparator 0. More...
 
#define SYSCLK_ACIFA1   (AVR32_ACIFA1_CLK_PBA % 32)
 Analog Comparator 1. More...
 
#define SYSCLK_DACIFB0   (AVR32_DACIFB0_CLK_PBA % 32)
 D/A Converter 0. More...
 
#define SYSCLK_DACIFB1   (AVR32_DACIFB1_CLK_PBA % 32)
 D/A Converter 1. More...
 
#define SYSCLK_AW   (AVR32_AW_CLK_PBA % 32)
 aWire UART More...
 
Clocks derived from the PBB clock
#define SYSCLK_FLASHC_REGS   (AVR32_FLASHC_CLK_PBB % 32)
 Flash Controller registers. More...
 
#define SYSCLK_USBC_REGS   (AVR32_USBC_CLK_PBB % 32)
 USBB registers. More...
 
#define SYSCLK_HMATRIX   (AVR32_HMATRIX_CLK_PBB % 32)
 HSB Matrix configuration. More...
 
#define SYSCLK_SAU_REGS   (AVR32_SAU_CLK_PBB % 32)
 Secure Access Unit register. More...
 
#define SYSCLK_SMC_REGS   (AVR32_SMC_CLK_PBB % 32)
 Static Memory Controller registers. More...
 
#define SYSCLK_SDRAMC_REGS   (AVR32_SDRAMC_CLK_PBB % 32)
 SDRAM Controller registers. More...
 
#define SYSCLK_MACB_REGS   (AVR32_MACB_CLK_PBB % 32)
 Ethernet MAC registers. More...
 
Clocks derived from the PBC clock
#define SYSCLK_PDCA_PB   (AVR32_PDCA_CLK_PBC % 32)
 PDCA peripheral bus interface. More...
 
#define SYSCLK_MDMA_REGS   (AVR32_MDMA_CLK_PBC % 32)
 MDMA registers. More...
 
#define SYSCLK_USART1   (AVR32_USART1_CLK_PBC % 32)
 USART 1. More...
 
#define SYSCLK_SPI0   (AVR32_SPI0_CLK_PBC % 32)
 SPI Controller 0. More...
 
#define SYSCLK_CANIF_REGS   (AVR32_CANIF_CLK_PBC % 32)
 CANIF registers. More...
 
#define SYSCLK_TC0   (AVR32_TC0_CLK_PBC % 32)
 Timer/Counter 0. More...
 
#define SYSCLK_ADCIFA   (AVR32_ADCIFA_CLK_PBC % 32)
 A/D Converter. More...
 
#define SYSCLK_USART4   (AVR32_USART4_CLK_PBC % 32)
 USART 4. More...
 
#define SYSCLK_TWIM2   (AVR32_TWIM2_CLK_PBC % 32)
 TWI Master 2. More...
 
#define SYSCLK_TWIS2   (AVR32_TWIS2_CLK_PBC % 32)
 TWI Slave 2. More...
 

Functions

void sysclk_disable_usb (void)
 Disable the USB generic clock. More...
 
void sysclk_enable_usb (void)
 Enable the USB generic clock. More...
 
void sysclk_priv_disable_module (unsigned int bus_id, unsigned int module_index)
 Disable a maskable module clock. More...
 
void sysclk_priv_enable_module (unsigned int bus_id, unsigned int module_index)
 Enable a maskable module clock. More...
 
Querying the system clock and its derived clocks

The following functions may be used to query the current frequency of the system clock and the CPU and bus clocks derived from it.

sysclk_get_main_hz() and sysclk_get_cpu_hz() can be assumed to be available on all platforms, although some platforms may define additional accessors for various chip-internal bus clocks. These are usually not intended to be queried directly by generic code.

static uint32_t sysclk_get_main_hz (void)
 Return the current rate in Hz of the main system clock. More...
 
static uint32_t sysclk_get_cpu_hz (void)
 Return the current rate in Hz of the CPU clock. More...
 
static uint32_t sysclk_get_hsb_hz (void)
 Return the current rate in Hz of the High-Speed Bus clock. More...
 
static uint32_t sysclk_get_pba_hz (void)
 Return the current rate in Hz of the Peripheral Bus A clock. More...
 
static uint32_t sysclk_get_pbb_hz (void)
 Return the current rate in Hz of the Peripheral Bus B clock. More...
 
static uint32_t sysclk_get_pbc_hz (void)
 Return the current rate in Hz of the Peripheral Bus C clock. More...
 
static uint32_t sysclk_get_peripheral_bus_hz (const volatile void *module)
 Retrieves the current rate in Hz of the Peripheral Bus clock attached to the specified peripheral. More...
 
Enabling and disabling synchronous clocks
static void sysclk_enable_cpu_module (unsigned int index)
 Enable a module clock derived from the CPU clock. More...
 
static void sysclk_disable_cpu_module (unsigned int index)
 Disable a module clock derived from the CPU clock. More...
 
static void sysclk_enable_hsb_module (unsigned int index)
 Enable a module clock derived from the HSB clock. More...
 
static void sysclk_disable_hsb_module (unsigned int index)
 Disable a module clock derived from the HSB clock. More...
 
static void sysclk_enable_pba_module (unsigned int index)
 Enable a module clock derived from the PBA clock. More...
 
static void sysclk_disable_pba_module (unsigned int index)
 Disable a module clock derived from the PBA clock. More...
 
static void sysclk_enable_pbb_module (unsigned int index)
 Enable a module clock derived from the PBB clock. More...
 
static void sysclk_disable_pbb_module (unsigned int index)
 Disable a module clock derived from the PBB clock. More...
 
static void sysclk_enable_pbc_module (unsigned int index)
 Enable a module clock derived from the PBC clock. More...
 
static void sysclk_disable_pbc_module (unsigned int index)
 Disable a module clock derived from the PBC clock. More...
 
static void sysclk_enable_peripheral_clock (const volatile void *module)
 Enable a peripheral's clock from its base address. More...
 
static void sysclk_disable_peripheral_clock (const volatile void *module)
 Disable a peripheral's clock from its base address. More...
 
System Clock Source and Prescaler configuration
void sysclk_set_prescalers (unsigned int cpu_shift, unsigned int pba_shift, unsigned int pbb_shift, unsigned int pbc_shift)
 Set system clock prescaler configuration. More...
 
void sysclk_set_source (uint_fast8_t src)
 Change the source of the main system clock. More...
 
System Clock Initialization
void sysclk_init (void)
 Initialize the synchronous clock system. More...
 

#define AVR32_ADCIFA_CLK_PBC   134
#define AVR32_CANIF_CLK_PBC   132
#define AVR32_MDMA_CLK_PBC   129
#define AVR32_PDCA_CLK_PBC   128
#define AVR32_PM_PBASEL_PBSEL   0

Referenced by sysclk_set_prescalers().

#define AVR32_PM_PBBSEL_PBSEL   0

Referenced by sysclk_set_prescalers().

#define AVR32_PM_PBCSEL_PBSEL   0

Referenced by sysclk_set_prescalers().

#define AVR32_SPI0_CLK_PBC   131
#define AVR32_TC0_CLK_PBC   133
#define AVR32_TWIM2_CLK_PBC   136
#define AVR32_TWIS2_CLK_PBC   137
#define AVR32_USART1_CLK_PBC   130
#define AVR32_USART4_CLK_PBC   135