Datasheet

Table Of Contents
4.8.5.4. Configuring an Alarm
SDK: https://github.com/raspberrypi/pico-sdk/tree/master/src/rp2_common/hardware_rtc/rtc.c Lines 147 - 183
147 void rtc_set_alarm(datetime_t *t, rtc_callback_t user_callback) {
148 rtc_disable_alarm();
149
150 // Only add to setup if it isn't -1
151 rtc_hw->irq_setup_0 = ((t->year < 0) ? 0 : (((uint)t->year) <<
Ê RTC_IRQ_SETUP_0_YEAR_LSB )) |
152 ((t->month < 0) ? 0 : (((uint)t->month) <<
Ê RTC_IRQ_SETUP_0_MONTH_LSB)) |
153 ((t->day < 0) ? 0 : (((uint)t->day) <<
Ê RTC_IRQ_SETUP_0_DAY_LSB ));
154 rtc_hw->irq_setup_1 = ((t->dotw < 0) ? 0 : (((uint)t->dotw) <<
Ê RTC_IRQ_SETUP_1_DOTW_LSB)) |
155 ((t->hour < 0) ? 0 : (((uint)t->hour) <<
Ê RTC_IRQ_SETUP_1_HOUR_LSB)) |
156 ((t->min < 0) ? 0 : (((uint)t->min) <<
Ê RTC_IRQ_SETUP_1_MIN_LSB )) |
157 ((t->sec < 0) ? 0 : (((uint)t->sec) <<
Ê RTC_IRQ_SETUP_1_SEC_LSB ));
158
159 // Set the match enable bits for things we care about
160 if (t->year >= 0) hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_YEAR_ENA_BITS);
161 if (t->month >= 0) hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_MONTH_ENA_BITS);
162 if (t->day >= 0) hw_set_bits(&rtc_hw->irq_setup_0, RTC_IRQ_SETUP_0_DAY_ENA_BITS);
163 if (t->dotw >= 0) hw_set_bits(&rtc_hw->irq_setup_1, RTC_IRQ_SETUP_1_DOTW_ENA_BITS);
164 if (t->hour >= 0) hw_set_bits(&rtc_hw->irq_setup_1, RTC_IRQ_SETUP_1_HOUR_ENA_BITS);
165 if (t->min >= 0) hw_set_bits(&rtc_hw->irq_setup_1, RTC_IRQ_SETUP_1_MIN_ENA_BITS);
166 if (t->sec >= 0) hw_set_bits(&rtc_hw->irq_setup_1, RTC_IRQ_SETUP_1_SEC_ENA_BITS);
167
168 // Does it repeat? I.e. do we not match on any of the bits
169 _alarm_repeats = rtc_alarm_repeats(t);
170
171 // Store function pointer we can call later
172 _callback = user_callback;
173
174 irq_set_exclusive_handler(RTC_IRQ, rtc_irq_handler);
175
176 // Enable the IRQ at the peri
177 rtc_hw->inte = RTC_INTE_RTC_BITS;
178
179 // Enable the IRQ at the proc
180 irq_set_enabled(RTC_IRQ, true);
181
182 rtc_enable_alarm();
183 }
NOTE
Recurring alarms can be created by using fewer enable bits when setting up the alarm interrupt. For example, if you
only matched on seconds and the second was configured as 54 then the alarm interrupt would fire once a minute
when the second was 54.
4.8.5.5. Interaction with Dormant / Sleep mode
RP2040 supports two power saving levels:
RP2040 Datasheet
4.8. RTC 573