Ядро и системные регистры ATtiny2313A: регистры и биты
Регистры ядра и системы: регистр состояния SREG, указатель стека SPL, режимы сна (биты SE и SM в MCUCR), причина последнего сброса (MCUSR), управление микроконтроллером (MCUCR), делитель тактовой частоты (CLKPR), отключение тактирования модулей (PRR), калибровка RC-генератора (OSCCAL), самопрограммирование (SPMCSR), отключение BOD на время сна (BODCR) и сторожевой таймер (WDTCR).
Данные: описание ATtiny2313A из пакета Microchip ATtiny_DFP 3.4.278 (Apache-2.0), сверено со сводкой регистров даташита 8246B.
Регистры блока
| Регистр | Адрес | Назначение | После сброса |
|---|---|---|---|
| PRR | 0x26 (I/O 0x06) | Отключение тактирования модулей | 0x00 |
| BODCR | 0x27 (I/O 0x07) | Отключение BOD на время сна | 0x00 |
| GPIOR0 | 0x33 (I/O 0x13) | Регистр общего назначения 0 | 0x00 |
| GPIOR1 | 0x34 (I/O 0x14) | Регистр общего назначения 1 | 0x00 |
| GPIOR2 | 0x35 (I/O 0x15) | Регистр общего назначения 2 | 0x00 |
| WDTCR | 0x41 (I/O 0x21) | Управление сторожевым таймером | — |
| GTCCR | 0x43 (I/O 0x23) | Общее управление таймерами | 0x00 |
| CLKPR | 0x46 (I/O 0x26) | Делитель тактовой частоты | — |
| OSCCAL | 0x51 (I/O 0x31) | Калибровка RC-генератора | — |
| MCUSR | 0x54 (I/O 0x34) | Причина сброса | — |
| MCUCR | 0x55 (I/O 0x35) | Управление микроконтроллером | 0x00 |
| SPMCSR | 0x57 (I/O 0x37) | Самопрограммирование (SPM) | 0x00 |
| SPL | 0x5D (I/O 0x3D) | Указатель стека | — |
| SREG | 0x5F (I/O 0x3F) | Регистр состояния | 0x00 |
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
CLKPR = 0;Ассемблер Microchip (tn2313adef.inc)
ldi r16, 0x00
out CLKPR, r16PRR — отключение тактирования модулей
Адрес 0x26 (I/O 0x06), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | PRTIM1 | PRTIM0 | PRUSI | PRUSART |
| Доступ | R | R | R | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- PRTIM1:0 (биты 3:2) — Отключить тактирование таймеров.
- PRUSI (бит 1) — Отключить тактирование USI.
- PRUSART (бит 0) — Отключить тактирование USARTundefined.
BODCR — отключение BOD на время сна
Адрес 0x27 (I/O 0x07), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | — | BPDS / BODS | BPDSE / BODSE |
| Доступ | R | R | R | R | R | R | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- BPDS (бит 1) — Выключить BOD на время сна.
- BPDSE (бит 0) — Разрешение изменения BODS.
GPIOR0 — регистр общего назначения 0
Адрес 0x33 (I/O 0x13), 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
GPIOR1 — регистр общего назначения 1
Адрес 0x34 (I/O 0x14), 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
GPIOR2 — регистр общего назначения 2
Адрес 0x35 (I/O 0x15), 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
WDTCR — управление сторожевым таймером
Адрес 0x41 (I/O 0x21), 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) — Сброс по сторожевому таймеру.
GTCCR — общее управление таймерами
Адрес 0x43 (I/O 0x23), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | — | — | PSR10 |
| Доступ | R | R | R | R | R | R | R | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- PSR10 (бит 0) — Сброс предделителя таймеров 1 и 0.
CLKPR — делитель тактовой частоты
Адрес 0x46 (I/O 0x26), 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
OSCCAL — калибровка RC-генератора
Адрес 0x51 (I/O 0x31), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 |
| Доступ | R | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
Регистр данных: все восемь битов — одно число.
MCUSR — причина сброса
Адрес 0x54 (I/O 0x34), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | WDRF | BORF | EXTRF | PORF |
| Доступ | R | R | R | R | R/W | R/W | R/W | R/W |
- WDRF (бит 3) — Сброс сторожевым таймером.
- BORF (бит 2) — Сброс детектором пониженного питания.
- EXTRF (бит 1) — Внешний сброс по выводу RESET.
- PORF (бит 0) — Сброс при включении питания.
MCUCR — управление микроконтроллером
Адрес 0x55 (I/O 0x35), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | PUD | SM1 | SE | SM0 | ISC11 | ISC10 | ISC01 | ISC00 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- PUD (бит 7) — Запрет подтяжек всех портов.
- SM1:0 (биты 6, 4) — Режим сна.
SM1:0 Значение 00 Idle 01 Power-down 100 Standby 101 Power-down - SE (бит 5) — Разрешение сна (команда 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 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | RSIG | CTPB | RFLB | PGWRT | PGERS | SPMEN |
| Доступ | R | R | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- RSIG (бит 5) — Чтение таблицы сигнатуры.
- CTPB (бит 4) — Очистка временного буфера страницы.
- RFLB (бит 3) — Чтение фьюзов и битов защиты.
- PGWRT (бит 2) — Запись страницы.
- PGERS (бит 1) — Стирание страницы.
- SPMEN (бит 0) — Разрешение команды SPM.
SPL — указатель стека
Адрес 0x5D (I/O 0x3D), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | SP7 | SP6 | SP5 | SP4 | SP3 | SP2 | SP1 | SP0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
Регистр данных: все восемь битов — одно число.
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) — Флаг переноса.
Частые вопросы
Какими командами ассемблера обращаться к регистрам CPU ATtiny2313A?
Командами IN и OUT доступны PRR (0x06), BODCR (0x07), GPIOR0 (0x13), GPIOR1 (0x14), GPIOR2 (0x15), WDTCR (0x21), GTCCR (0x23), CLKPR (0x26), OSCCAL (0x31), MCUSR (0x34), MCUCR (0x35), SPMCSR (0x37), SPL (0x3D) и SREG (0x3F); из них PRR, BODCR, GPIOR0, GPIOR1 и GPIOR2 — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.
Какие значения у регистров CPU после сброса?
Все регистры блока, для которых даташит 8246B приводит значение после сброса (PRR, BODCR, GPIOR0, GPIOR1, GPIOR2, GTCCR, MCUCR, SPMCSR и SREG), после сброса равны нулю.
Как установить биты SREG на C?
Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: SREG = (1 << I) | (1 << T); записывает новое значение целиком, а SREG |= (1 << I); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. Atmel. ATtiny2313A/4313 datasheet (8246B) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATtiny_DFP 3.4.278, описание ATtiny2313A (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATtiny2313A
- Все регистры ATtiny2313AТаблица по адресам
- Порты ввода-выводаPIND, DDRD, PORTD, PINB, DDRB, PORTB
- Таймер-счётчик 0 (8 бит)TCCR0A, TCNT0, TCCR0B, OCR0A, TIFR, TIMSK
- Таймер-счётчик 1 (16 бит)TCCR1C, ICR1, OCR1B, OCR1A, TCNT1, TCCR1B
- USARTUBRRH, UCSRC, UBRRL, UCSRB, UCSRA, UDR
- Аналоговый компараторDIDR, ACSR
- EEPROMEECR, EEDR, EEAR
- USIUSICR, USISR, USIDR
- Внешние прерыванияPCMSK1, PCMSK2, PCMSK0, GIFR, GIMSK