Перейти к содержанию

Внешние прерывания ATmega32A: регистры и биты

Внешние прерывания: входы INT0–INT2 с выбором условия — низкий уровень, любое изменение, спад или фронт (биты ISC в MCUCR и MCUCSR), разрешает их GICR.

Данные: описание ATmega32A из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита DS40002072A.

Регистры блока

РегистрАдресНазначениеПосле сброса
MCUCSR0x54 (I/O 0x34)Причина сброса и управление микроконтроллером—
MCUCR0x55 (I/O 0x35)Управление микроконтроллером0x00
GIFR0x5A (I/O 0x3A)Флаги внешних прерываний0x00
GICR0x5B (I/O 0x3B)Разрешение внешних прерываний и векторы0x00

Конструктор значения

Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.

Исходные данные

Результат

Значение
0x00
Двоичное, биты 7…0
0000 0000

C (avr-gcc, avr/io.h)

MCUCR = 0;

Ассемблер Microchip (m32adef.inc)

ldi r16, 0x00
out MCUCR, r16

MCUCSR — причина сброса и управление микроконтроллером

Адрес 0x54 (I/O 0x34), 8 бит.

Бит76543210
ИмяJTDISC2—JTRFWDRFBORFEXTRFPORF
ДоступR/WR/WRR/WR/WR/WR/WR/W
  • ISC2 (бит 6) — Условие срабатывания INT2.

Остальные биты регистра относятся к другим блокам: JTD — отключить интерфейс jtag (CPU), JTRF — сброс командой avr_reset через jtag (CPU), WDRF — сброс сторожевым таймером (CPU), BORF — сброс детектором пониженного питания (CPU), EXTRF — внешний сброс по выводу reset (CPU), PORF — сброс при включении питания (CPU).

MCUCR — управление микроконтроллером

Адрес 0x55 (I/O 0x35), 8 бит, после сброса 0x00.

Бит76543210
ИмяSESM2SM1SM0ISC11ISC10ISC01ISC00
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • ISC11:0 (биты 3:2) — Условие срабатывания INT1.
    ISC11:0Значение
    00Низкий уровень
    01Любое изменение
    10Спад
    11Фронт
  • ISC01:0 (биты 1:0) — Условие срабатывания INT0.
    ISC01:0Значение
    00Низкий уровень
    01Любое изменение
    10Спад
    11Фронт

Остальные биты регистра относятся к другим блокам: SE — разрешение сна (команда sleep) (CPU), SM2:0 — режим сна (CPU).

GIFR — флаги внешних прерываний

Адрес 0x5A (I/O 0x3A), 8 бит, после сброса 0x00.

Бит76543210
ИмяINTF1INTF0INTF2—————
ДоступR/WR/WR/WRRRRR
После сброса00000000
  • INTF1:0 (биты 7:6) — Флаги прерываний INTn. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • INTF2 (бит 5) — Флаг прерывания INT2. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.

GICR — разрешение внешних прерываний и векторы

Адрес 0x5B (I/O 0x3B), 8 бит, после сброса 0x00.

Бит76543210
ИмяINT1INT0INT2———IVSELIVCE
ДоступR/WR/WR/WRRRR/WR/W
После сброса00000000
  • INT1 (бит 7) — Разрешение прерывания INT1.
  • INT0 (бит 6) — Разрешение прерывания INT0.
  • INT2 (бит 5) — Разрешение прерывания INT2.
  • IVSEL (бит 1) — Векторы прерываний в загрузочной области.
  • IVCE (бит 0) — Разрешение изменения IVSEL. Изменение IVSEL: записать IVCE = 1, затем в течение четырёх тактов — новое IVSEL при IVCE = 0.

Частые вопросы

Какими командами ассемблера обращаться к регистрам EXINT ATmega32A?

Командами IN и OUT доступны MCUCSR (0x34), MCUCR (0x35), GIFR (0x3A) и GICR (0x3B). В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

Какие значения у регистров EXINT после сброса?

Все регистры блока, для которых даташит DS40002072A приводит значение после сброса (MCUCR, GIFR и GICR), после сброса равны нулю.

Как установить биты MCUCR на C?

Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: MCUCR = (1 << ISC11) | (1 << ISC01); записывает новое значение целиком, а MCUCR |= (1 << ISC11); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.

Источники

  1. Microchip. ATmega32A Data Sheet (DS40002072A) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega32A (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры ATmega32A

Калькуляторы и статьи