Таймер-счётчик 2 (8 бит, асинхронный) ATmega328P: регистры и биты
8-битный таймер-счётчик 2: считает такты через предделитель; каналы сравнения OCR2A и OCR2B управляют выводами OC2A и OC2B (ШИМ, генерация частоты). Режим задают биты WGM22:0 в TCCR2A и TCCR2B, тактирование — CS22:0. От часового кварца на выводах TOSC1 и TOSC2 (бит AS2 в ASSR) он считает асинхронно и в режиме сна Power-save, поэтому подходит для часов.
Данные: описание ATmega328P из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита DS40002061B.
Регистры блока
| Регистр | Адрес | Назначение | После сброса |
|---|---|---|---|
| TIFR2 | 0x37 (I/O 0x17) | Флаги прерываний таймера 2 | 0x00 |
| GTCCR | 0x43 (I/O 0x23) | Общее управление таймерами | 0x00 |
| TIMSK2 | 0x70 | Маска прерываний таймера 2 | 0x00 |
| TCCR2A | 0xB0 | Управление таймером 2, регистр A | 0x00 |
| TCCR2B | 0xB1 | Управление таймером 2, регистр B | 0x00 |
| TCNT2 | 0xB2 | Счётный регистр таймера 2 | 0x00 |
| OCR2A | 0xB3 | Регистр сравнения A таймера 2 | 0x00 |
| OCR2B | 0xB4 | Регистр сравнения B таймера 2 | 0x00 |
| ASSR | 0xB6 | Асинхронный режим таймера 2 | 0x00 |
Режимы работы (WGM)
Режим таймера задают биты WGM22:0 — WGM21:0 в TCCR2A и WGM22 в TCCR2B. TOP — значение, на котором счёт поворачивает или сбрасывается; регистры сравнения OCR2x в режимах ШИМ принимают новое значение не сразу, а в момент из третьего столбца. Таблица 18-8 даташита DS40002061B.
| Режим | WGM22:0 | Работа таймера | TOP | OCR2x обновляется | Флаг TOV2 |
|---|---|---|---|---|---|
| 0 | 000 | Обычный счёт (Normal) | 0xFF | сразу | MAX |
| 1 | 001 | ШИМ с коррекцией фазы (Phase Correct) | 0xFF | TOP | BOTTOM |
| 2 | 010 | Сброс при совпадении (CTC) | OCR2A | сразу | MAX |
| 3 | 011 | Быстрый ШИМ (Fast PWM) | 0xFF | BOTTOM | MAX |
| 4 | 100 | зарезервирован | — | — | — |
| 5 | 101 | ШИМ с коррекцией фазы (Phase Correct) | OCR2A | TOP | BOTTOM |
| 6 | 110 | зарезервирован | — | — | — |
| 7 | 111 | Быстрый ШИМ (Fast PWM) | OCR2A | BOTTOM | TOP |
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
TCCR2A = 0;Ассемблер Microchip (m328Pdef.inc)
ldi r16, 0x00
sts TCCR2A, r16TIFR2 — флаги прерываний таймера 2
Адрес 0x37 (I/O 0x17), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | OCF2B | OCF2A | TOV2 |
| Доступ | R | R | R | R | R | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- OCF2B (бит 2) — Флаг совпадения с OCR2B. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- OCF2A (бит 1) — Флаг совпадения с OCR2A. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- TOV2 (бит 0) — Флаг переполнения таймера 2. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
GTCCR — общее управление таймерами
Адрес 0x43 (I/O 0x23), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | TSM | — | — | — | — | — | PSRASY | PSRSYNC |
| Доступ | R/W | R | R | R | R | R | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- TSM (бит 7) — Режим синхронизации предделителей.
- PSRASY (бит 1) — Сброс предделителя таймера 2.
Остальные биты регистра относятся к другим блокам: PSRSYNC — сброс предделителя таймеров 0 и 1 (TC1).
TIMSK2 — маска прерываний таймера 2
Адрес 0x70, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | — | OCIE2B | OCIE2A | TOIE2 |
| Доступ | R | R | R | R | R | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- OCIE2B (бит 2) — Прерывание по совпадению с OCR2B.
- OCIE2A (бит 1) — Прерывание по совпадению с OCR2A.
- TOIE2 (бит 0) — Прерывание по переполнению таймера 2.
TCCR2A — управление таймером 2, регистр A
Адрес 0xB0, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | COM2A1 | COM2A0 | COM2B1 | COM2B0 | — | — | WGM21 | WGM20 |
| Доступ | R/W | R/W | R/W | R/W | R | R | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- COM2A1:0 (биты 7:6) — Режим вывода OC2A. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
- COM2B1:0 (биты 5:4) — Режим вывода OC2B. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
- WGM21:0 (биты 1:0) — Режим работы таймера 2 (WGM).
TCCR2B — управление таймером 2, регистр B
Адрес 0xB1, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | FOC2A | FOC2B | — | — | WGM22 | CS22 | CS21 | CS20 |
| Доступ | W | W | R | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- FOC2A (бит 7) — Принудительное совпадение для OC2A.
- FOC2B (бит 6) — Принудительное совпадение для OC2B.
- WGM22 (бит 3) — Режим работы таймера 2, старший бит WGM.
- CS22:0 (биты 2:0) — Тактирование таймера 2: источник и предделитель.
CS22:0 Значение 000 Таймер остановлен 001 clk без деления 010 clk/8 011 clk/32 100 clk/64 101 clk/128 110 clk/256 111 clk/1024
TCNT2 — счётный регистр таймера 2
Адрес 0xB2, 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
OCR2A — регистр сравнения A таймера 2
Адрес 0xB3, 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
OCR2B — регистр сравнения B таймера 2
Адрес 0xB4, 8 бит, после сброса 0x00.
Регистр данных: все восемь битов — одно число.
ASSR — асинхронный режим таймера 2
Адрес 0xB6, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | EXCLK | AS2 | TCN2UB | OCR2AUB | OCR2BUB | TCR2AUB | TCR2BUB |
| Доступ | R | R/W | R/W | R | R | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- EXCLK (бит 6) — Внешний тактовый сигнал вместо часового кварца.
- AS2 (бит 5) — Асинхронное тактирование таймера 2 от вывода TOSC1.
- TCN2UB (бит 4) — Идёт запись в TCNT2.
- OCR2AUB (бит 3) — Идёт запись в OCR2A.
- OCR2BUB (бит 2) — Идёт запись в OCR2B.
- TCR2AUB (бит 1) — Идёт запись в TCCR2A.
- TCR2BUB (бит 0) — Идёт запись в TCCR2B.
Частые вопросы
Какими командами ассемблера обращаться к регистрам TC2 ATmega328P?
Командами 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 после сброса?
Все регистры блока, для которых даташит DS40002061B приводит значение после сброса (TIFR2, GTCCR, TIMSK2, TCCR2A, TCCR2B, TCNT2, OCR2A, OCR2B и ASSR), после сброса равны нулю.
Как установить биты TCCR2B на C?
Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: TCCR2B = (1 << FOC2A) | (1 << FOC2B); записывает новое значение целиком, а TCCR2B |= (1 << FOC2A); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATmega328P
- Все регистры ATmega328PТаблица по адресам
- USART0UCSR0A, UCSR0B, UCSR0C, UBRR0, UDR0
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR, TWAMR
- Таймер-счётчик 1 (16 бит)TIFR1, GTCCR, TIMSK1, TCCR1A, TCCR1B, TCCR1C
- АЦПADC, ADCSRA, ADCSRB, ADMUX, DIDR0
- Аналоговый компараторACSR, DIDR1
- Порты ввода-выводаPINB, DDRB, PORTB, PINC, DDRC, PORTC
- Таймер-счётчик 0 (8 бит)TIFR0, GTCCR, TCCR0A, TCCR0B, TCNT0, OCR0A
- Внешние прерыванияPCIFR, EIFR, EIMSK, PCICR, EICRA, PCMSK0
- SPISPCR, SPSR, SPDR
- EEPROMEECR, EEDR, EEAR
- Ядро и системные регистрыGPIOR0, GPIOR1, GPIOR2, SMCR, MCUSR, MCUCR