Ядро и системные регистры ATmega16A: регистры и биты
Регистры ядра и системы: регистр состояния SREG, указатель стека SP, режимы сна (биты SE и SM в MCUCR), причина последнего сброса (MCUCSR), управление микроконтроллером (MCUCR), калибровка RC-генератора (OSCCAL), самопрограммирование (SPMCSR), регистр отладки OCDR и сторожевой таймер (WDTCR).
Данные: описание ATmega16A из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита 8154C.
Регистры блока
| Регистр | Адрес | Назначение | После сброса |
|---|---|---|---|
| WDTCR | 0x41 (I/O 0x21) | Управление сторожевым таймером | 0x00 |
| SFIOR | 0x50 (I/O 0x30) | Специальные функции ввода-вывода | 0x00 |
| OSCCAL | 0x51 (I/O 0x31) | Калибровка RC-генератора | — |
| OCDR | 0x51 (I/O 0x31) | Регистр внутрисхемной отладки (OCD) | 0x00 |
| MCUCSR | 0x54 (I/O 0x34) | Причина сброса и управление микроконтроллером | — |
| MCUCR | 0x55 (I/O 0x35) | Управление микроконтроллером | 0x00 |
| SPMCSR | 0x57 (I/O 0x37) | Самопрограммирование (SPM) | — |
| SP | 0x5D (I/O 0x3D) | Указатель стека | 0x0000 |
| SREG | 0x5F (I/O 0x3F) | Регистр состояния | 0x00 |
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
MCUCR = 0;Ассемблер Microchip (m16adef.inc)
ldi r16, 0x00
out MCUCR, r16WDTCR — управление сторожевым таймером
Адрес 0x41 (I/O 0x21), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | WDTOE | WDE | WDP2 | WDP1 | WDP0 |
| Доступ | R | R | R | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- WDTOE (бит 4) — Разрешение выключения сторожевого таймера.
- WDE (бит 3) — Сброс по сторожевому таймеру.
- WDP2:0 (биты 2:0) — Период сторожевого таймера.
WDP2:0 Значение 000 16K тактов генератора WDT 001 32K тактов генератора WDT 010 64K тактов генератора WDT 011 128K тактов генератора WDT 100 256K тактов генератора WDT 101 512K тактов генератора WDT 110 1024K тактов генератора WDT 111 2048K тактов генератора WDT
SFIOR — специальные функции ввода-вывода
Адрес 0x50 (I/O 0x30), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | ADTS2 | ADTS1 | ADTS0 | — | ACME | PUD | PSR2 | PSR10 |
| Доступ | R/W | R/W | R/W | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- PUD (бит 2) — Запрет подтяжек всех портов.
- PSR2 (бит 1) — Сброс предделителя таймера 2.
- PSR10 (бит 0) — Сброс предделителя таймеров 1 и 0.
Остальные биты регистра относятся к другим блокам: ADTS2:0 — источник автозапуска ацп (ADC), ACME — вход компаратора от мультиплексора ацп (AC).
OSCCAL — калибровка RC-генератора
Адрес 0x51 (I/O 0x31), 8 бит.
Регистр данных: все восемь битов — одно число.
OCDR — регистр внутрисхемной отладки (OCD)
Адрес 0x51 (I/O 0x31), 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
MCUCSR — причина сброса и управление микроконтроллером
Адрес 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 |
- JTD (бит 7) — Отключить интерфейс JTAG.
- JTD (бит 7) — Отключить интерфейс JTAG.
- JTRF (бит 4) — Сброс командой AVR_RESET через JTAG.
- JTRF (бит 4) — Сброс командой AVR_RESET через JTAG.
- WDRF (бит 3) — Сброс сторожевым таймером.
- BORF (бит 2) — Сброс детектором пониженного питания.
- EXTRF (бит 1) — Внешний сброс по выводу RESET.
- PORF (бит 0) — Сброс при включении питания.
Остальные биты регистра относятся к другим блокам: ISC2 — условие срабатывания int2 (EXINT).
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 |
- SM2:0 (биты 7, 5, 4) — Режим сна.
SM2:0 Значение 000 Idle 001 ADC Noise Reduction (подавление шума АЦП) 010 Power-down 011 Power-save 1000 Зарезервировано 1001 Зарезервировано 1010 Standby 1011 Extended Standby - SE (бит 6) — Разрешение сна (команда SLEEP).
- ISC11:0 (биты 3:2) — Условие срабатывания INT1.
ISC11:0 Значение 00 Низкий уровень 01 Любое изменение 10 Спад 11 Фронт - ISC01:0 (биты 1:0) — Условие срабатывания INT0.
ISC01:0 Значение 00 Низкий уровень 01 Любое изменение 10 Спад 11 Фронт
SPMCSR — самопрограммирование (SPM)
Адрес 0x57 (I/O 0x37), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | SPMIE | RWWSB | — | RWWSRE | BLBSET | PGWRT | PGERS | SPMEN |
- SPMIE (бит 7) — Прерывание «SPM готова».
- RWWSB (бит 6) — Область RWW занята.
- RWWSRE (бит 4) — Разрешение чтения области RWW.
- BLBSET (бит 3) — Запись битов защиты загрузчика.
- PGWRT (бит 2) — Запись страницы.
- PGERS (бит 1) — Стирание страницы.
- SPMEN (бит 0) — Разрешение команды SPM.
SP — указатель стека
Адрес 0x5D (I/O 0x3D), 16 бит: старший байт SPH по адресу 0x5E, младший SPL по 0x5D, после сброса 0x0000.
SREG — регистр состояния
Адрес 0x5F (I/O 0x3F), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | I | T | H | S | V | N | Z | C |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- I (бит 7) — Глобальное разрешение прерываний.
- T (бит 6) — Бит копирования (команды BST и BLD).
- H (бит 5) — Флаг полупереноса.
- S (бит 4) — Флаг знака, S = N ⊕ V.
- V (бит 3) — Флаг переполнения дополнительного кода.
- N (бит 2) — Флаг отрицательного результата.
- Z (бит 1) — Флаг нулевого результата.
- C (бит 0) — Флаг переноса.
Частые вопросы
Какими командами ассемблера обращаться к регистрам CPU ATmega16A?
Командами IN и OUT доступны WDTCR (0x21), SFIOR (0x30), OSCCAL (0x31), OCDR (0x31), MCUCSR (0x34), MCUCR (0x35), SPMCSR (0x37), SPL и SPH (0x3D и 0x3E) и SREG (0x3F). В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.
Какие значения у регистров CPU после сброса?
Все регистры блока, для которых даташит 8154C приводит значение после сброса (WDTCR, SFIOR, OCDR, MCUCR, SP и SREG), после сброса равны нулю.
Как установить биты SREG на C?
Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: SREG = (1 << I) | (1 << T); записывает новое значение целиком, а SREG |= (1 << I); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- 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
- Внешние прерыванияMCUCSR, MCUCR, GIFR, GICR
- EEPROMEECR, EEDR, EEAR
- Таймер-счётчик 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