diff options
| author | Selene ToyKeeper | 2019-11-14 19:44:57 -0700 |
|---|---|---|
| committer | Selene ToyKeeper | 2019-11-14 19:44:57 -0700 |
| commit | 1a85469b00856020e061170c031d47173f298d93 (patch) | |
| tree | b30725c34f27797516f8bc82b49bcf59801b17c8 /spaghetti-monster/fsm-events.c | |
| parent | fixed some compile issues related to delay_4ms() (diff) | |
| parent | turned off muggle mode on Q8 and MF01S, to make builds small enough again (diff) | |
| download | anduril-1a85469b00856020e061170c031d47173f298d93.tar.gz anduril-1a85469b00856020e061170c031d47173f298d93.tar.bz2 anduril-1a85469b00856020e061170c031d47173f298d93.zip | |
merged irq-refactor branch, which fixes some small but long-standing issues:
- occasional missed button events while asleep
- occasional short/aborted frames in aux LED sleep animation
- rare case of bogus voltage and/or temperature values
- fixed issue where nice_delay_ms() didn't work in setup()
- fixed theoretical possibility of extra-noisy buttons causing a hang
Also does some other things:
- cleans up the ADC code significantly
- adds a voltage stabilizer/lowpass option (enabled on t1634 builds)
- greatly reduces time spent per interrupt,
which might make a future PWM-DSM technique possible
- moves most interrupt-handling logic to a non-critical code path,
deferring that code until timing doesn't matter as much
- sped up button state measurements
- turned off muggle mode on a couple builds which were too big
Diffstat (limited to 'spaghetti-monster/fsm-events.c')
| -rw-r--r-- | spaghetti-monster/fsm-events.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/spaghetti-monster/fsm-events.c b/spaghetti-monster/fsm-events.c index 3e9a12d..a1b013a 100644 --- a/spaghetti-monster/fsm-events.c +++ b/spaghetti-monster/fsm-events.c @@ -110,7 +110,7 @@ uint8_t nice_delay_ms(uint16_t ms) { /* // delay_zero() implementation if (ms == 0) { CLKPR = 1<<CLKPCE; CLKPR = 0; // full speed - _delay_loop_2(BOGOMIPS*98/100/3); + _delay_loop_2(BOGOMIPS*95/100/3); return 1; } */ @@ -120,15 +120,15 @@ uint8_t nice_delay_ms(uint16_t ms) { uint8_t level = actual_level; // volatile, avoid repeat access if (level < QUARTERSPEED_LEVEL) { clock_prescale_set(clock_div_4); - _delay_loop_2(BOGOMIPS*98/100/4); + _delay_loop_2(BOGOMIPS*95/100/4); } //else if (level < HALFSPEED_LEVEL) { // clock_prescale_set(clock_div_2); - // _delay_loop_2(BOGOMIPS*98/100/2); + // _delay_loop_2(BOGOMIPS*95/100/2); //} else { clock_prescale_set(clock_div_1); - _delay_loop_2(BOGOMIPS*98/100); + _delay_loop_2(BOGOMIPS*95/100); } // restore regular clock speed clock_prescale_set(clock_div_1); @@ -136,15 +136,18 @@ uint8_t nice_delay_ms(uint16_t ms) { // underclock MCU to save power clock_prescale_set(clock_div_4); // wait - _delay_loop_2(BOGOMIPS*98/100/4); + _delay_loop_2(BOGOMIPS*95/100/4); // restore regular clock speed clock_prescale_set(clock_div_1); #endif // ifdef USE_RAMPING #else // wait - _delay_loop_2(BOGOMIPS*98/100); + _delay_loop_2(BOGOMIPS*95/100); #endif // ifdef USE_DYNAMIC_UNDERCLOCKING + // run pending system processes while we wait + handle_deferred_interrupts(); + if ((nice_delay_interrupt) || (old_state != current_state)) { return 0; // state changed; abort } |
