52 #ifndef __GR55xx_LL_PWR_H__
53 #define __GR55xx_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_CLDR_TICK AON_CTL_MCU_WAKEUP_CTRL_RTC1
81 #define LL_PWR_WKUP_COND_BOD_FEDGE AON_CTL_MCU_WAKEUP_CTRL_PMU_BOD
82 #define LL_PWR_WKUP_COND_AUSB AON_CTL_MCU_WAKEUP_CTRL_USB_ATTACH
83 #define LL_PWR_WKUP_COND_DUSB AON_CTL_MCU_WAKEUP_CTRL_USB_DETACH
84 #define LL_PWR_WKUP_COND_BLE_IRQ AON_CTL_MCU_WAKEUP_CTRL_BLE_IRQ
85 #define LL_PWR_WKUP_COND_AON_WDT AON_CTL_MCU_WAKEUP_CTRL_AON_WDT
86 #define LL_PWR_WKUP_COND_COMP AON_CTL_MCU_WAKEUP_CTRL_PMU_COMP
87 #define LL_PWR_WKUP_COND_ALL (0xFFFU << AON_CTL_MCU_WAKEUP_CTRL_SLP_TIMER_Pos)
95 #define LL_PWR_WKUP_EVENT_BLE AON_CTL_SLP_EVENT_SMS_OSC
96 #define LL_PWR_WKUP_EVENT_TIMER AON_CTL_SLP_EVENT_SLP_TIMER
97 #define LL_PWR_WKUP_EVENT_EXT AON_CTL_SLP_EVENT_EXT
98 #define LL_PWR_WKUP_EVENT_BOD_FEDGE AON_CTL_SLP_EVENT_PMU_BOD
99 #define LL_PWR_WKUP_EVENT_MSIO_COMP AON_CTL_SLP_EVENT_PMU_MSIO
100 #define LL_PWR_WKUP_EVENT_WDT AON_CTL_SLP_EVENT_AON_WDT
101 #define LL_PWR_WKUP_EVENT_CLDR AON_CTL_SLP_EVENT_RTC0
102 #define LL_PWR_WKUP_EVENT_AUSB AON_CTL_SLP_EVENT_USB_ATTACH
103 #define LL_PWR_WKUP_EVENT_DUSB AON_CTL_SLP_EVENT_USB_DETACH
104 #define LL_PWR_WKUP_EVENT_CLDR_TICK AON_CTL_SLP_EVENT_RTC1
105 #define LL_PWR_WKUP_EVENT_BLE_IRQ AON_CTL_SLP_EVENT_BLE_IRQ
106 #define LL_PWR_WKUP_EVENT_ALL (0xFFFU << AON_CTL_SLP_EVENT_SLP_TIMER_Pos)
112 #define LL_PWR_DPAD_LE_OFF (0x00000000U)
113 #define LL_PWR_DPAD_LE_ON (0x00000001U)
150 __STATIC_FORCEINLINE
void ll_pwr_set_wakeup_condition(uint32_t condition)
152 SET_BITS(AON_CTL->MCU_WAKEUP_CTRL, condition);
176 __STATIC_FORCEINLINE
void ll_pwr_clear_wakeup_condition(uint32_t condition)
178 CLEAR_BITS(AON_CTL->MCU_WAKEUP_CTRL, condition);
202 __STATIC_FORCEINLINE uint32_t ll_pwr_get_wakeup_condition(
void)
204 return ((uint32_t)READ_BITS(AON_CTL->MCU_WAKEUP_CTRL, LL_PWR_WKUP_COND_ALL));
229 __STATIC_FORCEINLINE uint32_t ll_pwr_get_wakeup_event(
void)
231 return ((uint32_t)READ_BITS(AON_CTL->AON_SLP_EVENT, LL_PWR_WKUP_EVENT_ALL));
246 __STATIC_FORCEINLINE
void ll_pwr_set_sleep_timer_value(uint32_t value)
248 WRITE_REG(SLP_TIMER->TIMER_W, value);
260 __STATIC_FORCEINLINE uint32_t ll_pwr_get_sleep_timer_read_value(
void)
262 return READ_REG(SLP_TIMER->TIMER_R);
276 __STATIC_FORCEINLINE
void ll_pwr_enable_smc_wakeup_req(
void)
278 SET_BITS(AON_CTL->BLE_MISC, AON_CTL_BLE_MISC_SMC_WAKEUP_REQ);
291 __STATIC_FORCEINLINE
void ll_pwr_disable_smc_wakeup_req(
void)
293 CLEAR_BITS(AON_CTL->BLE_MISC, AON_CTL_BLE_MISC_SMC_WAKEUP_REQ);
305 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_smc_wakeup_req(
void)
307 return (READ_BITS(AON_CTL->BLE_MISC, AON_CTL_BLE_MISC_SMC_WAKEUP_REQ) == AON_CTL_BLE_MISC_SMC_WAKEUP_REQ);
326 __STATIC_FORCEINLINE
void ll_pwr_set_dpad_le_value(uint32_t sleep, uint32_t wakeup)
328 MODIFY_REG(AON_PWR->DPAD_LE_CTRL, AON_PWR_DPAD_LE_CTRL_SLEEP, (sleep << AON_PWR_DPAD_LE_CTRL_SLEEP_Pos));
329 MODIFY_REG(AON_PWR->DPAD_LE_CTRL, AON_PWR_DPAD_LE_CTRL_WAKEUP, (wakeup << AON_PWR_DPAD_LE_CTRL_WAKEUP_Pos));
349 __STATIC_FORCEINLINE
void ll_pwr_enable_comm_timer_reset(
void)
351 CLEAR_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_RST_N);
364 __STATIC_FORCEINLINE
void ll_pwr_disable_comm_timer_reset(
void)
366 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_RST_N);
378 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_comm_timer_reset(
void)
380 return ((uint32_t)(READ_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_RST_N) == 0x0U));
395 __STATIC_FORCEINLINE
void ll_pwr_enable_comm_core_reset(
void)
397 CLEAR_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_RST_N);
410 __STATIC_FORCEINLINE
void ll_pwr_disable_comm_core_reset(
void)
412 SET_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_RST_N);
424 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_comm_core_reset(
void)
426 return ((uint32_t)(READ_BITS(AON_PWR->COMM_CORE_PWR_STAT, AON_PWR_COMM_CORE_PWR_STAT_RST_N_RD) == 0x0U));
439 __STATIC_FORCEINLINE
void ll_pwr_enable_comm_timer_power(
void)
441 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_ISO_EN);
442 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_EN);
443 CLEAR_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_ISO_EN);
456 __STATIC_FORCEINLINE
void ll_pwr_disable_comm_timer_power(
void)
458 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_EN);
459 SET_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_ISO_EN);
460 CLEAR_BITS(AON_PWR->COMM_TIMER_PWR_CTRL, AON_PWR_COMM_TIMER_PWR_CTRL_EN);
473 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_comm_timer_power(
void)
475 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));
488 __STATIC_FORCEINLINE
void ll_pwr_enable_comm_core_power(
void)
490 SET_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_CORE_EN);
491 CLEAR_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_ISO_EN);
504 __STATIC_FORCEINLINE
void ll_pwr_disable_comm_core_power(
void)
506 SET_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_ISO_EN);
507 CLEAR_BITS(AON_PWR->COMM_CORE_PWR_CTRL_SW, AON_PWR_COMM_CORE_PWR_CTRL_SW_CORE_EN);
520 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_comm_core_power(
void)
522 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));
534 __STATIC_FORCEINLINE
void ll_pwr_enable_osc_sleep(
void)
536 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_OSC_SLEEP_EN);
549 __STATIC_FORCEINLINE
void ll_pwr_disable_osc_sleep(
void)
551 CLEAR_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_OSC_SLEEP_EN);
563 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_osc_sleep(
void)
565 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));
577 __STATIC_FORCEINLINE
void ll_pwr_enable_radio_sleep(
void)
579 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_RADIO_SLEEP_EN);
592 __STATIC_FORCEINLINE
void ll_pwr_disable_radio_sleep(
void)
594 CLEAR_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_RADIO_SLEEP_EN);
606 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_radio_sleep(
void)
608 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));
621 __STATIC_FORCEINLINE
void ll_pwr_enable_comm_core_deep_sleep(
void)
623 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_ON);
636 __STATIC_FORCEINLINE
void ll_pwr_disable_comm_core_deep_sleep(
void)
638 CLEAR_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_ON);
650 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_comm_core_deep_sleep(
void)
652 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));
666 __STATIC_FORCEINLINE
void ll_pwr_enable_comm_soft_wakeup_req(
void)
668 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_SOFT_WAKEUP_REQ);
681 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_soft_wakeup_req(
void)
683 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));
696 __STATIC_FORCEINLINE
void ll_pwr_enable_comm_core_ext_wakeup(
void)
698 CLEAR_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_EXTWKUPDSB);
711 __STATIC_FORCEINLINE
void ll_pwr_disable_comm_core_ext_wakeup(
void)
713 SET_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_EXTWKUPDSB);
725 __STATIC_FORCEINLINE uint32_t ll_pwr_is_enabled_comm_core_ext_wakeup(
void)
727 return ((uint32_t)(READ_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_EXTWKUPDSB) == 0x0U));
740 __STATIC_FORCEINLINE
void ll_pwr_set_comm_core_wakeup_time(uint32_t time)
742 WRITE_REG(AON_CTL->COMM_TIMER_CFG0, time);
754 __STATIC_FORCEINLINE uint32_t ll_pwr_get_comm_wakeup_time(
void)
756 return ((uint32_t)READ_REG(AON_CTL->COMM_TIMER_CFG0));
768 __STATIC_FORCEINLINE uint32_t ll_pwr_get_comm_sleep_duration(
void)
770 return ((uint32_t)READ_REG(AON_CTL->COMM_TIMER_STAT));
789 __STATIC_FORCEINLINE
void ll_pwr_set_comm_wakeup_timing(uint32_t twext, uint32_t twosc, uint32_t twrm)
791 WRITE_REG(AON_CTL->COMM_TIMER_CFG1, (twext << AON_CTL_COMM_TIMER_CFG1_ENBPRESET_TWEXT_Pos) |
792 (twosc << AON_CTL_COMM_TIMER_CFG1_ENBPRESET_TWOSC_Pos) |
793 (twrm << AON_CTL_COMM_TIMER_CFG1_ENBPRESET_TWRM_Pos));
807 __STATIC_FORCEINLINE uint32_t ll_pwr_read_comm_wakeup_timing(
void)
809 return ((uint32_t)READ_REG(AON_CTL->COMM_TIMER_CFG1));
817 __STATIC_FORCEINLINE uint32_t ll_pwr_read_comm_wakeup_timing_twosc(
void)
819 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);
847 __STATIC_FORCEINLINE uint32_t ll_pwr_get_ext_wakeup_status(
void)
849 return ((uint32_t)(READ_BITS(AON_IO->EXT_WAKEUP_STAT, AON_IO_EXT_WAKEUP_STAT_STAT) >> AON_IO_EXT_WAKEUP_STAT_STAT_POS));
871 __STATIC_FORCEINLINE
void ll_pwr_clear_ext_wakeup_status(uint32_t wakeup_pin)
873 WRITE_REG(AON_IO->EXT_WAKEUP_STAT, ~(wakeup_pin << AON_IO_EXT_WAKEUP_STAT_STAT_POS));
898 __STATIC_FORCEINLINE
void ll_pwr_clear_wakeup_event(uint32_t event)
900 WRITE_REG(AON_CTL->AON_SLP_EVENT, ~(event & LL_PWR_WKUP_EVENT_ALL));
913 __STATIC_FORCEINLINE uint32_t ll_pwr_is_active_flag_comm_deep_sleep_stat(
void)
915 return (READ_BITS(AON_CTL->COMM_CTRL, AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_STAT) == AON_CTL_COMM_CTRL_DEEPSLCNTL_DEEP_SLEEP_STAT);
928 __STATIC_FORCEINLINE
void ll_pwr_disable_cache_module(
void)
930 SET_BITS(XQSPI->CACHE.CTRL0, XQSPI_CACHE_CTRL0_DIS);
931 __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
944 __STATIC_INLINE
void ll_pwr_set_dcdc_prepare_timing(uint32_t value)
946 MODIFY_REG(AON_PWR->A_TIMING_CTRL0, AON_PWR_A_TIMING_CTRL0_DCDC, (value << AON_PWR_A_TIMING_CTRL0_DCDC_Pos));
959 __STATIC_INLINE
void ll_pwr_set_dig_ldo_prepare_timing(uint32_t value)
961 MODIFY_REG(AON_PWR->A_TIMING_CTRL0, AON_PWR_A_TIMING_CTRL0_DIG_LDO, (value << AON_PWR_A_TIMING_CTRL0_DIG_LDO_Pos));
975 __STATIC_INLINE
void ll_pwr_set_fast_ldo_prepare_timing(uint32_t value)
977 MODIFY_REG(AON_PWR->A_TIMING_CTRL1, AON_PWR_A_TIMING_CTRL1_FAST_LDO, (value << AON_PWR_A_TIMING_CTRL1_FAST_LDO_Pos));
990 __STATIC_INLINE
void ll_pwr_set_hf_osc_prepare_timing(uint32_t value)
992 MODIFY_REG(AON_PWR->A_TIMING_CTRL1, AON_PWR_A_TIMING_CTRL1_HF_OSC, (value << AON_PWR_A_TIMING_CTRL1_HF_OSC_Pos));
1005 __STATIC_INLINE
void ll_pwr_set_pll_lock_timing(uint32_t value)
1007 MODIFY_REG(AON_PWR->A_TIMING_CTRL2, AON_PWR_A_TIMING_CTRL2_PLL_LOCK, (value << AON_PWR_A_TIMING_CTRL2_PLL_LOCK_Pos));
1020 __STATIC_INLINE
void ll_pwr_set_pll_prepare_timing(uint32_t value)
1022 MODIFY_REG(AON_PWR->A_TIMING_CTRL2, AON_PWR_A_TIMING_CTRL2_PLL, (value << AON_PWR_A_TIMING_CTRL2_PLL_Pos));
1035 __STATIC_INLINE
void ll_pwr_set_pwr_switch_prepare_timing(uint32_t value)
1037 MODIFY_REG(AON_PWR->A_TIMING_CTRL3, AON_PWR_A_TIMING_CTRL3_PWR_SWITCH, (value << AON_PWR_A_TIMING_CTRL3_PWR_SWITCH_Pos));
1050 __STATIC_INLINE
void ll_pwr_set_xo_prepare_timing(uint32_t value)
1052 MODIFY_REG(AON_PWR->A_TIMING_CTRL3, AON_PWR_A_TIMING_CTRL3_XO, (value << AON_PWR_A_TIMING_CTRL3_XO_Pos));
1065 __STATIC_INLINE
void ll_pwr_set_xo_bias_switch_timing(uint32_t value)
1067 MODIFY_REG(AON_PWR->A_TIMING_CTRL4, AON_PWR_A_TIMING_CTRL4_XO_BIAS_SWITCH, (value << AON_PWR_A_TIMING_CTRL4_XO_BIAS_SWITCH_Pos));
1079 __STATIC_INLINE
void ll_pwr_enable_fast_ldo_pwr_mode(
void)
1081 SET_BITS(AON_PWR->AON_START_CFG, AON_PWR_AON_START_CFG_MCU_PWR_TYPE);
1093 __STATIC_INLINE
void ll_pwr_turn_on_dcdc_after_wakeup(
void)
1095 CLEAR_BITS(AON_PWR->AON_START_CFG, AON_PWR_AON_START_CFG_FAST_DCDC_OFF);
1107 __STATIC_INLINE
void ll_pwr_turn_off_fast_ldo_in_regular_boot(
void)
1109 SET_BITS(AON_PWR->AON_START_CFG, AON_PWR_AON_START_CFG_FAST_LDO_OFF);
1121 __STATIC_INLINE
void ll_pwr_turn_off_enable_xo_pll_after_dcdc_ready(
void)
1123 CLEAR_BITS(AON_PWR->AON_START_CFG, AON_PWR_AON_START_CFG_XO_EN_PWR|AON_PWR_AON_START_CFG_PLL_EN_PWR);
1134 __STATIC_INLINE
void ll_pwr_turn_on_enable_xo_pll_after_dcdc_ready(
void)
1136 SET_BITS(AON_PWR->AON_START_CFG, AON_PWR_AON_START_CFG_XO_EN_PWR|AON_PWR_AON_START_CFG_PLL_EN_PWR);