Таймер 1 COMPA ISR - поведение по умолчанию?

Я создаю генератор частоты LCD.

Когда TIMER1 достигает заданного значения, он переключается на контакт 9 (через OC1A).

Случайно, я оставил TIMER1 "прерывание при сравнении соответствия A" включенным, но не определил вектор прерывания TIMER1_COMPA_vect.

Это приводило к перезагрузке Uno, но не через загрузчик, а только к программной части, всякий раз, когда вызывался TIMER1_COMPA_vect.

После того как я определил ISR, даже без содержания, он заработал как положено.

Есть ли содержимое по умолчанию для ISR, которое сбрасывает устройство/запускается сразу после загрузчика? Разве компилятор не должен обнаруживать полное отсутствие ISR?

, 👍1


1 ответ


Лучший ответ:

3

Компилятор не может обнаружить отсутствующий ISR, так как это очень сложно, т.к. общем случае, чтобы определить, является ли какой-либо конкретный бит разрешения прерывания был установлен программой.

Библиотека avr-libc действительно обеспечивает «универсальный» ISR и, как указано в руководстве,

действием по умолчанию является сброс устройства путем перехода к сбросу вектор.

Если вам не нравится такое поведение, вы можете переопределить этот прием с помощью свой собственный, как описано в руководстве (ищите «Catch-all вектор прерывания").

,

Очень интересно, это решает мою путаницу - спасибо., @towe