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

Таймер-счётчик 1 (16 бит) ATmega32U4: регистры и биты

16-битный таймер-счётчик 1: считает такты через предделитель или импульсы на входе T1; каналы сравнения OCR1A, OCR1B и OCR1C управляют выводами OC1A, OC1B и OC1C (ШИМ, генерация частоты); момент события на входе ICP1 запоминается в ICR1. Режим задают биты WGM13:0 в TCCR1A и TCCR1B, тактирование — CS12:0.

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

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

РегистрАдресНазначениеПосле сброса
TIFR10x36 (I/O 0x16)Флаги прерываний таймера 10x00
TIMSK10x6FМаска прерываний таймера 10x00
TCCR1A0x80Управление таймером 1, регистр A—
TCCR1B0x81Управление таймером 1, регистр B0x00
TCCR1C0x82Управление таймером 1, регистр C0x00
TCNT10x84Счётный регистр таймера 10x0000
ICR10x86Регистр захвата таймера 10x0000
OCR1A0x88Регистр сравнения A таймера 10x0000
OCR1B0x8AРегистр сравнения B таймера 10x0000
OCR1C0x8CРегистр сравнения C таймера 10x0000

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

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

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

Результат

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

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

TCCR1A = 0;

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

ldi r16, 0x00
sts TCCR1A, r16

TIFR1 — флаги прерываний таймера 1

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

Бит76543210
Имя——ICF1—OCF1COCF1BOCF1ATOV1
ДоступRRR/WRR/WR/WR/WR/W
После сброса00000000
  • ICF1 (бит 5) — Флаг захвата таймера 1. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • OCF1C (бит 3) — Флаг совпадения с OCR1C. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • OCF1B (бит 2) — Флаг совпадения с OCR1B. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • OCF1A (бит 1) — Флаг совпадения с OCR1A. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • TOV1 (бит 0) — Флаг переполнения таймера 1. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.

TIMSK1 — маска прерываний таймера 1

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

Бит76543210
Имя——ICIE1—OCIE1COCIE1BOCIE1ATOIE1
ДоступRRR/WRR/WR/WR/WR/W
После сброса00000000
  • ICIE1 (бит 5) — Прерывание по захвату таймера 1.
  • OCIE1C (бит 3) — Прерывание по совпадению с OCR1C.
  • OCIE1B (бит 2) — Прерывание по совпадению с OCR1B.
  • OCIE1A (бит 1) — Прерывание по совпадению с OCR1A.
  • TOIE1 (бит 0) — Прерывание по переполнению таймера 1.

TCCR1A — управление таймером 1, регистр A

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

Бит76543210
ИмяCOM1A1COM1A0COM1B1COM1B0COM1C1COM1C0WGM11WGM10
  • COM1A1:0 (биты 7:6) — Режим вывода OC1A. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
  • COM1B1:0 (биты 5:4) — Режим вывода OC1B. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
  • COM1C1:0 (биты 3:2) — Режим вывода OC1C. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
  • WGM11:0 (биты 1:0) — Режим работы таймера 1 (WGM).

TCCR1B — управление таймером 1, регистр B

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

Бит76543210
ИмяICNC1ICES1—WGM13WGM12CS12CS11CS10
ДоступR/WR/WRR/WR/WR/WR/WR/W
После сброса00000000
  • ICNC1 (бит 7) — Подавление помех на входе захвата ICP1.
  • ICES1 (бит 6) — Фронт захвата на входе ICP1.
  • WGM13:2 (биты 4:3) — Режим работы таймера 1 (WGM).
  • CS12:0 (биты 2:0) — Тактирование таймера 1: источник и предделитель.
    CS12:0Значение
    000Таймер остановлен
    001clk без деления
    010clk/8
    011clk/64
    100clk/256
    101clk/1024
    110Внешний сигнал на входе T1, спад
    111Внешний сигнал на входе T1, фронт

TCCR1C — управление таймером 1, регистр C

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

Бит76543210
ИмяFOC1AFOC1BFOC1C—————
ДоступWWWRRRRR
После сброса00000000
  • FOC1A (бит 7) — Принудительное совпадение для OC1A.
  • FOC1B (бит 6) — Принудительное совпадение для OC1B.
  • FOC1C (бит 5) — Принудительное совпадение для OC1C.

TCNT1 — счётный регистр таймера 1

Адрес 0x84, 16 бит: старший байт TCNT1H по адресу 0x85, младший TCNT1L по 0x84, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.

ICR1 — регистр захвата таймера 1

Адрес 0x86, 16 бит: старший байт ICR1H по адресу 0x87, младший ICR1L по 0x86, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.

OCR1A — регистр сравнения A таймера 1

Адрес 0x88, 16 бит: старший байт OCR1AH по адресу 0x89, младший OCR1AL по 0x88, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.

OCR1B — регистр сравнения B таймера 1

Адрес 0x8A, 16 бит: старший байт OCR1BH по адресу 0x8B, младший OCR1BL по 0x8A, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.

OCR1C — регистр сравнения C таймера 1

Адрес 0x8C, 16 бит: старший байт OCR1CH по адресу 0x8D, младший OCR1CL по 0x8C, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.

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

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

Командами IN и OUT доступны TIFR1 (0x16); из них TIFR1 — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. TIMSK1, TCCR1A, TCCR1B, TCCR1C, TCNT1, ICR1, OCR1A, OCR1B и OCR1C лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

Все регистры блока, для которых даташит 7766J приводит значение после сброса (TIFR1, TIMSK1, TCCR1B, TCCR1C, TCNT1, ICR1, OCR1A, OCR1B и OCR1C), после сброса равны нулю.

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

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

Источники

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

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

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

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