From c0a9e3ae09c193bf9655117fa9ad494e5b3d7f8d Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 4 May 2010 02:25:34 +0200 Subject: digital/mimot/src/dirty: poll counter more often, add shift See previous commit. --- digital/mimot/src/dirty/timer.avr.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'digital/mimot/src/dirty/timer.avr.c') diff --git a/digital/mimot/src/dirty/timer.avr.c b/digital/mimot/src/dirty/timer.avr.c index eb313603..3f956137 100644 --- a/digital/mimot/src/dirty/timer.avr.c +++ b/digital/mimot/src/dirty/timer.avr.c @@ -27,6 +27,15 @@ #include "modules/utils/utils.h" #include "io.h" +#include "counter.h" + +/** Top timer value. */ +#define TIMER_TOP 255 +/** Number of steps during wait. */ +#define TIMER_STEPS 4 +/** Size of step. */ +#define TIMER_STEP ((TIMER_TOP + 1) / TIMER_STEPS) + /** Initialise the timer. */ void timer_init (void) @@ -43,6 +52,15 @@ timer_init (void) void timer_wait (void) { + uint8_t i; + /* Make small steps with counter updates. */ + for (i = 1; i < TIMER_STEPS; i++) + { + while (TCNT0 < i * TIMER_STEP) + ; + counter_update_step (); + } + /* Wait overflow. */ while (!(TIFR & _BV (TOV0))) ; /* Write 1 to clear. */ -- cgit v1.2.3