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

Ядро и системные регистры ATmega16A: регистры и биты

Регистры ядра и системы: регистр состояния SREG, указатель стека SP, режимы сна (биты SE и SM в MCUCR), причина последнего сброса (MCUCSR), управление микроконтроллером (MCUCR), калибровка RC-генератора (OSCCAL), самопрограммирование (SPMCSR), регистр отладки OCDR и сторожевой таймер (WDTCR).

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

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

РегистрАдресНазначениеПосле сброса
WDTCR0x41 (I/O 0x21)Управление сторожевым таймером0x00
SFIOR0x50 (I/O 0x30)Специальные функции ввода-вывода0x00
OSCCAL0x51 (I/O 0x31)Калибровка RC-генератора—
OCDR0x51 (I/O 0x31)Регистр внутрисхемной отладки (OCD)0x00
MCUCSR0x54 (I/O 0x34)Причина сброса и управление микроконтроллером—
MCUCR0x55 (I/O 0x35)Управление микроконтроллером0x00
SPMCSR0x57 (I/O 0x37)Самопрограммирование (SPM)—
SP0x5D (I/O 0x3D)Указатель стека0x0000
SREG0x5F (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, r16

WDTCR — управление сторожевым таймером

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

Бит76543210
Имя———WDTOEWDEWDP2WDP1WDP0
ДоступRRRR/WR/WR/WR/WR/W
После сброса00000000
  • WDTOE (бит 4) — Разрешение выключения сторожевого таймера.
  • WDE (бит 3) — Сброс по сторожевому таймеру.
  • WDP2:0 (биты 2:0) — Период сторожевого таймера.
    WDP2:0Значение
    00016K тактов генератора WDT
    00132K тактов генератора WDT
    01064K тактов генератора WDT
    011128K тактов генератора WDT
    100256K тактов генератора WDT
    101512K тактов генератора WDT
    1101024K тактов генератора WDT
    1112048K тактов генератора WDT

SFIOR — специальные функции ввода-вывода

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

Бит76543210
ИмяADTS2ADTS1ADTS0—ACMEPUDPSR2PSR10
ДоступR/WR/WR/WRR/WR/WR/WR/W
После сброса00000000
  • 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 бит.

Бит76543210
ИмяJTDISC2—JTRFWDRFBORFEXTRFPORF
ДоступR/WR/WRR/WR/WR/WR/WR/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.

Бит76543210
ИмяSM2SESM1SM0ISC11ISC10ISC01ISC00
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • SM2:0 (биты 7, 5, 4) — Режим сна.
    SM2:0Значение
    000Idle
    001ADC Noise Reduction (подавление шума АЦП)
    010Power-down
    011Power-save
    1000Зарезервировано
    1001Зарезервировано
    1010Standby
    1011Extended 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 бит.

Бит76543210
ИмяSPMIERWWSB—RWWSREBLBSETPGWRTPGERSSPMEN
  • 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.

Бит76543210
ИмяITHSVNZC
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • 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); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.

Источники

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

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

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

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