|
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