Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
306
Добавлен:
20.06.2014
Размер:
1.06 Mб
Скачать
          1. Регистр gicr (General Interrupt Control Register)

Регистр GICR управляет маскированием внешних прерываний и размещением таблицы векторов прерываний.

Формат регистра GICR:

  • бит 7 — INT1, маска внешнего прерывания INT1;

  • бит 6 — INT0, маска внешнего прерывания INT0;

  • бит 5 — INT2, маска внешнего прерывания INT2;

  • бит 1 — IVSEL (Interrupt Vector Select);

  • бит 0 — IVCE (Interrupt Vector Change Enable).

Если IVSEL сброшен, вектора прерываний располагаются в начале Flash-памяти, если установлен — в начале загрузочной секции.

Адрес начала загрузочной секции определяется перемычками BOOTSZ.

Чтобы изменить расположение векторов прерываний, надо установить бит IVCE, а затем в течение четырех циклов — бит IVSEL. IVCE сбрасывается аппаратно по прошествии четырех циклов после своей установки или при установке IVSEL. При выполнении этой последовательности действий прерывания запрещаются автоматически, но на бит I регистра SREG это не влияет.

Пример.

Подпрограмма перемещения векторов прерываний на ассемблере:

Move_interrupts:

; Enable change of interrupt vectors

ldi r16, (1<<IVCE)

out GICR, r16

; Move interrupts to boot Flash section

ldi r16, (1<<IVSEL)

out GICR, r16

ret

Функция перемещения векторов прерываний на C:

void Move_interrupts(void)

{

/* Enable change of interrupt vectors */

GICR = (1<<IVCE);

/* Move interrupts to boot Flash section */

GICR = (1<<IVSEL);

}

          1. Внешние прерывания

Внешние прерывания принимаются по выводам INT0, INT1, INT2. Они распознаются, если бит I регистра SREG и соответствующие маски прерываний регистра GICR. Микроконтроллер реагирует на них при этих условиях, если даже выводы INT0, INT1, INT2 сконфигурированы как выходы. Внешние прерывания могут приниматься передним или задним фронтом или низким уровнем. INT2 принимается только фронтом. Прием сигнала прерывания по выводам INT0, INT1 фронтом требует тактирования ввода-вывода. Прием сигнала прерывания низким уровнем по выводам INT0, INT1 или фронтом по выводу INT2 является асинхронным. Тактирование ввода-вывода останавливается во всех режимах пониженного энергопотребления, кроме Idle. Таким образом, асинхронный прием сигнала прерывания может использоваться для вывода микроконтроллера из этих режимов. При выходе из режима Power-down низкий уровень сигнала прерывания должен удерживаться достаточное время для обработки прерывания. Это делает MCU менее чувствительным к шуму. Надо отметить, что возможна ситуация, когда MCU просыпается, но не выполняет переход к обработчику прерывания.

          1. Регистр gifr (General Interrupt Flag Register)

Регистр GIFR содержит флаги внешних прерываний:

  • бит 7 — INTF1, флаг внешнего прерывания INT1;

  • бит 6 — INTF0, флаг внешнего прерывания INT0;

  • бит 5 — INTF2, флаг внешнего прерывания INT2.

Остальные биты зарезервированы.

Если INT1 и INT0 принимаются уровнем, соответствующие флаги всегда сброшены. В остальных случаях все флаги устанавливаются, когда поступает сигнал прерывания, и сбрасываются после перехода к обработчику прерывания. Также они могут быть сброшены записью в них логической единицы.