Брр я не очень силён в Си но ожидать прерывания не нужно!
На то и есть оно чтобы по нему направить прогу на отработку.
вот пример на ASM :
- Код: Выделить всё • Развернуть
.org T0OVaddr ; Вектор прерывания по переполнению таймера0
rjmp start_pwm
.........
sei ; Разрешение глобальных прерываний
;Основной цикл.
idle:
ldi r16, (1<<SE) ; Enable sleep
out MCUCR, r16
sleep
NOP
rjmp idle
start_pwm:
.........
А вообще если задача стоит именно так что функция в процессе выполнения должна дождаться выполнения прерывания то активную её часть выделяем в другую функцию, вход в которую делаем по флагу отработки прерывания.
А зацикливать на пустом месте - не правильно.
Другими словами есть основной цикл просмотра флагов - что делать а что нет.