HPM SDK
HPMicro Software Development Kit
hpm_pcfg_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_PCFG_DRV_H
9 #define HPM_PCFG_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_pcfg_regs.h"
13 
21 #define PCFG_CLOCK_GATE_MODE_ALWAYS_ON (0x3UL)
22 #define PCFG_CLOCK_GATE_MODE_ALWAYS_OFF (0x2UL)
23 
24 #define PCFG_PERIPH_KEEP_CLOCK_ON(p) (PCFG_CLOCK_GATE_MODE_ALWAYS_ON << (p))
25 #define PCFG_PERIPH_KEEP_CLOCK_OFF(p) (PCFG_CLOCK_GATE_MODE_ALWAYS_OFF << (p))
26 
27 /* @brief PCFG irc24m reference */
28 typedef enum {
32 
33 /* @brief PCFG dcdc current limit */
34 typedef enum {
38 
39 /* @brief PCFG dcdc current hys */
40 typedef enum {
44 
45 /* @brief PCFG dcdc mode */
46 typedef enum {
52 
53 /* @brief PCFG pmc domain peripherals */
54 typedef enum {
65 
66 /* @brief PCFG status */
67 enum {
69 };
70 
71 /* @brief PCFG irc24m config */
72 typedef struct {
73  uint32_t freq_in_hz;
74  pcfg_irc24m_reference_t reference;
75  bool return_to_default_on_xtal_loss;
76  bool free_run;
78 
79 
80 #define PCFG_CLOCK_GATE_CONTROL_MASK(module, mode) \
81  ((uint32_t) (mode) << ((module) << 1))
82 
83 #define PCFG_DEBUG_STOP_SOURCE_ENABLE_CORE0 (PCFG_DEBUG_STOP_CPU0_MASK)
84 #define PCFG_DEBUG_STOP_SOURCE_DISABLE_CORE0 (0)
85 #define PCFG_DEBUG_STOP_SOURCE_ENABLE_CORE1 (PCFG_DEBUG_STOP_CPU1_MASK)
86 #define PCFG_DEBUG_STOP_SOURCE_DISABLE_CORE1 (0)
87 
88 #ifdef __cplusplus
89 extern "C" {
90 #endif
91 
98 {
100 }
101 
108 {
110 }
111 
118 {
120 }
121 
128 {
130 }
131 
139 static inline bool pcfg_bandgap_is_trimmed(PCFG_Type *ptr)
140 {
142 }
143 
149 static inline void pcfg_bandgap_reload_trim(PCFG_Type *ptr)
150 {
152 }
153 
159 static inline void pcfg_ldo2p5_turn_off(PCFG_Type *ptr)
160 {
162 }
163 
169 static inline void pcfg_ldo2p5_turn_on(PCFG_Type *ptr)
170 {
172 }
173 
181 static inline bool pcfg_ldo2p5_is_stable(PCFG_Type *ptr)
182 {
183  return PCFG_LDO2P5_READY_GET(ptr->LDO2P5);
184 }
185 
186 /*
187  * @brief check if DCDC is stable or not
188  * @param[in] ptr base address
189  * @retval true if DCDC is stable
190  */
191 static inline bool pcfg_dcdc_is_stable(PCFG_Type *ptr)
192 {
193  return PCFG_DCDC_MODE_READY_GET(ptr->DCDC_MODE);
194 }
195 
196 /*
197  * @brief set DCDC work mode
198  * @param[in] ptr base address
199  */
200 static inline void pcfg_dcdc_set_mode(PCFG_Type *ptr, uint8_t mode)
201 {
203 }
204 
212 static inline void pcfg_dcdc_set_lp_current_limit(PCFG_Type *ptr, pcfg_dcdc_lp_current_limit_t limit, bool over_limit)
213 {
214  (void) over_limit;
216 }
217 
224 {
226 }
227 
234 {
236 }
237 
245 static inline bool pcfg_dcdc_is_power_loss(PCFG_Type *ptr)
246 {
248 }
249 
256 {
258 }
259 
266 {
268 }
269 
276 static inline bool pcfg_dcdc_is_over_voltage(PCFG_Type *ptr)
277 {
279 }
280 
287 {
289 }
290 
297 {
299 }
300 
309 {
311 }
312 
320 static inline uint32_t pcfg_dcdc_get_start_time_in_cycle(PCFG_Type *ptr)
321 {
323 }
324 
332 static inline uint32_t pcfg_dcdc_get_resume_time_in_cycle(PCFG_Type *ptr)
333 {
335 }
336 
343 static inline void pcfg_dcdc_set_start_time_in_cycle(PCFG_Type *ptr, uint32_t cycles)
344 {
346 }
347 
354 static inline void pcfg_dcdc_set_resume_time_in_cycle(PCFG_Type *ptr, uint32_t cycles)
355 {
357 }
358 
366 {
368 }
369 
375 static inline void pcfg_disable_power_trap(PCFG_Type *ptr)
376 {
378 }
379 
385 static inline void pcfg_enable_power_trap(PCFG_Type *ptr)
386 {
388 }
389 
397 static inline bool pcfg_is_power_trap_triggered(PCFG_Type *ptr)
398 {
400 }
401 
408 {
410 }
411 
417 static inline void pcfg_disable_dcdc_retention(PCFG_Type *ptr)
418 {
420 }
421 
427 static inline void pcfg_enable_dcdc_retention(PCFG_Type *ptr)
428 {
430 }
431 
438 static inline void pcfg_clear_wakeup_cause(PCFG_Type *ptr, uint32_t mask)
439 {
440  ptr->WAKE_CAUSE |= mask;
441 }
442 
450 static inline uint32_t pcfg_get_wakeup_cause(PCFG_Type *ptr)
451 {
452  return ptr->WAKE_CAUSE;
453 }
454 
461 static inline void pcfg_enable_wakeup_source(PCFG_Type *ptr, uint32_t mask)
462 {
463  ptr->WAKE_MASK &= ~mask;
464 }
465 
472 static inline void pcfg_disable_wakeup_source(PCFG_Type *ptr, uint32_t mask)
473 {
474  ptr->WAKE_MASK |= mask;
475 }
476 
483 static inline void pcfg_set_periph_clock_mode(PCFG_Type *ptr, uint32_t mode)
484 {
485  ptr->SCG_CTRL = mode;
486 }
487 
494 {
496 }
497 
504 {
506 }
507 
514 {
516 }
517 
524 {
526 }
527 
534 static inline void pcfg_config_debug_stop_notification(PCFG_Type *ptr, uint8_t mask)
535 {
536  ptr->DEBUG_STOP = mask;
537 }
538 
546 static inline bool pcfg_irc24m_is_trimmed(PCFG_Type *ptr)
547 {
548  return ptr->RC24M & PCFG_RC24M_RC_TRIMMED_MASK;
549 }
550 
556 static inline void pcfg_irc24m_reload_trim(PCFG_Type *ptr)
557 {
559 }
560 
568 
569 /*
570  * @brief set DCDC voltage at standby mode
571  * @param[in] ptr base address
572  * @param[in] mv target voltage
573  * @retval status_success if successfully configured
574  */
576 
577 /*
578  * @brief set output voltage of LDO 2.5V in mV
579  * @param[in] ptr base address
580  * @param[in] mv target voltage
581  * @retval status_success if successfully configured
582  */
583 hpm_stat_t pcfg_ldo2p5_set_voltage(PCFG_Type *ptr, uint16_t mv);
584 
585 /*
586  * @brief set DCDC voltage
587  * @param[in] ptr base address
588  * @param[in] mv target voltage
589  * @retval status_success if successfully configured
590  */
591 hpm_stat_t pcfg_dcdc_set_voltage(PCFG_Type *ptr, uint16_t mv);
592 
593 /*
594  * @brief set output voltage of LDO 1V in mV
595  * @param[in] ptr base address
596  * @param[in] mv target voltage
597  * @retval status_success if successfully configured
598  */
599 hpm_stat_t pcfg_ldo1p1_set_voltage(PCFG_Type *ptr, uint16_t mv);
600 
601 /*
602  * @brief get current DCDC current level in mA
603  *
604  * @param[in] ptr base address
605  * @retval Current level at mA
606  */
608 
609 
610 #ifdef __cplusplus
611 }
612 #endif
617 #endif /* HPM_PCFG_DRV_H */
#define PCFG_DCDC_RESUME_TIME_RESUME_TIME_GET(x)
Definition: hpm_pcfg_regs.h:592
#define PCFG_LDO2P5_READY_GET(x)
Definition: hpm_pcfg_regs.h:108
#define PCFG_POWER_TRAP_TRIGGERED_MASK
Definition: hpm_pcfg_regs.h:602
#define PCFG_DCDC_CURRENT_VALID_MASK
Definition: hpm_pcfg_regs.h:303
#define PCFG_DCDC_MISC_OL_HYST_MASK
Definition: hpm_pcfg_regs.h:520
#define PCFG_POWER_TRAP_RETENTION_MASK
Definition: hpm_pcfg_regs.h:614
#define PCFG_DCDC_CURRENT_ESTI_EN_MASK
Definition: hpm_pcfg_regs.h:291
#define PCFG_DCDC_MODE_MODE_SET(x)
Definition: hpm_pcfg_regs.h:160
#define PCFG_LDO2P5_ENABLE_MASK
Definition: hpm_pcfg_regs.h:117
#define PCFG_DCDC_MODE_READY_GET(x)
Definition: hpm_pcfg_regs.h:146
#define PCFG_DCDC_START_TIME_START_TIME_GET(x)
Definition: hpm_pcfg_regs.h:581
#define PCFG_DCDC_START_TIME_START_TIME_SET(x)
Definition: hpm_pcfg_regs.h:580
#define PCFG_DCDC_MISC_OL_HYST_SET(x)
Definition: hpm_pcfg_regs.h:522
#define PCFG_POWER_TRAP_TRAP_MASK
Definition: hpm_pcfg_regs.h:626
#define PCFG_DCDC_PROT_OVERVOLT_FLAG_MASK
Definition: hpm_pcfg_regs.h:246
#define PCFG_BANDGAP_VBG_TRIMMED_MASK
Definition: hpm_pcfg_regs.h:48
#define PCFG_DCDC_PROT_DISABLE_OVERVOLTAGE_MASK
Definition: hpm_pcfg_regs.h:234
#define PCFG_DCDC_RESUME_TIME_RESUME_TIME_SET(x)
Definition: hpm_pcfg_regs.h:591
#define PCFG_DCDC_MODE_MODE_MASK
Definition: hpm_pcfg_regs.h:158
#define PCFG_DCDC_PROT_ILIMIT_LP_MASK
Definition: hpm_pcfg_regs.h:200
#define PCFG_DCDC_PROT_OVERVOLT_FLAG_GET(x)
Definition: hpm_pcfg_regs.h:248
#define PCFG_DCDC_PROT_POWER_LOSS_FLAG_GET(x)
Definition: hpm_pcfg_regs.h:225
#define PCFG_RC24M_RC_TRIMMED_MASK
Definition: hpm_pcfg_regs.h:696
#define PCFG_DCDC_PROT_ILIMIT_LP_SET(x)
Definition: hpm_pcfg_regs.h:202
#define PCFG_DEBUG_STOP_CPU0_MASK
Definition: hpm_pcfg_regs.h:749
#define PCFG_DCDC_PROT_DISABLE_POWER_LOSS_MASK
Definition: hpm_pcfg_regs.h:248
#define PCFG_DEBUG_STOP_CPU1_MASK
Definition: hpm_pcfg_regs.h:737
#define PCFG_BANDGAP_LOWPOWER_MODE_MASK
Definition: hpm_pcfg_regs.h:61
#define PCFG_BANDGAP_POWER_SAVE_MASK
Definition: hpm_pcfg_regs.h:73
static void pcfg_ldo2p5_turn_on(PCFG_Type *ptr)
turn on LDO 2.5V
Definition: hpm_pcfg_drv.h:169
static bool pcfg_bandgap_is_trimmed(PCFG_Type *ptr)
check if bandgap is trimmed or not
Definition: hpm_pcfg_drv.h:139
static void pcfg_enable_power_trap(PCFG_Type *ptr)
enable power trap
Definition: hpm_pcfg_drv.h:385
static bool pcfg_dcdc_is_measure_current_valid(PCFG_Type *ptr)
check if measured current is valid
Definition: hpm_pcfg_drv.h:308
static void pcfg_bandgap_disable_lowpower_mode(PCFG_Type *ptr)
bandgap disable power save mode
Definition: hpm_pcfg_drv.h:117
static void pcfg_dcdc_set_current_hys_range(PCFG_Type *ptr, pcfg_dcdc_current_hys_t range)
set dcdc current hysteres range
Definition: hpm_pcfg_drv.h:365
static void pcfg_clear_power_trap_trigger_flag(PCFG_Type *ptr)
clear power trap trigger flag
Definition: hpm_pcfg_drv.h:407
static void pcfg_bandgap_reload_trim(PCFG_Type *ptr)
bandgap reload trim value
Definition: hpm_pcfg_drv.h:149
static void pcfg_disable_cpu1_debug_stop_notfication(PCFG_Type *ptr)
Disable CPU1 debug stop notification to peripherals.
Definition: hpm_pcfg_drv.h:513
static uint32_t pcfg_dcdc_get_start_time_in_cycle(PCFG_Type *ptr)
get DCDC start time in number of 24MHz clock cycles
Definition: hpm_pcfg_drv.h:320
static void pcfg_dcdc_ensable_over_voltage_prot(PCFG_Type *ptr)
enable over voltage protection
Definition: hpm_pcfg_drv.h:265
static void pcfg_bandgap_enable_power_save_mode(PCFG_Type *ptr)
bandgap enable power save mode
Definition: hpm_pcfg_drv.h:107
static void pcfg_dcdc_disable_over_voltage_prot(PCFG_Type *ptr)
disable over voltage protection
Definition: hpm_pcfg_drv.h:255
static void pcfg_disable_dcdc_retention(PCFG_Type *ptr)
disable dcdc retention
Definition: hpm_pcfg_drv.h:417
static void pcfg_config_debug_stop_notification(PCFG_Type *ptr, uint8_t mask)
Configure CPU core debug stop notification to peripherals.
Definition: hpm_pcfg_drv.h:534
static bool pcfg_is_power_trap_triggered(PCFG_Type *ptr)
check if power trap is triggered
Definition: hpm_pcfg_drv.h:397
static bool pcfg_dcdc_is_stable(PCFG_Type *ptr)
Definition: hpm_pcfg_drv.h:191
static void pcfg_dcdc_enable_power_loss_prot(PCFG_Type *ptr)
enable power loss protection
Definition: hpm_pcfg_drv.h:233
static void pcfg_enable_cpu0_debug_stop_notfication(PCFG_Type *ptr)
Enable CPU0 debug stop notification to peripherals.
Definition: hpm_pcfg_drv.h:503
static void pcfg_bandgap_disable_power_save_mode(PCFG_Type *ptr)
bandgap disable power save mode
Definition: hpm_pcfg_drv.h:97
static void pcfg_set_periph_clock_mode(PCFG_Type *ptr, uint32_t mode)
set clock gate mode in vpmc domain
Definition: hpm_pcfg_drv.h:483
static void pcfg_dcdc_set_mode(PCFG_Type *ptr, uint8_t mode)
Definition: hpm_pcfg_drv.h:200
static void pcfg_disable_cpu0_debug_stop_notfication(PCFG_Type *ptr)
Disable CPU0 debug stop notficiation to peripherals.
Definition: hpm_pcfg_drv.h:493
static void pcfg_disable_wakeup_source(PCFG_Type *ptr, uint32_t mask)
disable wakeup source
Definition: hpm_pcfg_drv.h:472
static bool pcfg_dcdc_is_power_loss(PCFG_Type *ptr)
check if power loss flag is set
Definition: hpm_pcfg_drv.h:245
static void pcfg_bandgap_enable_lowpower_mode(PCFG_Type *ptr)
bandgap enable low power mode
Definition: hpm_pcfg_drv.h:127
static bool pcfg_irc24m_is_trimmed(PCFG_Type *ptr)
check if irc24m is trimmed
Definition: hpm_pcfg_drv.h:546
static void pcfg_dcdc_set_resume_time_in_cycle(PCFG_Type *ptr, uint32_t cycles)
set DCDC resuem time in 24MHz clock cycles
Definition: hpm_pcfg_drv.h:354
static bool pcfg_ldo2p5_is_stable(PCFG_Type *ptr)
check if LDO 2.5V is stable
Definition: hpm_pcfg_drv.h:181
static void pcfg_irc24m_reload_trim(PCFG_Type *ptr)
reload irc24m trim value
Definition: hpm_pcfg_drv.h:556
static void pcfg_dcdc_set_start_time_in_cycle(PCFG_Type *ptr, uint32_t cycles)
set DCDC start time in 24MHz clock cycles
Definition: hpm_pcfg_drv.h:343
static void pcfg_dcdc_enable_measure_current(PCFG_Type *ptr)
enable current measurement
Definition: hpm_pcfg_drv.h:296
static void pcfg_dcdc_disable_power_loss_prot(PCFG_Type *ptr)
disable power loss protection
Definition: hpm_pcfg_drv.h:223
static void pcfg_clear_wakeup_cause(PCFG_Type *ptr, uint32_t mask)
clear wakeup cause flag
Definition: hpm_pcfg_drv.h:438
static void pcfg_enable_wakeup_source(PCFG_Type *ptr, uint32_t mask)
enable wakeup source
Definition: hpm_pcfg_drv.h:461
static void pcfg_dcdc_disable_measure_current(PCFG_Type *ptr)
disable current measurement
Definition: hpm_pcfg_drv.h:286
static void pcfg_disable_power_trap(PCFG_Type *ptr)
disable power trap
Definition: hpm_pcfg_drv.h:375
static void pcfg_dcdc_set_lp_current_limit(PCFG_Type *ptr, pcfg_dcdc_lp_current_limit_t limit, bool over_limit)
set low power current limit
Definition: hpm_pcfg_drv.h:212
static bool pcfg_dcdc_is_over_voltage(PCFG_Type *ptr)
checkover voltage flag
Definition: hpm_pcfg_drv.h:276
static void pcfg_enable_cpu1_debug_stop_notfication(PCFG_Type *ptr)
Enable CPU1 debug stop notification to peripherals.
Definition: hpm_pcfg_drv.h:523
static uint32_t pcfg_get_wakeup_cause(PCFG_Type *ptr)
get wakeup cause
Definition: hpm_pcfg_drv.h:450
static void pcfg_enable_dcdc_retention(PCFG_Type *ptr)
enable dcdc retention to retain soc sram data
Definition: hpm_pcfg_drv.h:427
static void pcfg_ldo2p5_turn_off(PCFG_Type *ptr)
turn off LDO2P5
Definition: hpm_pcfg_drv.h:159
static uint32_t pcfg_dcdc_get_resume_time_in_cycle(PCFG_Type *ptr)
get DCDC resume time in number of 24MHz clock cycles
Definition: hpm_pcfg_drv.h:332
uint32_t hpm_stat_t
Definition: hpm_common.h:119
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:128
@ status_group_pcfg
Definition: hpm_common.h:152
void pcfg_irc24m_config_track(PCFG_Type *ptr, pcfg_irc24m_config_t *config)
config irc24m track
Definition: hpm_pcfg_drv.c:74
hpm_stat_t pcfg_ldo1p1_set_voltage(PCFG_Type *ptr, uint16_t mv)
Definition: hpm_pcfg_drv.c:14
hpm_stat_t pcfg_ldo2p5_set_voltage(PCFG_Type *ptr, uint16_t mv)
Definition: hpm_pcfg_drv.c:24
pcfg_dcdc_lp_current_limit_t
Definition: hpm_pcfg_drv.h:34
uint16_t pcfg_dcdc_get_current_level(PCFG_Type *ptr)
Definition: hpm_pcfg_drv.c:47
hpm_stat_t pcfg_dcdc_set_voltage(PCFG_Type *ptr, uint16_t mv)
Definition: hpm_pcfg_drv.c:63
pcfg_pmc_periph_t
Definition: hpm_pcfg_drv.h:54
pcfg_dcdc_mode_t
Definition: hpm_pcfg_drv.h:46
pcfg_dcdc_current_hys_t
Definition: hpm_pcfg_drv.h:40
pcfg_irc24m_reference_t
Definition: hpm_pcfg_drv.h:28
hpm_stat_t pcfg_dcdc_set_lpmode_voltage(PCFG_Type *ptr, uint16_t mv)
Definition: hpm_pcfg_drv.c:95
@ pcfg_dcdc_lp_current_limit_250ma
Definition: hpm_pcfg_drv.h:35
@ pcfg_dcdc_lp_current_limit_200ma
Definition: hpm_pcfg_drv.h:36
@ pcfg_pmc_periph_fuse
Definition: hpm_pcfg_drv.h:55
@ pcfg_pmc_periph_timer
Definition: hpm_pcfg_drv.h:57
@ pcfg_pmc_periph_ram
Definition: hpm_pcfg_drv.h:56
@ pcfg_pmc_periph_vad
Definition: hpm_pcfg_drv.h:57
@ pcfg_pmc_periph_debug
Definition: hpm_pcfg_drv.h:63
@ pcfg_pmc_periph_uart
Definition: hpm_pcfg_drv.h:59
@ pcfg_pmc_periph_ioc
Definition: hpm_pcfg_drv.h:56
@ pcfg_pmc_periph_gpio
Definition: hpm_pcfg_drv.h:55
@ pcfg_pmc_periph_wdog
Definition: hpm_pcfg_drv.h:58
@ pcfg_dcdc_mode_general
Definition: hpm_pcfg_drv.h:49
@ pcfg_dcdc_mode_off
Definition: hpm_pcfg_drv.h:47
@ pcfg_dcdc_mode_basic
Definition: hpm_pcfg_drv.h:48
@ pcfg_dcdc_mode_expert
Definition: hpm_pcfg_drv.h:50
@ status_pcfg_ldo_out_of_range
Definition: hpm_pcfg_drv.h:64
@ pcfg_dcdc_current_hys_25mv
Definition: hpm_pcfg_drv.h:42
@ pcfg_dcdc_current_hys_12_5mv
Definition: hpm_pcfg_drv.h:41
@ pcfg_irc24m_reference_24m_xtal
Definition: hpm_pcfg_drv.h:30
@ pcfg_irc24m_reference_32k
Definition: hpm_pcfg_drv.h:29
Definition: hpm_pcfg_regs.h:12
__RW uint32_t LDO2P5
Definition: hpm_pcfg_regs.h:15
__RW uint32_t POWER_TRAP
Definition: hpm_pcfg_regs.h:28
__RW uint32_t DCDC_CURRENT
Definition: hpm_pcfg_regs.h:20
__RW uint32_t WAKE_MASK
Definition: hpm_pcfg_regs.h:30
__RW uint32_t BANDGAP
Definition: hpm_pcfg_regs.h:13
__RW uint32_t SCG_CTRL
Definition: hpm_pcfg_regs.h:31
__RW uint32_t DCDC_START_TIME
Definition: hpm_pcfg_regs.h:25
__RW uint32_t DCDC_PROT
Definition: hpm_pcfg_regs.h:19
__RW uint32_t DCDC_MODE
Definition: hpm_pcfg_regs.h:17
__RW uint32_t DCDC_MISC
Definition: hpm_pcfg_regs.h:23
__RW uint32_t DEBUG_STOP
Definition: hpm_pcfg_regs.h:32
__RW uint32_t DCDC_RESUME_TIME
Definition: hpm_pcfg_regs.h:26
__RW uint32_t WAKE_CAUSE
Definition: hpm_pcfg_regs.h:29
__RW uint32_t RC24M
Definition: hpm_pcfg_regs.h:33
Definition: hpm_pcfg_drv.h:68