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

Таймер-счётчик 2 (8 бит, асинхронный) ATmega2560: регистры и биты

8-битный таймер-счётчик 2: считает такты через предделитель; каналы сравнения OCR2A и OCR2B управляют выводами OC2A и OC2B (ШИМ, генерация частоты). Режим задают биты WGM22:0 в TCCR2A и TCCR2B, тактирование — CS22:0. От часового кварца на выводах TOSC1 и TOSC2 (бит AS2 в ASSR) он считает асинхронно и в режиме сна Power-save, поэтому подходит для часов.

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

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

РегистрАдресНазначениеПосле сброса
TIFR20x37 (I/O 0x17)Флаги прерываний таймера 20x00
GTCCR0x43 (I/O 0x23)Общее управление таймерами0x00
TIMSK20x70Маска прерываний таймера 20x00
TCCR2A0xB0Управление таймером 2, регистр A0x00
TCCR2B0xB1Управление таймером 2, регистр B0x00
TCNT20xB2Счётный регистр таймера 20x00
OCR2A0xB3Регистр сравнения A таймера 20x00
OCR2B0xB4Регистр сравнения B таймера 20x00
ASSR0xB6Асинхронный режим таймера 20x00

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

Режим таймера задают биты WGM22:0 — WGM21:0 в TCCR2A и WGM22 в TCCR2B. TOP — значение, на котором счёт поворачивает или сбрасывается; регистры сравнения OCR2x в режимах ШИМ принимают новое значение не сразу, а в момент из третьего столбца. Таблица 20-8 даташита 2549Q.

РежимWGM22:0Работа таймераTOPOCR2x обновляетсяФлаг TOV2
0000Обычный счёт (Normal)0xFFсразуMAX
1001ШИМ с коррекцией фазы (Phase Correct)0xFFTOPBOTTOM
2010Сброс при совпадении (CTC)OCR2AсразуMAX
3011Быстрый ШИМ (Fast PWM)0xFFBOTTOMMAX
4100зарезервирован———
5101ШИМ с коррекцией фазы (Phase Correct)OCR2ATOPBOTTOM
6110зарезервирован———
7111Быстрый ШИМ (Fast PWM)OCR2ABOTTOMTOP

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

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

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

Результат

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

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

TCCR2A = 0;

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

ldi r16, 0x00
sts TCCR2A, r16

TIFR2 — флаги прерываний таймера 2

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

Бит76543210
Имя—————OCF2BOCF2ATOV2
ДоступRRRRRR/WR/WR/W
После сброса00000000
  • OCF2B (бит 2) — Флаг совпадения с OCR2B. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • OCF2A (бит 1) — Флаг совпадения с OCR2A. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • TOV2 (бит 0) — Флаг переполнения таймера 2. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.

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

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

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

Остальные биты регистра относятся к другим блокам: PSRSYNC — сброс предделителя таймеров 0 и 1 (TC0).

TIMSK2 — маска прерываний таймера 2

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

Бит76543210
Имя—————OCIE2BOCIE2ATOIE2
ДоступRRRRRR/WR/WR/W
После сброса00000000
  • OCIE2B (бит 2) — Прерывание по совпадению с OCR2B.
  • OCIE2A (бит 1) — Прерывание по совпадению с OCR2A.
  • TOIE2 (бит 0) — Прерывание по переполнению таймера 2.

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

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

Бит76543210
ИмяCOM2A1COM2A0COM2B1COM2B0——WGM21WGM20
ДоступR/WR/WR/WR/WRRR/WR/W
После сброса00000000
  • COM2A1:0 (биты 7:6) — Режим вывода OC2A. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
  • COM2B1:0 (биты 5:4) — Режим вывода OC2B. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
  • WGM21:0 (биты 1:0) — Режим работы таймера 2 (WGM).

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

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

Бит76543210
ИмяFOC2AFOC2B——WGM22CS22CS21CS20
ДоступWWRRR/WR/WR/WR/W
После сброса00000000
  • FOC2A (бит 7) — Принудительное совпадение для OC2A.
  • FOC2B (бит 6) — Принудительное совпадение для OC2B.
  • WGM22 (бит 3) — Режим работы таймера 2, старший бит WGM.
  • CS22:0 (биты 2:0) — Тактирование таймера 2: источник и предделитель.
    CS22:0Значение
    000Таймер остановлен
    001clk без деления
    010clk/8
    011clk/32
    100clk/64
    101clk/128
    110clk/256
    111clk/1024

TCNT2 — счётный регистр таймера 2

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

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

OCR2A — регистр сравнения A таймера 2

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

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

OCR2B — регистр сравнения B таймера 2

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

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

ASSR — асинхронный режим таймера 2

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

Бит76543210
Имя—EXCLKAS2TCN2UBOCR2AUBOCR2BUBTCR2AUBTCR2BUB
ДоступRR/WR/WRRRRR
После сброса00000000
  • EXCLK (бит 6) — Внешний тактовый сигнал вместо часового кварца.
  • AS2 (бит 5) — Асинхронное тактирование таймера 2 от вывода TOSC1.
  • TCN2UB (бит 4) — Идёт запись в TCNT2.
  • OCR2AUB (бит 3) — Идёт запись в OCR2A.
  • OCR2BUB (бит 2) — Идёт запись в OCR2B.
  • TCR2AUB (бит 1) — Идёт запись в TCCR2A.
  • TCR2BUB (бит 0) — Идёт запись в TCCR2B.

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

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

Командами IN и OUT доступны TIFR2 (0x17) и GTCCR (0x23); из них TIFR2 — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. TIMSK2, TCCR2A, TCCR2B, TCNT2, OCR2A, OCR2B и ASSR лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

Все регистры блока, для которых даташит 2549Q приводит значение после сброса (TIFR2, GTCCR, TIMSK2, TCCR2A, TCCR2B, TCNT2, OCR2A, OCR2B и ASSR), после сброса равны нулю.

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

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

Источники

  1. Microchip. Atmel. ATmega640/V-1280/V-1281/V-2560/V-2561/V datasheet (2549Q) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega2560 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

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

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