7 #if (HAS_SOC_CONTEXT_RETENTION)
8 #include "power_states.h"
11 static void (*callback[QM_RTC_NUM])(
void *data);
12 static void *callback_data[QM_RTC_NUM];
21 QM_RTC[QM_RTC_0]->rtc_ccr &= ~QM_RTC_CCR_INTERRUPT_ENABLE;
23 #if (HAS_SOC_CONTEXT_RETENTION)
24 if (QM_SCSS_GP->gps0 & QM_GPS0_POWER_STATES_MASK) {
28 if (callback[QM_RTC_0]) {
29 (callback[QM_RTC_0])(callback_data[QM_RTC_0]);
33 QM_RTC[QM_RTC_0]->rtc_eoi;
34 QM_ISR_EOI(QM_IRQ_RTC_0_INT_VECTOR);
39 QM_CHECK(rtc < QM_RTC_NUM, -EINVAL);
40 QM_CHECK(rtc >= QM_RTC_0, -EINVAL);
41 QM_CHECK(NULL != cfg, -EINVAL);
44 QM_RTC[rtc]->rtc_ccr &= ~QM_RTC_CCR_ENABLE;
46 QM_RTC[rtc]->rtc_clr = cfg->
init_val;
52 #if (HAS_RTC_PRESCALER)
54 if (QM_RTC_MIN_PRESCALER <= cfg->prescaler) {
56 QM_RTC[rtc]->rtc_ccr |= QM_RTC_PRESCLR_ENABLE;
57 QM_RTC[rtc]->rtc_cpsr = BIT(cfg->
prescaler);
60 QM_RTC[rtc]->rtc_ccr &= ~QM_RTC_PRESCLR_ENABLE;
72 callback_data[rtc] = NULL;
74 QM_RTC[rtc]->rtc_ccr &= ~QM_RTC_CCR_INTERRUPT_ENABLE;
76 QM_RTC[rtc]->rtc_ccr |= QM_RTC_CCR_INTERRUPT_MASK;
80 QM_RTC[rtc]->rtc_ccr |= QM_RTC_CCR_ENABLE;
87 QM_CHECK(rtc < QM_RTC_NUM, -EINVAL);
88 QM_CHECK(rtc >= QM_RTC_0, -EINVAL);
91 QM_RTC[rtc]->rtc_ccr |= QM_RTC_CCR_INTERRUPT_ENABLE;
93 QM_RTC[rtc]->rtc_ccr &= ~QM_RTC_CCR_INTERRUPT_MASK;
96 QM_RTC[rtc]->rtc_cmr = alarm_val;
103 QM_CHECK(rtc < QM_RTC_NUM, -EINVAL);
104 QM_CHECK(rtc >= QM_RTC_0, -EINVAL);
105 QM_CHECK(NULL != value, -EINVAL);
107 *value = QM_RTC[rtc]->rtc_ccvr;
112 #if (ENABLE_RESTORE_CONTEXT)
115 QM_CHECK(rtc < QM_RTC_NUM, -EINVAL);
116 QM_CHECK(ctx != NULL, -EINVAL);
125 const qm_rtc_context_t *
const ctx)
127 uint32_t int_rtc_mask;
128 QM_CHECK(rtc < QM_RTC_NUM, -EINVAL);
129 QM_CHECK(ctx != NULL, -EINVAL);
143 int_rtc_mask = QM_INTERRUPT_ROUTER->rtc_0_int_mask;
144 QM_INTERRUPT_ROUTER->rtc_0_int_mask = 0xFFFFFFFF;
145 QM_INTERRUPT_ROUTER->rtc_0_int_mask = int_rtc_mask;
159 const qm_rtc_context_t *
const ctx)
void qm_power_soc_restore(void)
Restore system state after sleep or deep sleep.
int qm_rtc_read(const qm_rtc_t rtc, uint32_t *const value)
Read the RTC register value.
int clk_rtc_set_div(const clk_rtc_div_t div)
Change divider value of RTC.
QM_ISR_DECLARE(qm_rtc_0_isr)
ISR for RTC 0 interrupt.
void * callback_data
Callback user data.
uint32_t alarm_val
Alarm value in RTC clocks.
int qm_rtc_set_alarm(const qm_rtc_t rtc, const uint32_t alarm_val)
Set Alarm value.
int qm_rtc_restore_context(const qm_rtc_t rtc, const qm_rtc_context_t *const ctx)
Restore RTC context.
clk_rtc_div_t prescaler
RTC Clock prescaler.
uint32_t init_val
Initial value in RTC clocks.
qm_rtc_t
Number of RTC controllers.
int qm_rtc_set_config(const qm_rtc_t rtc, const qm_rtc_config_t *const cfg)
Set RTC configuration.
bool alarm_en
Alarm enable.
int qm_rtc_save_context(const qm_rtc_t rtc, qm_rtc_context_t *const ctx)
Save RTC context.
void(* callback)(void *data)
User callback.
QM RTC configuration type.