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

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

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

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

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

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

ldi r16, 0x00
out MCUCR, r16

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

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

Бит76543210
Имя———WDCEWDEWDP2WDP1WDP0
ДоступRRRR/WR/WR/WR/WR/W
После сброса00000000
  • WDCE (бит 4) — Разрешение изменения настроек. Изменение настроек: записать WDCE = 1 вместе с WDE = 1, затем в течение четырёх тактов — новые WDE и WDP при WDCE = 0.
  • 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
Имя————ACMEPUDPSR2PSR10
ДоступRRRRR/WR/WR/WR/W
После сброса00000000
  • PUD (бит 2) — Запрет подтяжек всех портов.
  • PSR10 (бит 0) — Сброс предделителя таймеров 1 и 0.

Остальные биты регистра относятся к другим блокам: ACME — вход компаратора от мультиплексора ацп (AC), PSR2 — сброс предделителя таймера 2 (TC2).

OSCCAL — калибровка RC-генератора

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

Регистр данных: все восемь битов — одно число.

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

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

Бит76543210
Имя————WDRFBORFEXTRFPORF
ДоступRRRRR/WR/WR/WR/W
  • WDRF (бит 3) — Сброс сторожевым таймером.
  • BORF (бит 2) — Сброс детектором пониженного питания.
  • EXTRF (бит 1) — Внешний сброс по выводу RESET.
  • PORF (бит 0) — Сброс при включении питания.

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

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

Бит76543210
ИмяSESM2SM1SM0ISC11ISC10ISC01ISC00
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • SE (бит 7) — Разрешение сна (команда SLEEP).
  • SM2:0 (биты 6:4) — Режим сна.
    SM2:0Значение
    000Idle
    001ADC Noise Reduction (подавление шума АЦП)
    010Power-down
    011Power-save
    100Зарезервировано
    101Зарезервировано
    110Standby
    111Зарезервировано
  • ISC11:0 (биты 3:2) — Условие срабатывания INT1.
    ISC11:0Значение
    00Низкий уровень
    01Любое изменение
    10Спад
    11Фронт
  • ISC01:0 (биты 1:0) — Условие срабатывания INT0.
    ISC01:0Значение
    00Низкий уровень
    01Любое изменение
    10Спад
    11Фронт

SPMCR — самопрограммирование (SPM)

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

Бит76543210
ИмяSPMIERWWSB—RWWSREBLBSETPGWRTPGERSSPMEN
ДоступR/WRRR/WR/WR/WR/WR/W
После сброса00000000
  • 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 ATmega8?

Командами IN и OUT доступны WDTCR (0x21), SFIOR (0x30), OSCCAL (0x31), MCUCSR (0x34), MCUCR (0x35), SPMCR (0x37), SPL и SPH (0x3D и 0x3E) и SREG (0x3F). В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

Все регистры блока, для которых даташит 2486AA приводит значение после сброса (WDTCR, SFIOR, MCUCR, SPMCR, SP и SREG), после сброса равны нулю.

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

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

Источники

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

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

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

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