Datasheet
Table Of Contents
- RP2040 Datasheet
- Colophon
- Chapter 1. Introduction
- Chapter 2. System Description
- 2.1. Bus Fabric
- 2.2. Address Map
- 2.3. Processor subsystem
- 2.4. Cortex-M0+
- 2.5. DMA
- 2.6. Memory
- 2.7. Boot Sequence
- 2.8. Bootrom
- 2.9. Power Supplies
- 2.10. Core Supply Regulator
- 2.11. Power Control
- 2.12. Chip-Level Reset
- 2.13. Power-On State Machine
- 2.14. Subsystem Resets
- 2.15. Clocks
- 2.16. Crystal Oscillator (XOSC)
- 2.17. Ring Oscillator (ROSC)
- 2.18. PLL
- 2.19. GPIO
- 2.20. Sysinfo
- 2.21. Syscfg
- 2.22. TBMAN
- Chapter 3. PIO
- Chapter 4. Peripherals
- 4.1. USB
- 4.2. UART
- 4.3. I2C
- 4.3.1. Features
- 4.3.2. IP Configuration
- 4.3.3. I2C Overview
- 4.3.4. I2C Terminology
- 4.3.5. I2C Behaviour
- 4.3.6. I2C Protocols
- 4.3.7. Tx FIFO Management and START, STOP and RESTART Generation
- 4.3.8. Multiple Master Arbitration
- 4.3.9. Clock Synchronization
- 4.3.10. Operation Modes
- 4.3.11. Spike Suppression
- 4.3.12. Fast Mode Plus Operation
- 4.3.13. Bus Clear Feature
- 4.3.14. IC_CLK Frequency Configuration
- 4.3.15. DMA Controller Interface
- 4.3.16. Operation of Interrupt Registers
- 4.3.17. List of Registers
- 4.4. SPI
- 4.5. PWM
- 4.6. Timer
- 4.7. Watchdog
- 4.8. RTC
- 4.9. ADC and Temperature Sensor
- 4.10. SSI
- 4.10.1. Overview
- 4.10.2. Features
- 4.10.3. IP Modifications
- 4.10.4. Clock Ratios
- 4.10.5. Transmit and Receive FIFO Buffers
- 4.10.6. 32-Bit Frame Size Support
- 4.10.7. SSI Interrupts
- 4.10.8. Transfer Modes
- 4.10.9. Operation Modes
- 4.10.10. Partner Connection Interfaces
- 4.10.11. DMA Controller Interface
- 4.10.12. APB Interface
- 4.10.13. List of Registers
- Chapter 5. Electrical and Mechanical
- Appendix A: Register Field Types
- Appendix B: Errata
- Appendix C: Documentation Release History
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