|
38 | 38 | STATIC bool woke_up;
|
39 | 39 | STATIC uint64_t alarm_triggered_pins; // 36 actual pins
|
40 | 40 | STATIC uint64_t alarm_reserved_pins; // 36 actual pins
|
41 |
| -STATIC bool _pinalarm_set = false; |
| 41 | +STATIC bool _not_yet_deep_sleeping = false; |
42 | 42 |
|
43 | 43 | #define GPIO_IRQ_ALL_EVENTS 0x15u
|
44 | 44 |
|
45 | 45 | STATIC void gpio_callback(uint gpio, uint32_t events) {
|
46 | 46 | alarm_triggered_pins |= (1 << gpio);
|
47 | 47 | woke_up = true;
|
48 | 48 |
|
49 |
| - // does this need to be called, to prevent IRQ from constantly going off? |
50 |
| - gpio_acknowledge_irq(gpio, events); |
| 49 | + // gpio_acknowledge_irq(gpio, events) is called automatically, before this callback is called. |
51 | 50 |
|
52 |
| - // Disable IRQ automatically |
53 |
| - gpio_set_irq_enabled(gpio, events, false); |
54 |
| - gpio_set_dormant_irq_enabled(gpio, events, false); |
| 51 | + if (_not_yet_deep_sleeping) { |
| 52 | + // Event went off prematurely, before we went to sleep, so set it again. |
| 53 | + gpio_set_irq_enabled(gpio, events, false); |
| 54 | + } else { |
| 55 | + // Went off during sleep. |
| 56 | + // Disable IRQ automatically. |
| 57 | + gpio_set_irq_enabled(gpio, events, false); |
| 58 | + gpio_set_dormant_irq_enabled(gpio, events, false); |
| 59 | + } |
| 60 | +} |
| 61 | + |
| 62 | +void alarm_pin_pinalarm_entering_deep_sleep() { |
| 63 | + _not_yet_deep_sleeping = false; |
55 | 64 | }
|
56 | 65 |
|
57 | 66 | void common_hal_alarm_pin_pinalarm_construct(alarm_pin_pinalarm_obj_t *self, const mcu_pin_obj_t *pin, bool value, bool edge, bool pull) {
|
@@ -156,11 +165,7 @@ void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_ob
|
156 | 165 | gpio_set_dormant_irq_enabled((uint)alarm->pin->number, event, true);
|
157 | 166 | }
|
158 | 167 |
|
159 |
| - _pinalarm_set = true; |
| 168 | + _not_yet_deep_sleeping = true; |
160 | 169 | }
|
161 | 170 | }
|
162 | 171 | }
|
163 |
| - |
164 |
| -bool alarm_pin_pinalarm_is_set(void) { |
165 |
| - return _pinalarm_set; |
166 |
| -} |
|
0 commit comments