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

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

Регистры ядра и системы: регистр состояния SREG, указатель стека SP, режимы сна (SMCR), причина последнего сброса (MCUSR), управление микроконтроллером (MCUCR), делитель тактовой частоты (CLKPR), отключение тактирования модулей (PRR), калибровка RC-генератора (OSCCAL), самопрограммирование (SPMCSR) и сторожевой таймер (WDTCSR).

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

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

РегистрАдресНазначениеПосле сброса
GPIOR00x3E (I/O 0x1E)Регистр общего назначения 00x00
GPIOR10x4A (I/O 0x2A)Регистр общего назначения 10x00
GPIOR20x4B (I/O 0x2B)Регистр общего назначения 20x00
SMCR0x53 (I/O 0x33)Режим сна0x00
MCUSR0x54 (I/O 0x34)Причина сброса—
MCUCR0x55 (I/O 0x35)Управление микроконтроллером0x00
SPMCSR0x57 (I/O 0x37)Самопрограммирование (SPM)0x00
SP0x5D (I/O 0x3D)Указатель стека—
SREG0x5F (I/O 0x3F)Регистр состояния0x00
WDTCSR0x60Управление сторожевым таймером—
CLKPR0x61Делитель тактовой частоты—
PRR0x64Отключение тактирования модулей0x00
OSCCAL0x66Калибровка RC-генератора—

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

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

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

Результат

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

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

SMCR = 0;

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

ldi r16, 0x00
out SMCR, r16

GPIOR0 — регистр общего назначения 0

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

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

GPIOR1 — регистр общего назначения 1

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

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

GPIOR2 — регистр общего назначения 2

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

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

SMCR — режим сна

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

Бит76543210
Имя————SM2SM1SM0SE
ДоступRRRRR/WR/WR/WR/W
После сброса00000000
  • SM2:0 (биты 3:1) — Режим сна.
    SM2:0Значение
    000Idle
    001ADC Noise Reduction (подавление шума АЦП)
    010Power-down
    011Power-save
    100Зарезервировано
    101Зарезервировано
    110Standby
    111Extended Standby
  • SE (бит 0) — Разрешение сна (команда SLEEP).

MCUSR — причина сброса

Адрес 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
Имя—BODSBODSEPUD——IVSELIVCE
ДоступRR/WR/WR/WRRR/WR/W
После сброса00000000
  • BODS (бит 6) — Выключить BOD на время сна. Запись: BODS = 1 и BODSE = 1, затем в течение четырёх тактов BODS = 1 при BODSE = 0. BODS сам сбрасывается через три такта — команда SLEEP должна выполниться раньше.
  • BODSE (бит 5) — Разрешение изменения BODS.
  • PUD (бит 4) — Запрет подтяжек всех портов.
  • IVSEL (бит 1) — Векторы прерываний в загрузочной области.
  • IVCE (бит 0) — Разрешение изменения IVSEL. Изменение IVSEL: записать IVCE = 1, затем в течение четырёх тактов — новое IVSEL при IVCE = 0.

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

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

Бит76543210
ИмяSPMIERWWSBSIGRDRWWSREBLBSETPGWRTPGERSSPMEN
ДоступR/WRR/WR/WR/WR/WR/WR/W
После сброса00000000
  • SPMIE (бит 7) — Прерывание «SPM готова».
  • RWWSB (бит 6) — Область RWW занята.
  • SIGRD (бит 5) — Чтение строки сигнатуры.
  • RWWSRE (бит 4) — Разрешение чтения области RWW.
  • BLBSET (бит 3) — Запись битов защиты загрузчика.
  • PGWRT (бит 2) — Запись страницы.
  • PGERS (бит 1) — Стирание страницы.
  • SPMEN (бит 0) — Разрешение команды SPM.

SP — указатель стека

Адрес 0x5D (I/O 0x3D), 16 бит: старший байт SPH по адресу 0x5E, младший SPL по 0x5D.

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) — Флаг переноса.

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

Адрес 0x60, 8 бит.

Бит76543210
ИмяWDIFWDIEWDP3WDCEWDEWDP2WDP1WDP0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса0000X000
  • WDIF (бит 7) — Флаг прерывания сторожевого таймера. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • WDIE (бит 6) — Прерывание сторожевого таймера.
  • WDP3:0 (биты 5, 2, 1, 0) — Период сторожевого таймера.
    WDP3:0Значение
    00002K тактов генератора WDT
    00014K тактов генератора WDT
    00108K тактов генератора WDT
    001116K тактов генератора WDT
    010032K тактов генератора WDT
    010164K тактов генератора WDT
    0110128K тактов генератора WDT
    0111256K тактов генератора WDT
    1000512K тактов генератора WDT
    10011024K тактов генератора WDT
  • WDCE (бит 4) — Разрешение изменения настроек. Изменение настроек: записать WDCE = 1 вместе с WDE = 1, затем в течение четырёх тактов — новые WDE и WDP при WDCE = 0.
  • WDE (бит 3) — Сброс по сторожевому таймеру.

CLKPR — делитель тактовой частоты

Адрес 0x61, 8 бит.

Бит76543210
ИмяCLKPCE———CLKPS3CLKPS2CLKPS1CLKPS0
ДоступR/WRRRR/WR/WR/WR/W
  • CLKPCE (бит 7) — Разрешение изменения делителя. Изменение делителя: записать CLKPCE = 1 при нулевых CLKPS, затем в течение четырёх тактов — новое CLKPS при CLKPCE = 0.
  • CLKPS3:0 (биты 3:0) — Делитель тактовой частоты.
    CLKPS3:0Значение
    0000Деление на 1
    0001Деление на 2
    0010Деление на 4
    0011Деление на 8
    0100Деление на 16
    0101Деление на 32
    0110Деление на 64
    0111Деление на 128
    1000Деление на 256

PRR — отключение тактирования модулей

Адрес 0x64, 8 бит, после сброса 0x00.

Бит76543210
ИмяPRTWIPRTIM2PRTIM0—PRTIM1PRSPIPRUSART0PRADC
ДоступR/WR/WR/WRR/WR/WR/WR/W
После сброса00000000
  • PRTWI (бит 7) — Отключить тактирование TWI.
  • PRTIM2 (бит 6) — Отключить тактирование таймера 2.
  • PRTIM0 (бит 5) — Отключить тактирование таймера 0.
  • PRTIM1 (бит 3) — Отключить тактирование таймера 1.
  • PRSPI (бит 2) — Отключить тактирование SPI.
  • PRUSART0 (бит 1) — Отключить тактирование USART0.
  • PRADC (бит 0) — Отключить тактирование АЦП.

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

Адрес 0x66, 8 бит.

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

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

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

Командами IN и OUT доступны GPIOR0 (0x1E), GPIOR1 (0x2A), GPIOR2 (0x2B), SMCR (0x33), MCUSR (0x34), MCUCR (0x35), SPMCSR (0x37), SPL и SPH (0x3D и 0x3E) и SREG (0x3F); из них GPIOR0 — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. WDTCSR, CLKPR, PRR и OSCCAL лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

Все регистры блока, для которых даташит DS40002061B приводит значение после сброса (GPIOR0, GPIOR1, GPIOR2, SMCR, MCUCR, SPMCSR, SREG и PRR), после сброса равны нулю.

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

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

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

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

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