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_EWDG   (3U)
 
#define CLK_SRC_GROUP_PMIC   (4U)
 
#define CLK_SRC_GROUP_AHB   (5U)
 
#define CLK_SRC_GROUP_CPU0   (9U)
 
#define CLK_SRC_GROUP_SRC   (10U)
 
#define CLK_SRC_GROUP_PEWDG   (11U)
 
#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_CPU0   (0xFFFDU)
 
#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_axi0 = MAKE_STATUS(status_group_clk, 5) , status_clk_shared_axi1 = MAKE_STATUS(status_group_clk, 6) , status_clk_shared_axi2 = MAKE_STATUS(status_group_clk, 7) ,
  status_clk_shared_cpu0 = MAKE_STATUS(status_group_clk, 8) , status_clk_shared_cpu1 = 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_dac_source (clock_name_t clock_name, clk_src_t src)
 Set DAC 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

uint32_t hpm_core_clock
 

Macro Definition Documentation

◆ CLK_SRC_GROUP_ADC

#define CLK_SRC_GROUP_ADC   (1U)

◆ CLK_SRC_GROUP_AHB

#define CLK_SRC_GROUP_AHB   (5U)

◆ CLK_SRC_GROUP_COMMON

#define CLK_SRC_GROUP_COMMON   (0U)

Clock source group definitions.

◆ CLK_SRC_GROUP_CPU0

#define CLK_SRC_GROUP_CPU0   (9U)

◆ CLK_SRC_GROUP_EWDG

#define CLK_SRC_GROUP_EWDG   (3U)

◆ CLK_SRC_GROUP_INVALID

#define CLK_SRC_GROUP_INVALID   (15U)

◆ CLK_SRC_GROUP_PEWDG

#define CLK_SRC_GROUP_PEWDG   (11U)

◆ CLK_SRC_GROUP_PMIC

#define CLK_SRC_GROUP_PMIC   (4U)

◆ CLK_SRC_GROUP_SRC

#define CLK_SRC_GROUP_SRC   (10U)

◆ 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_CPU0

#define RESOURCE_SHARED_CPU0   (0xFFFDU)

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_axi0 
status_clk_shared_axi1 
status_clk_shared_axi2 
status_clk_shared_cpu0 
status_clk_shared_cpu1 
status_clk_fixed 

Function Documentation

◆ clock_add_to_group()

void clock_add_to_group ( clock_name_t  clock_name,
uint32_t  group 
)

Add IP to specified group.

Parameters
[in]clock_nameIP clock name
[in]groupresource group index, valid value: 0/1/2/3

◆ clock_check_in_group()

bool clock_check_in_group ( clock_name_t  clock_name,
uint32_t  group 
)

Check IP in specified group.

Parameters
[in]clock_nameIP clock name
[in]groupresource group index, valid value: 0/1/2/3
Returns
true if in group, false if not in group

◆ clock_connect_group_to_cpu()

void clock_connect_group_to_cpu ( uint32_t  group,
uint32_t  cpu 
)

Disconnect the clock group from specified CPU.

Parameters
[in]groupclock group index, value value is 0/1/2/3
[in]cpuCPU index, valid value is 0/1

◆ clock_cpu_delay_ms()

void clock_cpu_delay_ms ( uint32_t  ms)

Delay specified milliseconds.

Parameters
[in]msexpected delay interval in milliseconds

◆ clock_cpu_delay_us()

void clock_cpu_delay_us ( uint32_t  us)

Delay specified microseconds.

Parameters
[in]usexpected delay interval in microseconds

◆ clock_disable()

void clock_disable ( clock_name_t  clock_name)

Disable IP clock.

Parameters
[in]clock_nameIP clock name

◆ clock_disconnect_group_from_cpu()

void clock_disconnect_group_from_cpu ( uint32_t  group,
uint32_t  cpu 
)

Disconnect the clock group from specified CPU.

