fix timer bug- if delay is smaller than TICK_TIME but counter has passed delay when timer is set, it will wait a whole TICK_TIME before firing instead of setting comparator to fire at correct time

check next_step_time instead of delay in comparison

Reported-by: Markus Amsler <markus.amsler@oribi.org>
This commit is contained in:
Michael Moon 2011-02-08 09:43:50 +11:00
parent 553f3a50a6
commit 00fc05a49b
1 changed files with 4 additions and 4 deletions

View File

@ -31,9 +31,9 @@ ISR(TIMER1_CAPT_vect) {
clock_counter_10ms -= 10;
clock_flag |= CLOCK_FLAG_10MS;
clock_counter_250ms += 10;
if (clock_counter_250ms >= 250) {
clock_counter_250ms -= 250;
clock_counter_250ms += 1;
if (clock_counter_250ms >= 25) {
clock_counter_250ms -= 25;
clock_flag |= CLOCK_FLAG_250MS;
clock_counter_1s += 1;
@ -99,7 +99,7 @@ void setTimer(uint32_t delay)
// "fire" ISR- maybe it sets a new timeout
timer1_compa_isr();
}
else if (delay <= TICK_TIME) {
else if (next_step_time <= TICK_TIME) {
OCR1A = next_step_time & 0xFFFF;
TIMSK1 |= MASK(OCIE1A);
}