diff options
| author | Selene ToyKeeper | 2019-11-14 19:47:49 -0700 |
|---|---|---|
| committer | Selene ToyKeeper | 2019-11-14 19:47:49 -0700 |
| commit | 5362c032fdca4b20af49db0409a03524a396b815 (patch) | |
| tree | 1d437085b5b3472279167aee905385e39a4a1fe1 /spaghetti-monster/fsm-wdt.c | |
| parent | merged from fsm branch to get safety ramp-down and version check functions, a... (diff) | |
| parent | merged irq-refactor branch, which fixes some small but long-standing issues: (diff) | |
| download | anduril-5362c032fdca4b20af49db0409a03524a396b815.tar.gz anduril-5362c032fdca4b20af49db0409a03524a396b815.tar.bz2 anduril-5362c032fdca4b20af49db0409a03524a396b815.zip | |
merged fsm updates / irq-refactor branch, to get more stable voltage readings
(and otherwise get recent bugfixes)
Diffstat (limited to 'spaghetti-monster/fsm-wdt.c')
| -rw-r--r-- | spaghetti-monster/fsm-wdt.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/spaghetti-monster/fsm-wdt.c b/spaghetti-monster/fsm-wdt.c index 6e61e87..beab1a2 100644 --- a/spaghetti-monster/fsm-wdt.c +++ b/spaghetti-monster/fsm-wdt.c @@ -82,11 +82,23 @@ inline void WDT_off() // clock tick -- this runs every 16ms (62.5 fps) ISR(WDT_vect) { + irq_wdt = 1; // WDT event happened +} + +void WDT_inner() { + irq_wdt = 0; // WDT event handled; reset flag + static uint8_t adc_trigger = 0; - #ifdef TICK_DURING_STANDBY - f_wdt = 1; // WDT event happened + // detect and emit button change events (even during standby) + uint8_t was_pressed = button_last_state; + uint8_t pressed = button_is_pressed(); + if (was_pressed != pressed) { + go_to_standby = 0; + PCINT_inner(pressed); + } + #ifdef TICK_DURING_STANDBY static uint16_t sleep_counter = 0; // handle standby mode specially if (go_to_standby) { @@ -107,11 +119,6 @@ ISR(WDT_vect) { else { sleep_counter = 0; } #endif - // detect and emit button change events - uint8_t was_pressed = button_last_state; - uint8_t pressed = button_is_pressed(); - if (was_pressed != pressed) PCINT_inner(pressed); - // cache this here to reduce ROM size, because it's volatile uint16_t ticks_since_last = ticks_since_last_event; @@ -178,6 +185,7 @@ ISR(WDT_vect) { if (go_to_standby) ADC_on(); #endif ADC_start_measurement(); + irq_adc_stable = 0; adcint_enable = 1; } #endif |
