|
Возьмем прерывание $004 TIM_COMP1 (Обработка совпадения таймера 1).
Таймер подключен через предделитель 1024.
Я так понимаю, что uС в каждом такте проверяет
if(OCR1 == TCNT1) SETBIT(TIFR, OCF1A)
Теперь возьмем обработчик прерывания, выполняемый за 100 тактов.
1. Таймер увеличился на 1 и совпал с регистром сравнения.
+SETBIT(TIFR, OCF1A)
2. Вызвалось прерывание TIM_COMP1 + CLEARBIT(TIFR, OCF1A) + CLI
3. Поскольку, по-прежнему OCR1 == TCNT1, то SETBIT(TIFR, OCF1A)
...
1025 такт
n. IRET + SEI
после этого выполнится одна инструкция и вновь будет вызвано прерывание (ведь бит OCF1A в TIFR установлен), несмотря на то, что условие возникновения прерывания к этому моменту отсутствует!
E-mail: info@telesys.ru