Бит 6 — OCF1A: флаг выхода совпадения 1 А. Флаг устанавливается в 1 если происходит совпадение значения таймера/счетчика 1 и данных в регистре OCR1A. Флаг очищается аппаратно при выполнении соответствующего вектора прерывания. Кроме того, флаг можно сбросить, записав в него логическую единицу. Если установлены бит I в SREG и бит OCIE1А в TIMCK, при установке бита OCF1А выполняется прерывание.
Биты 5, 4 — в AT90S2313 зарезервированы и всегда читаются как 0.
Бит 3 — ICF1: флаг входа захвата 1. Бит устанавливается в 1 при возникновении события захвата по входу, он индицирует, что значение таймера/счетчика 1 скопировано в регистр захвата по входу ICR1. ICF1 очищается при выполнении соответствующего вектора обработки прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу.
Бит 2 — в AT90S2313 зарезервирован и всегда читается как 0.
Бит 1 — TOV0: флаг переполнения таймера счетчика 1. Флаг TOV0 устанавливается при переполнении таймера/счетчика 0. Флаг сбрасывается аппаратно при выполнении соответствующего вектора прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу. Если установлены бит I в SREG и бит TOIE0 в TIMCK, при установке бита TOV0 выполняется прерывание по переполнению таймера/счетчика 0.
Бит 0 — в AT90S2313 зарезервирован и всегда читается как 0.
Внешние прерывания управляются выводами INT0 и INT1. Обратите внимание на то, что прерывания обрабатываются, даже когда выводы сконфигурированы как выходы. Это позволяет генерировать программные прерывания. Внешние прерывания могут возникать по спадающему или нарастающему фронту, а также по низкому уровню. Это устанавливается в регистре управления процессором MCUCR.
Если внешние прерывания разрешены и сконфигурированы на отработку по уровню, прерывание будет вырабатываться до тех пор, пои вывод удерживается в низком состоянии.
Управление работой внешних прерываний рассмотрено при описании регистра управления процессором MCUCR.
Минимальное время реакции на любое из предусмотренных процессоре, прерываний — 4 периода тактовой частоты. После 4 циклов вызывается программный вектор, обрабатывающий данное прерывание. За эти 4 цикла программный счетчик записывается в ста указатель стека уменьшается на 2. Программный вектор представляет собой относительный переход на подпрограмму обслуживания прерывания, и этот переход занимает 2 периода тактовой частоты. Если прерывание происходит во время выполнения команды, длящейся несколько циклов, перед вызовом прерывания завершаете выполнение этой команды.
Выход из программы обслуживания прерывания занимает 4 периода тактовой частоты. За эти 4 периода из стека восстанавливаете программный счетчик. После выхода из прерывания процессор всегда выполняет еще одну команду, прежде чем обслужить любое отложенное прерывание.
Заметим, что регистр состояния SREG аппаратно не сохраняете процессором как при вызове подпрограмм, так и при обслуживании прерываний. Если программа требует сохранения SREG, оно должно производиться программой пользователя.
Рис. 2.24. Регистр управления микроконтроллером MCUCR
Биты 7, 6 — в AT90S2313 эти биты зарезервированы и всегда читаются как 0.
Бит 5 — SE: разрешение режима Sleep. Этот бит должен быть установлен в 1, чтобы при выполнении команды SLEEP процессор переходил в режим пониженного энергопотребления. Этот бит должен быть установлен в 1 до исполнения команды SLEEP.
Бит 4 — SM: режим Sleep. Этот бит выбирает один из двух режимов пониженного энергопотребления. Если бит сброшен, в качестве режима Sleep выбирается холостой режим (Idle mode). Если бит установлен — выбирается экономичный режим (Power Down). Особенности каждого из режимов будут рассмотрены ниже.
Биты 3, 2 — ISC11, ISC10: биты управления срабатыванием прерывания 1. Внешнее прерывание активируется выводом INT1, если установлен флаг I регистра состояния SREG и установлена соответствующая маска в регистре GIMCK. Срабатывание по уровню и фронтам задается следующим образом: