From d200c95913e4d35b9e21ebb2954ea6955fefefdf Mon Sep 17 00:00:00 2001 From: idgay Date: Mon, 7 Aug 2006 22:57:37 +0000 Subject: [PATCH] fix compare register values (need to be set one early) --- tos/chips/atm128/timer/Atm128AlarmC.nc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tos/chips/atm128/timer/Atm128AlarmC.nc b/tos/chips/atm128/timer/Atm128AlarmC.nc index 4cbd6337..a25aa955 100644 --- a/tos/chips/atm128/timer/Atm128AlarmC.nc +++ b/tos/chips/atm128/timer/Atm128AlarmC.nc @@ -96,24 +96,27 @@ implementation Note also that casting compared quantities to timer_size produces predictable comparisons (the C integer promotion rules would make it hard to write correct code for the possible timer_size size's) */ + /* Note: all HplAtm128Compare.set values have one subtracted, because + the comparisons are continuous, but the actual interrupt is signalled + at the next timer clock cycle. */ if (t0 <= now) { /* if it's in the past or the near future, fire now (i.e., test guardedExpires <= now in wrap-around arithmetic). */ if (guardedExpires >= t0 && // if it wraps, it's > now guardedExpires <= now) - call HplAtm128Compare.set(call HplAtm128Timer.get() + mindt); + call HplAtm128Compare.set(call HplAtm128Timer.get() + mindt - 1); else - call HplAtm128Compare.set(expires); + call HplAtm128Compare.set(expires - 1); } else { /* again, guardedExpires <= now in wrap-around arithmetic */ if (guardedExpires >= t0 || // didn't wrap so < now guardedExpires <= now) - call HplAtm128Compare.set(call HplAtm128Timer.get() + mindt); + call HplAtm128Compare.set(call HplAtm128Timer.get() + mindt - 1); else - call HplAtm128Compare.set(expires); + call HplAtm128Compare.set(expires - 1); } call HplAtm128Compare.reset(); call HplAtm128Compare.start(); -- 2.39.2