From e472abd631d23ace75636a352fe2e12407f89dcf Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Mon, 21 May 2012 00:31:25 +0200 Subject: digital/io-hub/src/guybrush: fix chrono issue --- digital/ai/src/utils/chrono.c | 6 +++--- digital/ai/src/utils/chrono.h | 2 +- digital/ai/src/utils/timer.avr.c | 10 +++++++--- digital/ai/src/utils/timer.h | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) (limited to 'digital/ai') diff --git a/digital/ai/src/utils/chrono.c b/digital/ai/src/utils/chrono.c index 85dc9483..8560c3e0 100644 --- a/digital/ai/src/utils/chrono.c +++ b/digital/ai/src/utils/chrono.c @@ -44,7 +44,7 @@ static uint32_t chrono_tick_left_; /** Last timer tick value. */ -static uint8_t chrono_last_tick_; +static uint16_t chrono_last_tick_; /** Is chrono started? */ static uint8_t chrono_started_; @@ -62,8 +62,8 @@ chrono_update (void) { if (chrono_started_) { - uint8_t new_tick = timer_get_tick (); - uint8_t diff = new_tick - chrono_last_tick_; + uint16_t new_tick = timer_get_tick (); + uint16_t diff = new_tick - chrono_last_tick_; chrono_last_tick_ = new_tick; if (diff > chrono_tick_left_) chrono_tick_left_ = 0; diff --git a/digital/ai/src/utils/chrono.h b/digital/ai/src/utils/chrono.h index 42ee6f9b..085b1a5e 100644 --- a/digital/ai/src/utils/chrono.h +++ b/digital/ai/src/utils/chrono.h @@ -30,7 +30,7 @@ */ /** Duration of a match in milliseconds, with margin. */ -#define CHRONO_MATCH_DURATION_MS (90000 - 5500) +#define CHRONO_MATCH_DURATION_MS (90000 - 1500) /** Start chrono count down. */ void diff --git a/digital/ai/src/utils/timer.avr.c b/digital/ai/src/utils/timer.avr.c index d00278f8..9a6e3ede 100644 --- a/digital/ai/src/utils/timer.avr.c +++ b/digital/ai/src/utils/timer.avr.c @@ -33,7 +33,7 @@ static volatile uint8_t timer_overflow; /** Incremented when timer overflowed. */ -static volatile uint8_t timer_tick; +static volatile uint16_t timer_tick; ISR (TIMER0_OVF_vect) { @@ -79,9 +79,13 @@ timer_wait (void) return late; } -uint8_t +uint16_t timer_get_tick (void) { - return timer_tick; + uint16_t tick; + intr_flags_t flags = intr_lock (); + tick = timer_tick; + intr_restore (flags); + return tick; } diff --git a/digital/ai/src/utils/timer.h b/digital/ai/src/utils/timer.h index dd71681f..0d597870 100644 --- a/digital/ai/src/utils/timer.h +++ b/digital/ai/src/utils/timer.h @@ -62,7 +62,7 @@ uint8_t timer_wait (void); /** Get a tick value, incremented at each tick, never reset. */ -uint8_t +uint16_t timer_get_tick (void); #endif /* timer_h */ -- cgit v1.2.3