HPM SDK
HPMicro Software Development Kit
hpm_clock_drv.c File Reference
#include "hpm_clock_drv.h"
#include "hpm_sysctl_drv.h"
#include "hpm_soc.h"
#include "hpm_common.h"
#include "hpm_pllctlv2_drv.h"

Macros

#define FREQ_PRESET1_OSC0_CLK0   (24000000UL)
 
#define FREQ_PRESET1_PLL0_CLK0   (600000000UL)
 
#define FREQ_PRESET1_PLL0_CLK1   (500000000UL)
 
#define FREQ_PRESET1_PLL1_CLK0   (800000000UL)
 
#define FREQ_PRESET1_PLL1_CLK1   (333333333UL)
 
#define FREQ_PRESET1_PLL1_CLK2   (250000000UL)
 
#define FREQ_PRESET1_PLL2_CLK0   (516096000UL)
 
#define FREQ_PRESET1_PLL2_CLK1   (451584000UL)
 
#define FREQ_32KHz   (32768UL)
 
#define ADC_INSTANCE_NUM   ARRAY_SIZE(HPM_SYSCTL->ADCCLK)
 
#define I2S_INSTANCE_NUM   ARRAY_SIZE(HPM_SYSCTL->I2SCLK)
 
#define EWDG_INSTANCE_NUM   (4U)
 
#define BUS_FREQ_MAX   (200000000UL)
 
#define FREQ_1MHz   (1000000UL)
 
#define CLOCK_ON   (true)
 
#define CLOCK_OFF   (false)
 

Typedefs

typedef struct _pllclk_div_map clk_pll_div_map_t
 

Functions

static uint32_t get_frequency_for_ip_in_common_group (clock_node_t node)
 Get Clock frequency for IP in common group. More...
 
static uint32_t get_frequency_for_adc (uint32_t instance)
 Get Clock frequency for ADC. More...
 
static uint32_t get_frequency_for_i2s (uint32_t instance)
 Get Clock frequency for I2S. More...
 
static uint32_t get_frequency_for_ewdg (uint32_t instance)
 Get Clock frequency for EWDG. More...
 
static uint32_t get_frequency_for_pewdg (void)
 Get Clock frequency for PEWDG. More...
 
static void switch_ip_clock (clock_name_t clock_name, bool on)
 Turn on/off the IP clock. More...
 
uint32_t clock_get_frequency (clock_name_t clock_name)
 Get specified IP frequency. More...
 
uint32_t get_frequency_for_source (clock_source_t source)
 Get Clock frequency for selected clock source. More...
 
clk_src_t clock_get_source (clock_name_t clock_name)
 Get the IP clock source Note: This API return the direct clock source. More...
 
hpm_stat_t clock_wait_source_stable (clock_name_t clock_name)
 Wait until the clock source for specified IP clock is stable. More...
 
uint32_t clock_get_divider (clock_name_t clock_name)
 Get the IP clock divider Note:This API return the direct clock divider. More...
 
hpm_stat_t clock_set_adc_source (clock_name_t clock_name, clk_src_t src)
 Set ADC clock source. More...
 
hpm_stat_t clock_set_i2s_source (clock_name_t clock_name, clk_src_t src)
 Set I2S clock source. More...
 
hpm_stat_t clock_set_wdg_source (clock_name_t clock_name, clk_src_t src)
 Set the WDG clock source. More...
 
hpm_stat_t clock_set_source_divider (clock_name_t clock_name, clk_src_t src, uint32_t div)
 Set the IP clock source and divider. More...
 
void clock_enable (clock_name_t clock_name)
 Enable IP clock. More...
 
void clock_disable (clock_name_t clock_name)
 Disable IP clock. More...
 
void clock_add_to_group (clock_name_t clock_name, uint32_t group)
 Add IP to specified group. More...
 
void clock_remove_from_group (clock_name_t clock_name, uint32_t group)
 Remove IP from specified group. More...
 
bool clock_check_in_group (clock_name_t clock_name, uint32_t group)
 Check IP in specified group. More...
 
void clock_connect_group_to_cpu (uint32_t group, uint32_t cpu)
 Disconnect the clock group from specified CPU. More...
 
void clock_disconnect_group_from_cpu (uint32_t group, uint32_t cpu)
 Disconnect the clock group from specified CPU. More...
 
uint32_t clock_get_core_clock_ticks_per_us (void)
 Get core clock ticks per microsecond. More...
 
uint32_t clock_get_core_clock_ticks_per_ms (void)
 Get core clock ticks per millisecond. More...
 
void clock_cpu_delay_us (uint32_t us)
 Delay specified microseconds. More...
 
void clock_cpu_delay_ms (uint32_t ms)
 Delay specified milliseconds. More...
 
void clock_update_core_clock (void)
 Update the Core clock frequency. More...
 

