diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-03-27 16:38:01 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-03-30 11:24:42 -0400 |
commit | 6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e (patch) | |
tree | 5eb3eab42f4a7e0abe0c5b790cee9938a1f65564 /src/avr/timer.c | |
parent | 7436ec093acc6f45e0fc2389de7294be43e3f0a8 (diff) | |
download | kutter-6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e.tar.gz kutter-6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e.tar.xz kutter-6d05dd07f59ef21dc81a299e865cdee1fc1d3f8e.zip |
sched: Move timer dispatch loop to board code
Rename sched_timer_kick() to sched_timer_dispatch() and move its loop
into its callers in the board code. This eliminates the need to
export timer_try_set_next() from the board code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/avr/timer.c')
-rw-r--r-- | src/avr/timer.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/avr/timer.c b/src/avr/timer.c index e9ec8dd0..f8686998 100644 --- a/src/avr/timer.c +++ b/src/avr/timer.c @@ -70,11 +70,6 @@ timer_repeat_set(uint16_t next) TIFR1 = 1<<OCF1B; } -ISR(TIMER1_COMPA_vect) -{ - sched_timer_kick(); -} - static void timer_init(void) { @@ -143,7 +138,7 @@ timer_periodic(void) // Set the next timer wake time (in absolute clock ticks) or return 1 // if the next timer is too close to schedule. Caller must disable // irqs. -uint8_t +static uint8_t timer_try_set_next(unsigned int target) { uint16_t next = target; @@ -189,6 +184,19 @@ fail: shutdown("Rescheduled timer in the past"); } +// Harware OCR1A interrupt handler +ISR(TIMER1_COMPA_vect) +{ + for (;;) { + uint16_t next_waketime = sched_timer_dispatch(); + + // Schedule next timer event (or run next timer if it's ready) + uint8_t res = timer_try_set_next(next_waketime); + if (res) + break; + } +} + // Periodic background task that temporarily boosts priority of // timers. This helps prioritize timers when tasks are idling. static void |