Ядро и системные регистры ATmega2560: регистры и биты
Регистры ядра и системы: регистр состояния SREG, указатель стека SP, режимы сна (SMCR), причина последнего сброса (MCUSR), управление микроконтроллером (MCUCR), делитель тактовой частоты (CLKPR), отключение тактирования модулей (PRR0 и PRR1), калибровка RC-генератора (OSCCAL), самопрограммирование (SPMCSR), расширение адресов (RAMPZ, EIND), интерфейс внешней памяти (XMCRA, XMCRB), регистр отладки OCDR и сторожевой таймер (WDTCSR).
Данные: описание ATmega2560 из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита 2549Q.
Регистры блока
| Регистр | Адрес | Назначение | После сброса |
|---|---|---|---|
| GPIOR0 | 0x3E (I/O 0x1E) | Регистр общего назначения 0 | 0x00 |
| GPIOR1 | 0x4A (I/O 0x2A) | Регистр общего назначения 1 | 0x00 |
| GPIOR2 | 0x4B (I/O 0x2B) | Регистр общего назначения 2 | 0x00 |
| OCDR | 0x51 (I/O 0x31) | Регистр внутрисхемной отладки (OCD) | 0x00 |
| SMCR | 0x53 (I/O 0x33) | Режим сна | 0x00 |
| MCUSR | 0x54 (I/O 0x34) | Причина сброса | — |
| MCUCR | 0x55 (I/O 0x35) | Управление микроконтроллером | 0x00 |
| SPMCSR | 0x57 (I/O 0x37) | Самопрограммирование (SPM) | 0x00 |
| RAMPZ | 0x5B (I/O 0x3B) | Старшие биты адреса Z для ELPM и SPM | 0x00 |
| EIND | 0x5C (I/O 0x3C) | Старшие биты адреса для EICALL и EIJMP | 0x00 |
| SP | 0x5D (I/O 0x3D) | Указатель стека | 0x21FF |
| SREG | 0x5F (I/O 0x3F) | Регистр состояния | 0x00 |
| WDTCSR | 0x60 | Управление сторожевым таймером | — |
| CLKPR | 0x61 | Делитель тактовой частоты | — |
| PRR0 | 0x64 | Отключение тактирования модулей, регистр 0 | 0x00 |
| PRR1 | 0x65 | Отключение тактирования модулей, регистр 1 | 0x00 |
| OSCCAL | 0x66 | Калибровка RC-генератора | — |
| XMCRA | 0x74 | Интерфейс внешней памяти, регистр A | 0x00 |
| XMCRB | 0x75 | Интерфейс внешней памяти, регистр B | 0x00 |
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
SMCR = 0;Ассемблер Microchip (m2560def.inc)
ldi r16, 0x00
out SMCR, r16GPIOR0 — регистр общего назначения 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | OCDR7 | OCDR6 | OCDR5 | OCDR4 | OCDR3 | OCDR2 | OCDR1 | OCDR0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр данных: все восемь битов — одно число.
SMCR — режим сна
Адрес 0x53 (I/O 0x33), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | SM2 | SM1 | SM0 | SE |
| Доступ | R | R | R | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- SM2:0 (биты 3:1) — Режим сна.
SM2:0 Значение 000 Idle 001 ADC Noise Reduction (подавление шума АЦП) 010 Power-down 011 Power-save 100 Зарезервировано 101 Зарезервировано 110 Standby 111 Extended Standby - SE (бит 0) — Разрешение сна (команда SLEEP).
MCUSR — причина сброса
Адрес 0x54 (I/O 0x34), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | JTRF | WDRF | BORF | EXTRF | PORF |
- 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | JTD | — | — | PUD | — | — | IVSEL | IVCE |
| Доступ | R/W | R | R | R/W | R | R | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | SPMIE | RWWSB | SIGRD | RWWSRE | BLBSET | PGWRT | PGERS | SPMEN |
| Доступ | R/W | R | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | — | RAMPZ1 | RAMPZ0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр данных: все восемь битов — одно число.
EIND — старшие биты адреса для EICALL и EIJMP
Адрес 0x5C (I/O 0x3C), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | — | — | EIND0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр данных: все восемь битов — одно число.
SP — указатель стека
Адрес 0x5D (I/O 0x3D), 16 бит: старший байт SPH по адресу 0x5E, младший SPL по 0x5D, после сброса 0x21FF.
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) — Флаг переноса.
WDTCSR — управление сторожевым таймером
Адрес 0x60, 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | WDIF | WDIE | WDP3 | WDCE | WDE | WDP2 | WDP1 | WDP0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
- WDIF (бит 7) — Флаг прерывания сторожевого таймера. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- WDIE (бит 6) — Прерывание сторожевого таймера.
- WDP3:0 (биты 5, 2, 1, 0) — Период сторожевого таймера.
WDP3:0 Значение 0000 2K тактов генератора WDT 0001 4K тактов генератора WDT 0010 8K тактов генератора WDT 0011 16K тактов генератора WDT 0100 32K тактов генератора WDT 0101 64K тактов генератора WDT 0110 128K тактов генератора WDT 0111 256K тактов генератора WDT 1000 512K тактов генератора WDT 1001 1024K тактов генератора WDT - WDCE (бит 4) — Разрешение изменения настроек. Изменение настроек: записать WDCE = 1 вместе с WDE = 1, затем в течение четырёх тактов — новые WDE и WDP при WDCE = 0.
- WDE (бит 3) — Сброс по сторожевому таймеру.
CLKPR — делитель тактовой частоты
Адрес 0x61, 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | CLKPCE | — | — | — | CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 |
| Доступ | R/W | R | R | R | R/W | R/W | R/W | R/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 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | PRTWI | PRTIM2 | PRTIM0 | — | PRTIM1 | PRSPI | PRUSART0 | PRADC |
| Доступ | R/W | R/W | R/W | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- PRTWI (бит 7) — Отключить тактирование TWI.
- PRTIM2 (бит 6) — Отключить тактирование таймера 2.
- PRTIM0 (бит 5) — Отключить тактирование таймера 0.
- PRTIM1 (бит 3) — Отключить тактирование таймера 1.
- PRSPI (бит 2) — Отключить тактирование SPI.
- PRUSART0 (бит 1) — Отключить тактирование USART0.
- PRADC (бит 0) — Отключить тактирование АЦП.
PRR1 — отключение тактирования модулей, регистр 1
Адрес 0x65, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | PRTIM5 | PRTIM4 | PRTIM3 | PRUSART3 | PRUSART2 | PRUSART1 |
| Доступ | R | R | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- PRTIM5 (бит 5) — Отключить тактирование таймера 5.
- PRTIM4 (бит 4) — Отключить тактирование таймера 4.
- PRTIM3 (бит 3) — Отключить тактирование таймера 3.
- PRUSART3 (бит 2) — Отключить тактирование USART3.
- PRUSART2 (бит 1) — Отключить тактирование USART2.
- PRUSART1 (бит 0) — Отключить тактирование USART1.
OSCCAL — калибровка RC-генератора
Адрес 0x66, 8 бит.
Регистр данных: все восемь битов — одно число.
XMCRA — интерфейс внешней памяти, регистр A
Адрес 0x74, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | SRE | SRL2 | SRL1 | SRL0 | SRW11 | SRW10 | SRW01 | SRW00 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- SRE (бит 7) — Интерфейс внешней памяти включён.
- SRL2:0 (биты 6:4) — Граница нижнего и верхнего секторов внешней памяти.
SRL2:0 Значение 000 Нижнего сектора нет, верхний 0x2200–0xFFFF 001 Нижнего сектора нет, верхний 0x2200–0xFFFF 010 Нижний сектор 0x2200–0x3FFF, верхний 0x4000–0xFFFF 011 Нижний сектор 0x2200–0x5FFF, верхний 0x6000–0xFFFF 100 Нижний сектор 0x2200–0x7FFF, верхний 0x8000–0xFFFF 101 Нижний сектор 0x2200–0x9FFF, верхний 0xA000–0xFFFF 110 Нижний сектор 0x2200–0xBFFF, верхний 0xC000–0xFFFF 111 Нижний сектор 0x2200–0xDFFF, верхний 0xE000–0xFFFF - SRW11:0 (биты 3:2) — Такты ожидания верхнего сектора.
SRW11:0 Значение 00 Без тактов ожидания 01 1 такт ожидания на стробе чтения и записи 10 2 такта ожидания на стробе чтения и записи 11 2 такта на стробе и 1 такт перед выдачей нового адреса - SRW01:0 (биты 1:0) — Такты ожидания нижнего сектора.
SRW01:0 Значение 00 Без тактов ожидания 01 1 такт ожидания на стробе чтения и записи 10 2 такта ожидания на стробе чтения и записи 11 2 такта на стробе и 1 такт перед выдачей нового адреса
XMCRB — интерфейс внешней памяти, регистр B
Адрес 0x75, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | XMBK | — | — | — | — | XMM2 | XMM1 | XMM0 |
| Доступ | R/W | R | R | R | R | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- XMBK (бит 7) — Удержание уровней на шине данных (bus keeper).
- XMM2:0 (биты 2:0) — Освобождение старших выводов адреса в порте C.
Частые вопросы
Какими командами ассемблера обращаться к регистрам CPU ATmega2560?
Командами IN и OUT доступны GPIOR0 (0x1E), GPIOR1 (0x2A), GPIOR2 (0x2B), OCDR (0x31), SMCR (0x33), MCUSR (0x34), MCUCR (0x35), SPMCSR (0x37), RAMPZ (0x3B), EIND (0x3C), SPL и SPH (0x3D и 0x3E) и SREG (0x3F); из них GPIOR0 — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. WDTCSR, CLKPR, PRR0, PRR1, OSCCAL, XMCRA и XMCRB лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.
Какие значения у регистров CPU после сброса?
После сброса SP = 0x21FF; остальные регистры блока обнулены. Значения — из диаграмм регистров в даташите 2549Q.
Как установить биты SREG на C?
Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: SREG = (1 << I) | (1 << T); записывает новое значение целиком, а SREG |= (1 << I); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. Atmel. ATmega640/V-1280/V-1281/V-2560/V-2561/V datasheet (2549Q) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega2560 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATmega2560
- Все регистры ATmega2560Таблица по адресам
- Аналоговый компараторACSR, ADCSRB, DIDR1
- USART0–USART3UCSR0A, UCSR0B, UCSR0C, UBRR0, UDR0, UCSR1A
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR, TWAMR
- SPISPCR, SPSR, SPDR
- Порты ввода-выводаPINA, DDRA, PORTA, PINB, DDRB, PORTB
- Таймер-счётчик 0 (8 бит)TIFR0, GTCCR, TCCR0A, TCCR0B, TCNT0, OCR0A
- Таймер-счётчик 2 (8 бит, асинхронный)TIFR2, GTCCR, TIMSK2, TCCR2A, TCCR2B, TCNT2
- EEPROMEECR, EEDR, EEAR
- Таймеры-счётчики 1, 3, 4 и 5 (16 бит)TIFR1, TIMSK1, TCCR1A, TCCR1B, TCCR1C, TCNT1
- Внешние прерыванияPCIFR, EIFR, EIMSK, PCICR, EICRA, EICRB
- АЦПADC, ADCSRA, ADCSRB, ADMUX, DIDR2, DIDR0