Внешние прерывания ATmega16A: регистры и биты
Внешние прерывания: входы INT0–INT2 с выбором условия — низкий уровень, любое изменение, спад или фронт (биты ISC в MCUCR и MCUCSR), разрешает их GICR.
Данные: описание ATmega16A из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита 8154C.
Регистры блока
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
MCUCR = 0;Ассемблер Microchip (m16adef.inc)
ldi r16, 0x00
out MCUCR, r16MCUCSR — причина сброса и управление микроконтроллером
Адрес 0x54 (I/O 0x34), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | JTD | ISC2 | — | JTRF | WDRF | BORF | EXTRF | PORF |
| Доступ | R/W | R/W | R | R/W | R/W | R/W | R/W | R/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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | SM2 | SE | SM1 | SM0 | ISC11 | ISC10 | ISC01 | ISC00 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- ISC11:0 (биты 3:2) — Условие срабатывания INT1.
ISC11:0 Значение 00 Низкий уровень 01 Любое изменение 10 Спад 11 Фронт - ISC01:0 (биты 1:0) — Условие срабатывания INT0.
ISC01:0 Значение 00 Низкий уровень 01 Любое изменение 10 Спад 11 Фронт
Остальные биты регистра относятся к другим блокам: SM2:0 — режим сна (CPU), SE — разрешение сна (команда sleep) (CPU).
GIFR — флаги внешних прерываний
Адрес 0x5A (I/O 0x3A), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | INTF1 | INTF0 | INTF2 | — | — | — | — | — |
| Доступ | R/W | R/W | R/W | R | R | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- INTF1:0 (биты 7:6) — Флаги прерываний INTn. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- INTF2 (бит 5) — Флаг прерывания INT2. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
GICR — разрешение внешних прерываний и векторы
Адрес 0x5B (I/O 0x3B), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | INT1 | INT0 | INT2 | — | — | — | IVSEL | IVCE |
| Доступ | R/W | R/W | R/W | R | R | R | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- INT1 (бит 7) — Разрешение прерывания INT1.
- INT0 (бит 6) — Разрешение прерывания INT0.
- INT2 (бит 5) — Разрешение прерывания INT2.
- IVSEL (бит 1) — Векторы прерываний в загрузочной области.
- IVCE (бит 0) — Разрешение изменения IVSEL. Изменение IVSEL: записать IVCE = 1, затем в течение четырёх тактов — новое IVSEL при IVCE = 0.
Частые вопросы
Какими командами ассемблера обращаться к регистрам EXINT ATmega16A?
Командами IN и OUT доступны MCUCSR (0x34), MCUCR (0x35), GIFR (0x3A) и GICR (0x3B). В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.
Какие значения у регистров EXINT после сброса?
Все регистры блока, для которых даташит 8154C приводит значение после сброса (MCUCR, GIFR и GICR), после сброса равны нулю.
Как установить биты MCUCR на C?
Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: MCUCR = (1 << ISC11) | (1 << ISC01); записывает новое значение целиком, а MCUCR |= (1 << ISC11); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. Atmel. ATmega16A datasheet (8154C) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega16A (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATmega16A
- Все регистры ATmega16AТаблица по адресам
- Таймер-счётчик 0 (8 бит)SFIOR, TCNT0, TCCR0, TIFR, TIMSK, OCR0
- Таймер-счётчик 1 (16 бит)ICR1, OCR1B, OCR1A, TCNT1, TCCR1B, TCCR1A
- EEPROMEECR, EEDR, EEAR
- Ядро и системные регистрыWDTCR, SFIOR, OSCCAL, OCDR, MCUCSR, MCUCR
- Таймер-счётчик 2 (8 бит, асинхронный)ASSR, OCR2, TCNT2, TCCR2, SFIOR, TIFR
- SPISPCR, SPSR, SPDR
- USARTUBRRL, UCSRB, UCSRA, UDR, UCSRC, UBRRH
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR
- Аналоговый компараторACSR, SFIOR
- АЦПADC, ADCSRA, ADMUX, SFIOR
- Порты ввода-выводаPIND, DDRD, PORTD, PINC, DDRC, PORTC