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

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

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

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

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

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

Режимы работы (WGM)

Режим таймера задают биты WGM13:0 — два в TCCR1A и два в TCCR1B. TOP — значение, на котором счёт поворачивает или сбрасывается; регистры сравнения OCR1x в режимах ШИМ принимают новое значение не сразу, а в момент из третьего столбца. Таблица 16-4 даташита DS40002061B.

РежимWGM13:0Работа таймераTOPOCR1x обновляетсяФлаг TOV1
00000Обычный счёт (Normal)0xFFFFсразуMAX
10001ШИМ с коррекцией фазы (Phase Correct), 8 бит0x00FFTOPBOTTOM
20010ШИМ с коррекцией фазы (Phase Correct), 9 бит0x01FFTOPBOTTOM
30011ШИМ с коррекцией фазы (Phase Correct), 10 бит0x03FFTOPBOTTOM
40100Сброс при совпадении (CTC)OCR1AсразуMAX
50101Быстрый ШИМ (Fast PWM), 8 бит0x00FFBOTTOMTOP
60110Быстрый ШИМ (Fast PWM), 9 бит0x01FFBOTTOMTOP
70111Быстрый ШИМ (Fast PWM), 10 бит0x03FFBOTTOMTOP
81000ШИМ с коррекцией фазы и частотыICR1BOTTOMBOTTOM
91001ШИМ с коррекцией фазы и частотыOCR1ABOTTOMBOTTOM
101010ШИМ с коррекцией фазы (Phase Correct)ICR1TOPBOTTOM
111011ШИМ с коррекцией фазы (Phase Correct)OCR1ATOPBOTTOM
121100Сброс при совпадении (CTC)ICR1сразуMAX
131101зарезервирован———
141110Быстрый ШИМ (Fast PWM)ICR1BOTTOMTOP
151111Быстрый ШИМ (Fast PWM)OCR1ABOTTOMTOP

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

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

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

Результат

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

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

TCCR1A = 0;

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

ldi r16, 0x00
sts TCCR1A, r16

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

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

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

GTCCR — общее управление таймерами

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

Бит76543210
ИмяTSM—————PSRASYPSRSYNC
ДоступR/WRRRRRR/WR/W
После сброса00000000
  • TSM (бит 7) — Режим синхронизации предделителей.
  • PSRSYNC (бит 0) — Сброс предделителя таймеров 0 и 1.

Остальные биты регистра относятся к другим блокам: PSRASY — сброс предделителя таймера 2 (TC2).

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

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

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

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

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

Бит76543210
ИмяCOM1A1COM1A0COM1B1COM1B0——WGM11WGM10
ДоступR/WR/WR/WR/WRRR/WR/W
После сброса00000000
  • COM1A1:0 (биты 7:6) — Режим вывода OC1A. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
  • COM1B1:0 (биты 5:4) — Режим вывода OC1B. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
  • 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
ИмяFOC1AFOC1B——————
ДоступR/WR/WRRRRRR
После сброса00000000
  • FOC1A (бит 7) — Принудительное совпадение для OC1A.
  • FOC1B (бит 6) — Принудительное совпадение для OC1B.

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-битный обмен идёт через общий временный регистр таймера.

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

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

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

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

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

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

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

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

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

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