HPM SDK
HPMicro Software Development Kit
CLOCK driver APIs

CLOCK driver APIs. More...

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_WDG   (3U)
 
#define CLK_SRC_GROUP_PMIC   (4U)
 
#define CLK_SRC_GROUP_AHB   (5U)
 
#define CLK_SRC_GROUP_AXI0   (6U)
 
#define CLK_SRC_GROUP_AXI1   (7U)
 
#define CLK_SRC_GROUP_AXI2   (8U)
 
#define CLK_SRC_GROUP_CPU0   (9U)
 
#define CLK_SRC_GROUP_CPU1   (10U)
 
#define CLK_SRC_GROUP_SRC   (11U)
 
#define CLK_SRC_GROUP_PWDG   (12U)
 
#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 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. 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...
 

Detailed Description

CLOCK driver APIs.

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_AXI0

#define CLK_SRC_GROUP_AXI0   (6U)

◆ CLK_SRC_GROUP_AXI1

#define CLK_SRC_GROUP_AXI1   (7U)

◆ CLK_SRC_GROUP_AXI2

#define CLK_SRC_GROUP_AXI2   (8U)

◆ CLK_SRC_GROUP_COMMON

#define CLK_SRC_GROUP_COMMON   (0U)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Clock source group definitions.

◆ CLK_SRC_GROUP_CPU0

#define CLK_SRC_GROUP_CPU0   (9U)

◆ CLK_SRC_GROUP_CPU1

#define CLK_SRC_GROUP_CPU1   (10U)

◆ CLK_SRC_GROUP_I2S

#define CLK_SRC_GROUP_I2S   (2U)

◆ CLK_SRC_GROUP_INVALID

#define CLK_SRC_GROUP_INVALID   (15U)

◆ CLK_SRC_GROUP_PMIC

#define CLK_SRC_GROUP_PMIC   (4U)

◆ CLK_SRC_GROUP_PWDG

#define CLK_SRC_GROUP_PWDG   (12U)

◆ CLK_SRC_GROUP_SRC

#define CLK_SRC_GROUP_SRC   (11U)

◆ CLK_SRC_GROUP_WDG

#define CLK_SRC_GROUP_WDG   (3U)

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

Typedef Documentation

◆ clk_src_t

typedef enum _clock_sources clk_src_t

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Clock source definitions.

◆ clock_name_t

typedef enum _clock_name clock_name_t

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Peripheral Clock Type Description.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Error codes for clock driver.

Enumerator
status_clk_div_invalid 

Clock divider is invalid

status_clk_src_invalid 

Clock source is invalid

status_clk_invalid 

Clock name is invalid

status_clk_operation_unsupported 

Clock operation is unsupported

status_clk_shared_ahb 

The clock source is shared with AHB

status_clk_shared_axi0 

The clock source is shared with AXI0

status_clk_shared_axi1 

THe clock source is shared with AXI1

status_clk_shared_axi2 

The clock source is shared with AXI2

status_clk_shared_cpu0 

The clock source is shared with CPU0

status_clk_shared_cpu1 

The clock source is shared with CPU1

status_clk_fixed 

The clock source is a fixed clock source

Function Documentation

◆ clock_add_to_group()

void clock_add_to_group ( clock_name_t  clock_name,
uint32_t  group 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Delay specified milliseconds.

Parameters
[in]msexpected delay interval in milliseconds

◆ clock_cpu_delay_us()

void clock_cpu_delay_us ( uint32_t  us)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Delay specified microseconds.

Parameters
[in]usexpected delay interval in microseconds

◆ clock_disable()

void clock_disable ( clock_name_t  clock_name)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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  )

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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  )

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Get the IP clock source.

Parameters
[in]clock_nameIP clock name
Returns
IP clock source

Get the IP 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 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Set ADC clock source.

Parameters
[in]clock_nameADC clock name
[in]srcADC clock source
Return values
status_successSetting ADC clock source is successful
status_clk_invalidInvalid ADC clock
status_clk_src_invalidInvalid 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_i2s_source()

hpm_stat_t clock_set_i2s_source ( clock_name_t  clock_name,
clk_src_t  src 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Set I2S clock source.

Parameters
[in]clock_nameI2S clock name
[in]srcI2S clock source
Return values
status_successSetting I2S clock source is successful
status_clk_invalidInvalid I2S clock
status_clk_src_invalidInvalid I2S clock source
Parameters
[in]clock_nameI2S clock name
[in]srcI2S clock source
Returns
status_success Setting I2S clock source is successful status_clk_invalid Invalid I2S clock status_clk_src_invalid Invalid I2S 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 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Set the IP clock source and divider.

Parameters
[in]clock_nameclock name
[in]srcclock source
[in]divclock divider, valid range (1 - 256)
Return values
status_successSetting Clock source and divider is successful.
status_clk_set_by_other_apiThe clock should be set by other API
status_clk_src_invalidclock source is invalid.
status_clk_fixedclock source and divider is a fixed value
status_clk_shared_ahbClock is shared with the AHB clock
status_clk_shared_axi0Clock is shared with the AXI0 clock
status_clk_shared_axi1CLock is shared with the AXI1 clock
status_clk_shared_axi2Clock is shared with the AXI2 clock
status_clk_shared_cpu0Clock is shared with the CPU0 clock
status_clk_shared_cpu1Clock is shared with the CPU1 clock
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 
)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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  )

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Update the Core clock frequency.

◆ clock_wait_source_stable()

hpm_stat_t clock_wait_source_stable ( clock_name_t  clock_name)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

Wait until the clock source for specified IP clock is stable.

Note
This function must be used after clock_add_to_group(clock_name, group_idx)
Parameters
[in]clock_nameClock name for specified IP module
Return values
status_successThe clock source is stable
status_invalid_argumentInvalid clock name is provided
status_timeoutTimeout occurred

◆ get_frequency_for_source()

uint32_t get_frequency_for_source ( clock_source_t  source)

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

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

#include <soc/HPM6700/HPM6750/hpm_clock_drv.h>

HPM Core clock variable.