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

Go to the source code of this file.

Macros

#define CLOCK_DIV_INVALID   (~0UL)
 
#define CLK_SRC_GROUP_COMMON   (0U)
 Clock source group definitions. More...
 
#define CLK_SRC_GROUP_ADC   (1U)
 
#define CLK_SRC_GROUP_I2S   (2U)
 
#define CLK_SRC_GROUP_EWDG   (3U)
 
#define CLK_SRC_GROUP_PEWDG   (4U)
 
#define CLK_SRC_GROUP_PMIC   (5U)
 
#define CLK_SRC_GROUP_AXI_SOC   (6U)
 
#define CLK_SRC_GROUP_AXI_FAST   (7U)
 
#define CLK_SRC_GROUP_AXI_VIDEO   (8U)
 
#define CLK_SRC_GROUP_SRC   (9U)
 
#define CLK_SRC_GROUP_CPU0   (10U)
 
#define CLK_SRC_GROUP_INVALID   (15U)
 
#define MAKE_CLK_SRC(src_grp, index)   (((uint8_t)(src_grp)<<4) | (index))
 
#define GET_CLK_SRC_GROUP(src)   (((uint8_t)(src) >> 4) & 0x0FU)
 
#define GET_CLK_SRC_INDEX(src)   ((uint8_t)(src) & 0x0FU)
 
#define GET_CLOCK_SOURCE_FROM_CLK_SRC(clk_src)   (clock_source_t)((uint32_t)(clk_src) & 0xFU)
 
#define RESOURCE_INVALID   (0xFFFFU)
 
#define RESOURCE_SHARED_AXI_SOC   (0xFFFEU)
 
#define MAKE_CLOCK_NAME(resource, src_type, node)   (((uint32_t)(resource) << 16) | ((uint32_t)(src_type) << 8) | ((uint32_t)node))
 
#define GET_CLK_SRC_GROUP_FROM_NAME(name)   (((uint32_t)(name) >> 8) & 0xFFUL)
 
#define GET_CLK_NODE_FROM_NAME(name)   ((uint32_t)(name) & 0xFFUL)
 
#define GET_CLK_RESOURCE_FROM_NAME(name)   ((uint32_t)(name) >> 16)
 

Typedefs

typedef enum _clock_sources clk_src_t
 Clock source definitions. More...
 
typedef enum _clock_name clock_name_t
 Peripheral Clock Type Description. More...
 

Enumerations

enum  {
  status_clk_div_invalid = MAKE_STATUS(status_group_clk, 0) , status_clk_src_invalid = MAKE_STATUS(status_group_clk, 1) , status_clk_invalid = MAKE_STATUS(status_group_clk, 2) , status_clk_operation_unsupported = MAKE_STATUS(status_group_clk, 3) ,
  status_clk_shared_ahb = MAKE_STATUS(status_group_clk, 4) , status_clk_shared_axis = MAKE_STATUS(status_group_clk, 5) , status_clk_shared_axic = MAKE_STATUS(status_group_clk, 6) , status_clk_shared_axiv = MAKE_STATUS(status_group_clk, 7) ,
  status_clk_shared_axif = MAKE_STATUS(status_group_clk, 8) , status_clk_shared_axid = MAKE_STATUS(status_group_clk, 9) , status_clk_fixed = MAKE_STATUS(status_group_clk, 10)
}
 Error codes for clock driver. More...
 

Functions

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...
 
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...
 
hpm_stat_t clock_wait_source_stable (clock_name_t clock_name)
 Wait until the clock source for specified IP clock is stable. 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

uint32_t hpm_core_clock
 HPM Core clock variable. More...
 

Macro Definition Documentation

◆ CLK_SRC_GROUP_ADC

#define CLK_SRC_GROUP_ADC   (1U)

◆ CLK_SRC_GROUP_AXI_FAST

#define CLK_SRC_GROUP_AXI_FAST   (7U)

◆ CLK_SRC_GROUP_AXI_SOC

#define CLK_SRC_GROUP_AXI_SOC   (6U)

◆ CLK_SRC_GROUP_AXI_VIDEO

#define CLK_SRC_GROUP_AXI_VIDEO   (8U)

◆ CLK_SRC_GROUP_COMMON

#define CLK_SRC_GROUP_COMMON   (0U)

Clock source group definitions.

◆ CLK_SRC_GROUP_CPU0

#define CLK_SRC_GROUP_CPU0   (10U)

◆ CLK_SRC_GROUP_EWDG

#define CLK_SRC_GROUP_EWDG   (3U)

◆ CLK_SRC_GROUP_I2S

#define CLK_SRC_GROUP_I2S   (2U)

◆ CLK_SRC_GROUP_INVALID

#define CLK_SRC_GROUP_INVALID   (15U)

◆ CLK_SRC_GROUP_PEWDG

#define CLK_SRC_GROUP_PEWDG   (4U)

◆ CLK_SRC_GROUP_PMIC

#define CLK_SRC_GROUP_PMIC   (5U)

◆ CLK_SRC_GROUP_SRC

#define CLK_SRC_GROUP_SRC   (9U)

◆ CLOCK_DIV_INVALID

#define CLOCK_DIV_INVALID   (~0UL)

◆ GET_CLK_NODE_FROM_NAME

#define GET_CLK_NODE_FROM_NAME (   name)    ((uint32_t)(name) & 0xFFUL)

◆ GET_CLK_RESOURCE_FROM_NAME

#define GET_CLK_RESOURCE_FROM_NAME (   name)    ((uint32_t)(name) >> 16)

◆ GET_CLK_SRC_GROUP

#define GET_CLK_SRC_GROUP (   src)    (((uint8_t)(src) >> 4) & 0x0FU)

◆ GET_CLK_SRC_GROUP_FROM_NAME

#define GET_CLK_SRC_GROUP_FROM_NAME (   name)    (((uint32_t)(name) >> 8) & 0xFFUL)

◆ GET_CLK_SRC_INDEX

#define GET_CLK_SRC_INDEX (   src)    ((uint8_t)(src) & 0x0FU)

◆ GET_CLOCK_SOURCE_FROM_CLK_SRC

#define GET_CLOCK_SOURCE_FROM_CLK_SRC (   clk_src)    (clock_source_t)((uint32_t)(clk_src) & 0xFU)

◆ MAKE_CLK_SRC

#define MAKE_CLK_SRC (   src_grp,
  index 
)    (((uint8_t)(src_grp)<<4) | (index))

◆ MAKE_CLOCK_NAME

#define MAKE_CLOCK_NAME (   resource,
  src_type,
  node 
)    (((uint32_t)(resource) << 16) | ((uint32_t)(src_type) << 8) | ((uint32_t)node))

◆ RESOURCE_INVALID

#define RESOURCE_INVALID   (0xFFFFU)

◆ RESOURCE_SHARED_AXI_SOC

#define RESOURCE_SHARED_AXI_SOC   (0xFFFEU)

Typedef Documentation

◆ clk_src_t

typedef enum _clock_sources clk_src_t

Clock source definitions.

◆ clock_name_t

typedef enum _clock_name clock_name_t

Peripheral Clock Type Description.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Error codes for clock driver.

Enumerator
status_clk_div_invalid 
status_clk_src_invalid 
status_clk_invalid 
status_clk_operation_unsupported 
status_clk_shared_ahb 
status_clk_shared_axis 
status_clk_shared_axic 
status_clk_shared_axiv 
status_clk_shared_axif 
status_clk_shared_axid 
status_clk_fixed