Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
timer: Avoid infinite cycle timer on TCNT write
In some situations, it was possible to enter an infinite cycle timer loop. In avr_timer_tcnt_write, the tov cycle timer registration is not protected and can register a timer with p->tov_cycles == 0. The following atmega1280 program demonstrates this issue: int main() { TCCR1A = 0; TCCR1B = (1<<WGM12) | (1<<ICES1); OCR1B = OCR1A = 960; /* Start */ TCNT1 = 0; TCCR1B |= (1<<CS11); /* Stop */ TCCR1B &= ~(1<<CS11); TIFR1 |= (1<<OCF1A) | (1<<OCF1B); /* Start */ TCNT1 = 0; /**< Registers timer with tov_cycles == 0. */ TCCR1B |= (1<<CS11); while (1) ; return 0; }
- Loading branch information