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

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

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

Данные: описание ATtiny85 из пакета Microchip ATtiny_DFP 3.4.278 (Apache-2.0), сверено со сводкой регистров даташита 2586Q.

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

РегистрАдресНазначениеПосле сброса
GPIOR00x31 (I/O 0x11)Регистр общего назначения 0—
GPIOR10x32 (I/O 0x12)Регистр общего назначения 1—
GPIOR20x33 (I/O 0x13)Регистр общего назначения 2—
PRR0x40 (I/O 0x20)Отключение тактирования модулей0x00
WDTCR0x41 (I/O 0x21)Управление сторожевым таймером—
DWDR0x42 (I/O 0x22)Данные debugWIRE0x00
CLKPR0x46 (I/O 0x26)Делитель тактовой частоты—
PLLCSR0x47 (I/O 0x27)Управление PLL—
OSCCAL0x51 (I/O 0x31)Калибровка RC-генератора—
MCUSR0x54 (I/O 0x34)Причина сброса—
MCUCR0x55 (I/O 0x35)Управление микроконтроллером0x00
SPMCSR0x57 (I/O 0x37)Самопрограммирование (SPM)0x00
SP0x5D (I/O 0x3D)Указатель стека—
SREG0x5F (I/O 0x3F)Регистр состояния0x00

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

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

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

Результат

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

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

CLKPR = 0;

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

ldi r16, 0x00
out CLKPR, r16

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

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

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

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

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

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

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

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

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

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

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

Бит76543210
Имя————PRTIM1PRTIM0PRUSIPRADC
ДоступRRRRR/WR/WR/WR/W
После сброса00000000
  • PRTIM1 (бит 3) — Отключить тактирование таймера 1.
  • PRTIM0 (бит 2) — Отключить тактирование таймера 0.
  • PRUSI (бит 1) — Отключить тактирование USI.
  • PRADC (бит 0) — Отключить тактирование АЦП.

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

Адрес 0x41 (I/O 0x21), 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) — Сброс по сторожевому таймеру.

DWDR — данные debugWIRE

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

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

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

Адрес 0x46 (I/O 0x26), 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

PLLCSR — управление PLL

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

Бит76543210
ИмяLSM————PCKEPLLEPLOCK
ДоступR/WRRRRR/WR/WR
  • LSM (бит 7) — Низкоскоростной режим PLL: PCK 32 МГц вместо 64.
  • PCKE (бит 2) — Тактирование таймера 1 от PCK (PLL).
  • PLLE (бит 1) — PLL включена.
  • PLOCK (бит 0) — PLL захватила частоту.

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

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

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

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
ИмяBODSPUDSESM1SM0BODSEISC01ISC00
ДоступRR/WR/WR/WR/WRR/WR/W
После сброса00000000
  • BODS (бит 7) — Выключить BOD на время сна. Запись: BODS = 1 и BODSE = 1, затем в течение четырёх тактов BODS = 1 при BODSE = 0. BODS сам сбрасывается через три такта — команда SLEEP должна выполниться раньше.
  • PUD (бит 6) — Запрет подтяжек всех портов.
  • SE (бит 5) — Разрешение сна (команда SLEEP).
  • SM1:0 (биты 4:3) — Режим сна.
    SM1:0Значение
    00Idle
    01ADC Noise Reduction (подавление шума АЦП)
    10Power-down
    11Зарезервировано
  • BODSE (бит 2) — Разрешение изменения BODS.
  • ISC01:0 (биты 1:0) — Условие срабатывания INT0.
    ISC01:0Значение
    00Низкий уровень
    01Любое изменение
    10Спад
    11Фронт

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

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

Бит76543210
Имя——RSIGCTPBRFLBPGWRTPGERSSPMEN
ДоступRRR/WR/WR/WR/WR/WR/W
После сброса00000000
  • RSIG (бит 5) — Чтение таблицы сигнатуры.
  • CTPB (бит 4) — Очистка временного буфера страницы.
  • RFLB (бит 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) — Флаг переноса.

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

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

Командами IN и OUT доступны GPIOR0 (0x11), GPIOR1 (0x12), GPIOR2 (0x13), PRR (0x20), WDTCR (0x21), DWDR (0x22), CLKPR (0x26), PLLCSR (0x27), OSCCAL (0x31), MCUSR (0x34), MCUCR (0x35), SPMCSR (0x37), SPL и SPH (0x3D и 0x3E) и SREG (0x3F); из них GPIOR0, GPIOR1 и GPIOR2 — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

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

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

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

Источники

  1. Microchip. Atmel. ATtiny25/45/85 datasheet (2586Q) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATtiny_DFP 3.4.278, описание ATtiny85 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

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

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