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

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

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

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

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

РегистрАдресНазначениеПосле сброса
ASSR0x42 (I/O 0x22)Асинхронный режим таймера 20x00
OCR20x43 (I/O 0x23)Регистр сравнения таймера 20x00
TCNT20x44 (I/O 0x24)Счётный регистр таймера 20x00
TCCR20x45 (I/O 0x25)Управление таймером 20x00
TIFR0x58 (I/O 0x38)Флаги прерываний таймера0x00
TIMSK0x59 (I/O 0x39)Маска прерываний таймера0x00

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

Режим таймера задают биты WGM21:0 в TCCR2. TOP — значение, на котором счёт поворачивает или сбрасывается; регистр сравнения OCR2 в режимах ШИМ принимает новое значение не сразу, а в момент из третьего столбца. Таблица 18-2 даташита DS40002072A.

РежимWGM21:0Работа таймераTOPOCR2 обновляетсяФлаг TOV2
000Обычный счёт (Normal)0xFFсразуMAX
101ШИМ с коррекцией фазы (Phase Correct)0xFFTOPBOTTOM
210Сброс при совпадении (CTC)OCR2сразуMAX
311Быстрый ШИМ (Fast PWM)0xFFBOTTOMMAX

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

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

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

Результат

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

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

TCCR2 = 0;

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

ldi r16, 0x00
out TCCR2, r16

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

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

Бит76543210
Имя————AS2TCN2UBOCR2UBTCR2UB
ДоступRRRRR/WRRR
После сброса00000000
  • AS2 (бит 3) — Асинхронное тактирование таймера 2 от вывода TOSC1.
  • TCN2UB (бит 2) — Идёт запись в TCNT2.
  • OCR2UB (бит 1) — Идёт запись в OCR2.
  • TCR2UB (бит 0) — Идёт запись в TCCR2.

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

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

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

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

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

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

TCCR2 — управление таймером 2

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

Бит76543210
ИмяFOC2WGM20COM21COM20WGM21CS22CS21CS20
ДоступWR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • FOC2 (бит 7) — Принудительное совпадение для OC2.
  • WGM20 (бит 6) — Режим работы таймера 2, бит WGM20.
  • COM21:0 (биты 5:4) — Режим вывода OC2.
  • WGM21 (бит 3) — Режим работы таймера 2, бит WGM21.
  • CS22:0 (биты 2:0) — Тактирование таймера 2: источник и предделитель.
    CS22:0Значение
    000Таймер остановлен
    001clk без деления
    010clk/8
    011clk/32
    100clk/64
    101clk/128
    110clk/256
    111clk/1024

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

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

Бит76543210
ИмяOCF2TOV2ICF1OCF1AOCF1BTOV1OCF0TOV0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • OCF2 (бит 7) — Флаг совпадения с OCR2. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • TOV2 (бит 6) — Флаг переполнения таймера 2. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.

Остальные биты регистра относятся к другим блокам: ICF1 — флаг захвата таймера 1 (TC1), OCF1A — флаг совпадения с ocr1a (TC1), OCF1B — флаг совпадения с ocr1b (TC1), TOV1 — флаг переполнения таймера 1 (TC1), OCF0 — флаг совпадения с ocr0 (TC0), TOV0 — флаг переполнения таймера 0 (TC0).

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

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

Бит76543210
ИмяOCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1OCIE0TOIE0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • OCIE2 (бит 7) — Прерывание по совпадению с OCR2.
  • TOIE2 (бит 6) — Прерывание по переполнению таймера 2.

Остальные биты регистра относятся к другим блокам: TICIE1 — прерывание по захвату таймера 1 (TC1), OCIE1A — прерывание по совпадению с ocr1a (TC1), OCIE1B — прерывание по совпадению с ocr1b (TC1), TOIE1 — прерывание по переполнению таймера 1 (TC1), OCIE0 — прерывание по совпадению с ocr0 (TC0), TOIE0 — прерывание по переполнению таймера 0 (TC0).

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

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

Командами IN и OUT доступны ASSR (0x22), OCR2 (0x23), TCNT2 (0x24), TCCR2 (0x25), TIFR (0x38) и TIMSK (0x39). В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

Все регистры блока, для которых даташит DS40002072A приводит значение после сброса (ASSR, OCR2, TCNT2, TCCR2, TIFR и TIMSK), после сброса равны нулю.

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

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

Источники

  1. Microchip. ATmega32A Data Sheet (DS40002072A) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega32A (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

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

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

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