52 #ifndef __GR533x_LL_PWR_H__
53 #define __GR533x_LL_PWR_H__
62 #if defined(AON_CTL) && defined(AON_IO)
76 #define LL_PWR_WKUP_COND_EXT AON_CTL_MCU_WAKEUP_CTRL_EXT
77 #define LL_PWR_WKUP_COND_TIMER AON_CTL_MCU_WAKEUP_CTRL_SLP_TIMER
78 #define LL_PWR_WKUP_COND_BLE AON_CTL_MCU_WAKEUP_CTRL_SMS_OSC
79 #define LL_PWR_WKUP_COND_CLDR AON_CTL_MCU_WAKEUP_CTRL_RTC0
80 #define LL_PWR_WKUP_COND_AON_WDT AON_CTL_MCU_WAKEUP_CTRL_AON_WDT
81 #define LL_PWR_WKUP_COND_COMP_RISE AON_CTL_MCU_WAKEUP_CTRL_COMP_RISE
82 #define LL_PWR_WKUP_COND_COMP_FALL AON_CTL_MCU_WAKEUP_CTRL_COMP_FALL
83 #define LL_PWR_WKUP_COND_ALL AON_CTL_WAKEUP_CTRL_SEL
90 #define LL_PWR_WKUP_EVENT_BLE AON_CTL_SLP_EVENT_SMS_OSC
91 #define LL_PWR_WKUP_EVENT_TIMER AON_CTL_SLP_EVENT_SLP_TIMER
92 #define LL_PWR_WKUP_EVENT_EXT AON_CTL_SLP_EVENT_EXT
93 #define LL_PWR_WKUP_EVENT_COMP_RISE AON_CTL_SLP_EVENT_COMP_RISE
94 #define LL_PWR_WKUP_EVENT_COMP_FALL AON_CTL_SLP_EVENT_COMP_FALL
95 #define LL_PWR_WKUP_EVENT_WDT AON_CTL_SLP_EVENT_AON_WDT
96 #define LL_PWR_WKUP_EVENT_CLDR AON_CTL_SLP_EVENT_RTC0
97 #define LL_PWR_WKUP_EVENT_ALL AON_CTL_SLP_EVENT_ALL
103 #define LL_PWR_AON_IRQ_EVT_BLE_PWR_ON AON_CTL_AON_IRQ_BLE_PWR
104 #define LL_PWR_AON_IRQ_EVT_BLE_PWR_DN AON_CTL_AON_IRQ_BLE_PWR_DN
105 #define LL_PWR_AON_IRQ_EVT_BOD_RISE AON_CTL_AON_IRQ_PMU_BOD_RISE
106 #define LL_PWR_AON_IRQ_EVT_CPLL_DN AON_CTL_AON_IRQ_AONPLL_CHG
107 #define LL_PWR_AON_IRQ_EVT_BOD_FALL AON_CTL_AON_IRQ_PMU_BOD_FALL
108 #define LL_PWR_AON_IRQ_EVT_BLE_MAC AON_CTL_AON_IRQ_BLE_MAC_IRQ
109 #define LL_PWR_AON_IRQ_EVT_SLP_FAIL AON_CTL_AON_IRQ_SLP_FAIL_IRQ
110 #define LL_PWR_AON_IRQ_EVT_ALL AON_CTL_AON_IRQ_BLE_ALL
117 #define LL_PWR_AON_IRQ_EN_BLE_PWR_ON AON_CTL_AON_IRQ_EN_BLE_PWR_ON
118 #define LL_PWR_AON_IRQ_EN_BLE_PWR_DN AON_CTL_AON_IRQ_EN_BLE_PWR_DN
119 #define LL_PWR_AON_IRQ_EN_BOD_RISE AON_CTL_AON_IRQ_EN_PMU_BOD_RISE
120 #define LL_PWR_AON_IRQ_EN_CPLL_DN AON_CTL_AON_IRQ_EN_AONPLL_CHG
121 #define LL_PWR_AON_IRQ_EN_BOD_FALL AON_CTL_AON_IRQ_EN_PMU_BOD_FALL
122 #define LL_PWR_AON_IRQ_EN_BLE_MAC AON_CTL_AON_IRQ_EN_BLE_MAC_IRQ
123 #define LL_PWR_AON_IRQ_EN_SLP_FAIL AON_CTL_AON_IRQ_EN_SLP_FAIL_IRQ
124 #define LL_PWR_AON_IRQ_EN_ALL AON_CTL_AON_IRQ_EN_ALL
138 #define LL_PWR_DPAD_LE_OFF (0x00000000U)
139 #define LL_PWR_DPAD_LE_ON (0x00000001U)
171 __STATIC_INLINE
void ll_pwr_set_wakeup_condition(uint32_t condition)
173 SET_BITS(AON_CTL->MCU_WAKEUP_CTRL, condition);
194 __STATIC_INLINE
void ll_pwr_clear_wakeup_condition(uint32_t condition)
196 CLEAR_BITS(AON_CTL->MCU_WAKEUP_CTRL, condition);
216 __STATIC_INLINE uint32_t ll_pwr_get_wakeup_condition(
void)
218 return ((uint32_t)READ_BITS(AON_CTL->MCU_WAKEUP_CTRL, LL_PWR_WKUP_COND_ALL));
238 __STATIC_INLINE uint32_t ll_pwr_get_wakeup_event(
void)
240 return ((uint32_t)READ_BITS(AON_CTL->AON_SLP_EVENT, LL_PWR_WKUP_EVENT_ALL));
255 __STATIC_INLINE
void ll_pwr_set_sleep_timer_value(uint32_t value)
257 WRITE_REG(SLP_TIMER->TIMER_W, value);
269 __STATIC_INLINE uint32_t ll_pwr_get_sleep_timer_read_value(
void)
271 return READ_REG(SLP_TIMER->TIMER_R);
285 __STATIC_INLINE
void ll_pwr_enable_smc_wakeup_req(
void)
287 SET_BITS(AON_CTL->BLE_MISC, AON_CTL_BLE_MISC_SMC_WAKEUP_REQ);
300 __STATIC_INLINE
void ll_pwr_disable_smc_wakeup_req(
void)
302 CLEAR_BITS(AON_CTL->BLE_MISC, AON_CTL_BLE_MISC_SMC_WAKEUP_REQ);
314 __STATIC_INLINE uint32_t ll_pwr_is_enabled_smc_wakeup_req(
void)
316 return (READ_BITS(AON_CTL->BLE_MISC, AON_CTL_BLE_MISC_SMC_WAKEUP_REQ) == AON_CTL_BLE_MISC_SMC_WAKEUP_REQ);
335 __STATIC_INLINE
void ll_pwr_set_dpad_le_value(uint32_t sleep, uint32_t wakeup)
337 MODIFY_REG(AON_PWR->DPAD_LE_CTRL, AON_PWR_DPAD_LE_CTRL_SLEEP, (sleep << AON_PWR_DPAD_LE_CTRL_SLEEP_Pos));
338 MODIFY_REG(AON_PWR->DPAD_LE_CTRL, AON_PWR_DPAD_LE_CTRL_WAKEUP, (wakeup << AON_PWR_DPAD_LE_CTRL_WAKEUP_Pos));
358 __STATIC_INLINE
void ll_pwr_enable_comm_timer_reset(
void)
360 CLEAR_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_RST_N);
373 __STATIC_INLINE
void ll_pwr_disable_comm_timer_reset(
void)
375 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_RST_N);
387 __STATIC_INLINE uint32_t ll_pwr_is_enabled_comm_timer_reset(
void)
389 return ((uint32_t)(READ_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_RST_N) == 0x0U));
404 __STATIC_INLINE
void ll_pwr_enable_comm_core_reset(
void)
406 CLEAR_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_RST_N);
419 __STATIC_INLINE
void ll_pwr_disable_comm_core_reset(
void)
421 SET_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_RST_N);
433 __STATIC_INLINE uint32_t ll_pwr_is_enabled_comm_core_reset(
void)
435 return ((uint32_t)(READ_BITS(AON_PWR->COMM_CORE_PWR_STAT, AON_PWR_COMM_CORE_PWR_STAT_RST_N_RD) == 0x0U));
448 __STATIC_INLINE
void ll_pwr_enable_comm_timer_power(
void)
450 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_ISO_EN);
451 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_EN);
452 CLEAR_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_ISO_EN);
465 __STATIC_INLINE
void ll_pwr_disable_comm_timer_power(
void)
467 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_EN);
468 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_ISO_EN);
469 CLEAR_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_EN);
482 __STATIC_INLINE uint32_t ll_pwr_is_enabled_comm_timer_power(
void)
484 return ((uint32_t)(READ_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_EN) == AON_PWR_COMM_TIMER_PWR_CTRL_EN));
497 __STATIC_INLINE
void ll_pwr_enable_comm_core_power(
void)
499 SET_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_CORE_EN);
500 CLEAR_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_ISO_EN);
513 __STATIC_INLINE
void ll_pwr_disable_comm_core_power(
void)
515 SET_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_ISO_EN);
516 CLEAR_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_CORE_EN);
529 __STATIC_INLINE uint32_t ll_pwr_is_enabled_comm_core_power(
void)
531 return ((uint32_t)(READ_BITS(AON_PWR->COMM_CORE_PWR_STAT, AON_PWR_COMM_CORE_PWR_STAT_CORE_EN_RD) == AON_PWR_COMM_CORE_PWR_STAT_CORE_EN_RD));
543 __STATIC_INLINE
void ll_pwr_enable_osc_sleep(
void)
545 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_OSC_SLEEP_EN);
558 __STATIC_INLINE
void ll_pwr_disable_osc_sleep(
void)
560 CLEAR_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_OSC_SLEEP_EN);
572 __STATIC_INLINE uint32_t ll_pwr_is_enabled_osc_sleep(
void)
574 return ((uint32_t)(READ_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_OSC_SLEEP_EN) == AON_CTL_COMM_CTRL_DEEPSLCNTL_OSC_SLEEP_EN));
586 __STATIC_INLINE
void ll_pwr_enable_radio_sleep(
void)
588 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_RADIO_SLEEP_EN);
601 __STATIC_INLINE
void ll_pwr_disable_radio_sleep(
void)
603 CLEAR_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_RADIO_SLEEP_EN);
615 __STATIC_INLINE uint32_t ll_pwr_is_enabled_radio_sleep(
void)
617 return ((uint32_t)(READ_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_RADIO_SLEEP_EN) == AON_CTL_COMM_CTRL_DEEPSLCNTL_RADIO_SLEEP_EN));
630 __STATIC_INLINE
void ll_pwr_enable_comm_core_deep_sleep(
void)
632 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_ON);
645 __STATIC_INLINE
void ll_pwr_disable_comm_core_deep_sleep(
void)
647 CLEAR_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_ON);
659 __STATIC_INLINE uint32_t ll_pwr_is_enabled_comm_core_deep_sleep(
void)
661 return ((uint32_t)(READ_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_ON) == AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_ON));
675 __STATIC_INLINE
void ll_pwr_enable_comm_soft_wakeup_req(
void)
677 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_SOFT_WAKEUP_REQ);
690 __STATIC_INLINE uint32_t ll_pwr_is_enabled_soft_wakeup_req(
void)
692 return ((uint32_t)(READ_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_SOFT_WAKEUP_REQ) == AON_CTL_COMM_CTRL_DEEPSLCNTL_SOFT_WAKEUP_REQ));
705 __STATIC_INLINE
void ll_pwr_enable_comm_core_ext_wakeup(
void)
707 CLEAR_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_EXTWKUPDSB);
720 __STATIC_INLINE
void ll_pwr_disable_comm_core_ext_wakeup(
void)
722 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_EXTWKUPDSB);
734 __STATIC_INLINE uint32_t ll_pwr_is_enabled_comm_core_ext_wakeup(
void)
736 return ((uint32_t)(READ_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_EXTWKUPDSB) == 0x0U));
749 __STATIC_INLINE
void ll_pwr_set_comm_core_wakeup_time(uint32_t time)
751 WRITE_REG(AON_CTL->COMM_TIMER_CFG0, time);
763 __STATIC_INLINE uint32_t ll_pwr_get_comm_wakeup_time(
void)
765 return ((uint32_t)READ_REG(AON_CTL->COMM_TIMER_CFG0));
777 __STATIC_INLINE uint32_t ll_pwr_get_comm_sleep_duration(
void)
779 return ((uint32_t)READ_REG(AON_CTL->COMM_TIMER_STAT));
798 __STATIC_INLINE
void ll_pwr_set_comm_wakeup_timing(uint32_t twext, uint32_t twosc, uint32_t twrm)
800 WRITE_REG(AON_CTL->COMM_TIMER_CFG1, (twext << AON_CTL_COMM_TIMER_CFG1_ENBPRESET_TWEXT_Pos) |
801 (twosc << AON_CTL_COMM_TIMER_CFG1_ENBPRESET_TWOSC_Pos) |
802 (twrm << AON_CTL_COMM_TIMER_CFG1_ENBPRESET_TWRM_Pos));
816 __STATIC_INLINE uint32_t ll_pwr_read_comm_wakeup_timing(
void)
818 return ((uint32_t)READ_REG(AON_CTL->COMM_TIMER_CFG1));
826 __STATIC_INLINE uint32_t ll_pwr_read_comm_wakeup_timing_twosc(
void)
828 return ((((uint32_t)READ_REG(AON_CTL->COMM_TIMER_CFG1) & AON_CTL_COMM_TIMER_CFG1_ENBPRESET_TWOSC_Msk)) >> AON_CTL_COMM_TIMER_CFG1_ENBPRESET_TWOSC_Pos);
856 __STATIC_INLINE uint32_t ll_pwr_get_ext_wakeup_status(
void)
858 return ((uint32_t)(READ_BITS(AON_CTL->EXT_WAKEUP_STAT, AON_IO_EXT_WAKEUP_STAT_STAT) >> AON_IO_EXT_WAKEUP_STAT_STAT_POS));
880 __STATIC_INLINE
void ll_pwr_clear_ext_wakeup_status(uint32_t wakeup_pin)
882 WRITE_REG(AON_CTL->EXT_WAKEUP_STAT, ~(wakeup_pin << AON_IO_EXT_WAKEUP_STAT_STAT_POS));
902 __STATIC_INLINE
void ll_pwr_clear_wakeup_event(uint32_t event)
904 WRITE_REG(AON_CTL->AON_SLP_EVENT, ~(event & LL_PWR_WKUP_EVENT_ALL));
917 __STATIC_INLINE uint32_t ll_pwr_is_active_flag_comm_deep_sleep_stat(
void)
919 return (READ_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_STAT) == AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_STAT);
932 __STATIC_INLINE
void ll_pwr_disable_cache_module(
void)
934 SET_BITS(XQSPI->CACHE.CTRL0, XQSPI_CACHE_CTRL0_DIS);
935 __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
948 __STATIC_INLINE
void ll_pwr_set_dcdc_prepare_timing(uint32_t value)
950 MODIFY_REG(AON_PWR->A_TIMING_CTRL0, AON_PWR_A_TIMING_CTRL0_DCDC, (value << AON_PWR_A_TIMING_CTRL0_DCDC_Pos));
963 __STATIC_INLINE
void ll_pwr_set_dig_ldo_prepare_timing(uint32_t value)
965 MODIFY_REG(AON_PWR->A_TIMING_CTRL0, AON_PWR_A_TIMING_CTRL0_DIG_LDO, (value << AON_PWR_A_TIMING_CTRL0_DIG_LDO_Pos));
979 __STATIC_INLINE
void ll_pwr_set_fast_ldo_prepare_timing(uint32_t value)
981 MODIFY_REG(AON_PWR->A_TIMING_CTRL1, AON_PWR_A_TIMING_CTRL1_FAST_LDO, (value << AON_PWR_A_TIMING_CTRL1_FAST_LDO_Pos));
994 __STATIC_INLINE
void ll_pwr_set_hf_osc_prepare_timing(uint32_t value)
996 MODIFY_REG(AON_PWR->A_TIMING_CTRL1, AON_PWR_A_TIMING_CTRL1_HF_OSC, (value << AON_PWR_A_TIMING_CTRL1_HF_OSC_Pos));
1009 __STATIC_INLINE
void ll_pwr_set_pll_lock_timing(uint32_t value)
1011 MODIFY_REG(AON_PWR->A_TIMING_CTRL2, AON_PWR_A_TIMING_CTRL2_PLL_LOCK, (value << AON_PWR_A_TIMING_CTRL2_PLL_LOCK_Pos));
1024 __STATIC_INLINE
void ll_pwr_set_pll_prepare_timing(uint32_t value)
1026 MODIFY_REG(AON_PWR->A_TIMING_CTRL2, AON_PWR_A_TIMING_CTRL2_PLL, (value << AON_PWR_A_TIMING_CTRL2_PLL_Pos));
1039 __STATIC_INLINE
void ll_pwr_set_pwr_switch_prepare_timing(uint32_t value)
1041 MODIFY_REG(AON_PWR->A_TIMING_CTRL3, AON_PWR_A_TIMING_CTRL3_PWR_SWITCH, (value << AON_PWR_A_TIMING_CTRL3_PWR_SWITCH_Pos));
1054 __STATIC_INLINE
void ll_pwr_set_xo_prepare_timing(uint32_t value)
1056 MODIFY_REG(AON_PWR->A_TIMING_CTRL3, AON_PWR_A_TIMING_CTRL3_XO, (value << AON_PWR_A_TIMING_CTRL3_XO_Pos));
1069 __STATIC_INLINE
void ll_pwr_set_pwr_mode(uint32_t value)
1071 MODIFY_REG(AON_PWR->AON_START_CFG, AON_PWR_AON_START_CFG_POWER_MODE,value << AON_PWR_AON_START_CFG_POWER_MODE_Pos);
1084 __STATIC_INLINE
void ll_pwr_turn_off_enable_xo_pll_after_dcdc_ready(
void)
1086 CLEAR_BITS(AON_PWR->AON_START_CFG, AON_PWR_AON_START_CFG_XO_EN_PWR|AON_PWR_AON_START_CFG_PLL_EN_PWR);
1098 __STATIC_INLINE
void ll_pwr_turn_on_enable_xo_pll_after_dcdc_ready(
void)
1100 SET_BITS(AON_PWR->AON_START_CFG, AON_PWR_AON_START_CFG_XO_EN_PWR|AON_PWR_AON_START_CFG_PLL_EN_PWR);
1121 __STATIC_INLINE
void ll_pwr_enable_aon_irq(uint32_t condition)
1123 SET_BITS(AON_CTL->AON_IRQ_EN, condition);
1144 __STATIC_INLINE
void ll_pwr_disable_aon_irq(uint32_t condition)
1146 CLEAR_BITS(AON_CTL->AON_IRQ_EN, condition);
1167 __STATIC_INLINE
void ll_pwr_clear_aon_irq_event(uint32_t condition)
1169 CLEAR_BITS(AON_CTL->AON_IRQ, condition);