Parameters
[in]groupclock group index, value value is 0/1/2/3
[in]cpuCPU index, valid value is 0/1

◆ clock_enable()

void clock_enable ( clock_name_t  clock_name)

Enable IP clock.

Parameters
[in]clock_nameIP clock name

◆ clock_get_core_clock_ticks_per_ms()

uint32_t clock_get_core_clock_ticks_per_ms ( void  )

Get core clock ticks per millisecond.

Returns
core clock ticks per millisecond

◆ clock_get_core_clock_ticks_per_us()

uint32_t clock_get_core_clock_ticks_per_us ( void  )

Get core clock ticks per microsecond.

Returns
core clock ticks per microsecond

◆ clock_get_divider()

uint32_t clock_get_divider ( clock_name_t  clock_name)

Get the IP clock divider Note:This API return the direct clock divider.

Parameters
[in]clock_nameclock name
Returns
IP clock divider

◆ clock_get_frequency()

uint32_t clock_get_frequency ( clock_name_t  clock_name)

Get specified IP frequency.

Parameters
[in]clock_nameIP clock name
Returns
IP clock frequency in Hz

◆ clock_get_source()

clk_src_t clock_get_source ( clock_name_t  clock_name)

Get the IP clock source Note: This API return the direct clock source.

Parameters
[in]clock_nameclock name
Returns
IP clock source

◆ clock_remove_from_group()

void clock_remove_from_group ( clock_name_t  clock_name,
uint32_t  group 
)

Remove IP from specified group.

Parameters
[in]clock_nameIP clock name
[in]groupresource group index, valid value: 0/1/2/3

◆ clock_set_adc_source()

hpm_stat_t clock_set_adc_source ( clock_name_t  clock_name,
clk_src_t  src 
)

Set ADC clock source.

Parameters
[in]clock_nameADC clock name
[in]srcADC clock source
Returns
status_success Setting ADC clock source is successful status_clk_invalid Invalid ADC clock status_clk_src_invalid Invalid ADC clock source

◆ clock_set_dac_source()

hpm_stat_t clock_set_dac_source ( clock_name_t  clock_name,
clk_src_t  src 
)

Set DAC clock source.

Parameters
[in]clock_nameDAC clock name
[in]srcDAC clock source
Returns
status_success Setting DAC clock source is successful status_clk_invalid Invalid DAC clock status_clk_src_invalid Invalid DAC clock source

◆ clock_set_source_divider()

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.

Parameters
[in]clock_nameclock name
[in]srcclock source
[in]divclock divider, valid range (1 - 256)
Returns
status_success Setting Clock source and divider is successful. status_clk_src_invalid clock source is invalid. status_clk_fixed clock source and divider is a fixed value status_clk_shared_ahb Clock is shared with the AHB clock status_clk_shared_axi0 Clock is shared with the AXI0 clock status_clk_shared_axi1 CLock is shared with the AXI1 clock status_clk_shared_axi2 Clock is shared with the AXI2 clock status_clk_shared_cpu0 Clock is shared with the CPU0 clock status_clk_shared_cpu1 Clock is shared with the CPU1 clock

◆ clock_set_wdg_source()

hpm_stat_t clock_set_wdg_source ( clock_name_t  clock_name,
clk_src_t  src 
)

Set the WDG clock source.

Parameters
[in]clock_nameWDG clock name
[in]srcWDG clock source
Return values
status_successSetting WDG clock source is successful
status_invalid_argumentInvalid WDG or invalid clock source

◆ clock_update_core_clock()

void clock_update_core_clock ( void  )

Update the Core clock frequency.

◆ get_frequency_for_source()

uint32_t get_frequency_for_source ( clock_source_t  source)

Get Clock frequency for selected clock source.

Parameters
[in]sourceclock source
Returns
clock frequency for selected clock source

Variable Documentation

◆ hpm_core_clock

uint32_t hpm_core_clock
extern