Variables

static const clock_node_t s_adc_clk_mux_node []
 
static EWDG_Type *const s_wdgs []
 
static const clk_pll_div_map_t s_clk_pll_div_map []
 
uint32_t hpm_core_clock
 HPM Core clock variable. More...
 

Macro Definition Documentation

◆ ADC_INSTANCE_NUM

#define ADC_INSTANCE_NUM   ARRAY_SIZE(HPM_SYSCTL->ADCCLK)

◆ BUS_FREQ_MAX

#define BUS_FREQ_MAX   (200000000UL)

◆ CLOCK_OFF

#define CLOCK_OFF   (false)

◆ CLOCK_ON

#define CLOCK_ON   (true)

◆ EWDG_INSTANCE_NUM

#define EWDG_INSTANCE_NUM   (4U)

◆ FREQ_1MHz

#define FREQ_1MHz   (1000000UL)

◆ FREQ_32KHz

#define FREQ_32KHz   (32768UL)

◆ FREQ_PRESET1_OSC0_CLK0

#define FREQ_PRESET1_OSC0_CLK0   (24000000UL)

◆ FREQ_PRESET1_PLL0_CLK0

#define FREQ_PRESET1_PLL0_CLK0   (600000000UL)

◆ FREQ_PRESET1_PLL0_CLK1

#define FREQ_PRESET1_PLL0_CLK1   (500000000UL)

◆ FREQ_PRESET1_PLL1_CLK0

#define FREQ_PRESET1_PLL1_CLK0   (800000000UL)

◆ FREQ_PRESET1_PLL1_CLK1

#define FREQ_PRESET1_PLL1_CLK1   (333333333UL)

◆ FREQ_PRESET1_PLL1_CLK2

#define FREQ_PRESET1_PLL1_CLK2   (250000000UL)

◆ FREQ_PRESET1_PLL2_CLK0

#define FREQ_PRESET1_PLL2_CLK0   (516096000UL)

◆ FREQ_PRESET1_PLL2_CLK1

#define FREQ_PRESET1_PLL2_CLK1   (451584000UL)

◆ I2S_INSTANCE_NUM

#define I2S_INSTANCE_NUM   ARRAY_SIZE(HPM_SYSCTL->I2SCLK)

Typedef Documentation

◆ clk_pll_div_map_t

typedef struct _pllclk_div_map clk_pll_div_map_t

Function Documentation

◆ get_frequency_for_adc()

static uint32_t get_frequency_for_adc ( uint32_t  instance)
static

Get Clock frequency for ADC.

◆ get_frequency_for_ewdg()

static uint32_t get_frequency_for_ewdg ( uint32_t  instance)
static

Get Clock frequency for EWDG.

◆ get_frequency_for_i2s()

static uint32_t get_frequency_for_i2s ( uint32_t  instance)
static

Get Clock frequency for I2S.

◆ get_frequency_for_ip_in_common_group()

static uint32_t get_frequency_for_ip_in_common_group ( clock_node_t  node)
static

Get Clock frequency for IP in common group.

◆ get_frequency_for_pewdg()

static uint32_t get_frequency_for_pewdg ( void  )
static

Get Clock frequency for PEWDG.

◆ switch_ip_clock()

static void switch_ip_clock ( clock_name_t  clock_name,
bool  on 
)
static

Turn on/off the IP clock.

Variable Documentation

◆ s_adc_clk_mux_node

const clock_node_t s_adc_clk_mux_node[]
static
Initial value:
= {
}
@ clock_node_ahb0
Definition: hpm_sysctl_drv.h:301
@ clock_node_ana0
Definition: hpm_sysctl_drv.h:168

◆ s_clk_pll_div_map

const clk_pll_div_map_t s_clk_pll_div_map[]
static
Initial value:
= {
{0xFF, 1},
}
@ pllctlv2_pll1
Definition: hpm_pllctlv2_drv.h:21
@ pllctlv2_pll2
Definition: hpm_pllctlv2_drv.h:22
@ pllctlv2_pll0
Definition: hpm_pllctlv2_drv.h:20
@ pllctlv2_clk2
Definition: hpm_pllctlv2_drv.h:32
@ pllctlv2_clk1
Definition: hpm_pllctlv2_drv.h:31
@ pllctlv2_clk0
Definition: hpm_pllctlv2_drv.h:30

◆ s_wdgs

EWDG_Type* const s_wdgs[]
static
Initial value:
= {
((EWDG_Type *) (0xF00B0000UL) ) ,
((EWDG_Type *) (0xF00B4000UL) ) ,
((EWDG_Type *) (0xF00B8000UL) ) ,
((EWDG_Type *) (0xF00BC000UL) ) ,
}
Definition: hpm_ewdg_regs.h:12