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

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

Регистры ядра и системы: регистр состояния SREG, указатель стека SP, режимы сна (SMCR), причина последнего сброса (MCUSR), управление микроконтроллером (MCUCR), делитель тактовой частоты (CLKPR), отключение тактирования модулей (PRR0 и PRR1), калибровка RC-генератора (OSCCAL), самопрограммирование (SPMCSR), расширение адресов (RAMPZ), регистр отладки OCDR, переключение источника тактирования на ходу (CLKSEL0, CLKSEL1, CLKSTA), частота RC-генератора (RCCTRL) и сторожевой таймер (WDTCSR).

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

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

РегистрАдресНазначениеПосле сброса
GPIOR00x3E (I/O 0x1E)Регистр общего назначения 00x00
GPIOR10x4A (I/O 0x2A)Регистр общего назначения 10x00
GPIOR20x4B (I/O 0x2B)Регистр общего назначения 20x00
OCDR0x51 (I/O 0x31)Регистр внутрисхемной отладки (OCD)0x00
SMCR0x53 (I/O 0x33)Режим сна0x00
MCUSR0x54 (I/O 0x34)Причина сброса—
MCUCR0x55 (I/O 0x35)Управление микроконтроллером0x00
SPMCSR0x57 (I/O 0x37)Самопрограммирование (SPM)0x00
RAMPZ0x5B (I/O 0x3B)Старшие биты адреса Z для ELPM и SPM0x00
SP0x5D (I/O 0x3D)Указатель стека0x20FF
SREG0x5F (I/O 0x3F)Регистр состояния0x00
WDTCSR0x60Управление сторожевым таймером—
CLKPR0x61Делитель тактовой частоты—
PRR00x64Отключение тактирования модулей, регистр 0—
PRR10x65Отключение тактирования модулей, регистр 1—
OSCCAL0x66Калибровка RC-генератора—
RCCTRL0x67Частота внутреннего RC-генератора0x00
CLKSEL00xC5Выбор источника тактирования, регистр 0—
CLKSEL10xC6Выбор источника тактирования, регистр 10x20
CLKSTA0xC7Состояние генераторов—

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

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

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

Результат

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

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

SMCR = 0;

Ассемблер Microchip (m32u4def.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.

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

OCDR — регистр внутрисхемной отладки (OCD)

Адрес 0x51 (I/O 0x31), 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
Имя——USBRFJTRFWDRFBORFEXTRFPORF
ДоступRRRR/WR/WR/WR/WR/W
  • USBRF (бит 5) — Сброс от USB.
  • JTRF (бит 4) — Сброс командой AVR_RESET через JTAG.
  • JTRF (бит 4) — Сброс командой AVR_RESET через JTAG.
  • WDRF (бит 3) — Сброс сторожевым таймером.
  • BORF (бит 2) — Сброс детектором пониженного питания.
  • EXTRF (бит 1) — Внешний сброс по выводу RESET.
  • PORF (бит 0) — Сброс при включении питания.

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

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

Бит76543210
ИмяJTD——PUD——IVSELIVCE
ДоступR/WRRR/WRRR/WR/W
После сброса00000000
  • JTD (бит 7) — Отключить интерфейс JTAG.
  • JTD (бит 7) — Отключить интерфейс JTAG.
  • 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.

RAMPZ — старшие биты адреса Z для ELPM и SPM

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

Бит76543210
Имя——————RAMPZ1RAMPZ0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • RAMPZ1:0 (биты 1:0) — Старшие биты адреса Z.
    RAMPZ1:0Значение
    00Значение по умолчанию

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

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

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

PRR0 — отключение тактирования модулей, регистр 0

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

Бит76543210
ИмяPRTWI—PRTIM0—PRTIM1PRSPI—PRADC
  • PRTWI (бит 7) — Отключить тактирование TWI.
  • PRTIM0 (бит 5) — Отключить тактирование таймера 0.
  • PRTIM1 (бит 3) — Отключить тактирование таймера 1.
  • PRSPI (бит 2) — Отключить тактирование SPI.
  • PRADC (бит 0) — Отключить тактирование АЦП.

PRR1 — отключение тактирования модулей, регистр 1

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

Бит76543210
ИмяPRUSB——PRTIM4PRTIM3——PRUSART1
  • PRUSB (бит 7) — Отключить тактирование USB.
  • PRTIM4 (бит 4) — Отключить тактирование таймера 4.
  • PRTIM3 (бит 3) — Отключить тактирование таймера 3.
  • PRUSART1 (бит 0) — Отключить тактирование USART1.

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

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

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

RCCTRL — частота внутреннего RC-генератора

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

Бит76543210
Имя———————RCFREQ
ДоступRRRRRRRR/W
После сброса00000000
  • RCFREQ (бит 0) — Частота RC-генератора: 0 — 8 МГц, 1 — 1 МГц.

CLKSEL0 — выбор источника тактирования, регистр 0

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

Бит76543210
ИмяRCSUT1RCSUT0EXSUT1EXSUT0RCEEXTE—CLKS
ДоступR/WR/WR/WR/WR/WR/WRR/W
  • RCSUT1:0 (биты 7:6) — Время запуска RC-генератора.
  • EXSUT1:0 (биты 5:4) — Время запуска внешнего генератора.
  • RCE (бит 3) — RC-генератор включён.
  • EXTE (бит 2) — Внешний генератор включён.
  • CLKS (бит 0) — Тактирование ядра: 0 — RC-генератор, 1 — внешний.

CLKSEL1 — выбор источника тактирования, регистр 1

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

Бит76543210
ИмяRCCKSEL3RCCKSEL2RCCKSEL1RCCKSEL0EXCKSEL3EXCKSEL2EXCKSEL1EXCKSEL0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00100000
  • RCCKSEL3:0 (биты 7:4) — Режим RC-генератора (как CKSEL).
  • EXCKSEL3:0 (биты 3:0) — Режим внешнего генератора (как CKSEL).

CLKSTA — состояние генераторов

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

Бит76543210
Имя——————RCONEXTON
ДоступRRRRRRRR
  • RCON (бит 1) — RC-генератор запущен.
  • EXTON (бит 0) — Внешний генератор запущен.

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

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

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

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

После сброса SP = 0x20FF и CLKSEL1 = 0x20; остальные регистры блока обнулены. Значения — из диаграмм регистров в даташите 7766J.

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

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

Источники

  1. Microchip. Atmel. ATmega16U4/32U4 datasheet (7766J) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega32U4 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

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

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