summaryrefslogtreecommitdiffhomepage
path: root/digital/ai/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'digital/ai/src/utils')
-rw-r--r--digital/ai/src/utils/chrono.c11
-rw-r--r--digital/ai/src/utils/timer.avr.c10
-rw-r--r--digital/ai/src/utils/timer.h2
3 files changed, 15 insertions, 8 deletions
diff --git a/digital/ai/src/utils/chrono.c b/digital/ai/src/utils/chrono.c
index 41e39b87..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;
@@ -84,7 +84,10 @@ chrono_is_match_over (void)
uint32_t
chrono_remaining_time (void)
{
- return chrono_tick_left_ * TIMER_PERIOD_MS;
+ if (!chrono_started_)
+ return CHRONO_MATCH_DURATION_MS;
+ else
+ return chrono_tick_left_ * TIMER_PERIOD_MS;
}
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 */