Таймер-счётчик 2 (8 бит, асинхронный) ATmega8: регистры и биты
8-битный таймер-счётчик 2: считает такты через предделитель; канал сравнения OCR2 управляет выводом OC2 (ШИМ, генерация частоты). Режим задают биты WGM21:0 в TCCR2, тактирование — CS22:0. От часового кварца на выводах TOSC1 и TOSC2 (бит AS2 в ASSR) он считает асинхронно и в режиме сна Power-save, поэтому подходит для часов.
Данные: описание ATmega8 из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита 2486AA.
Регистры блока
| Регистр | Адрес | Назначение | После сброса |
|---|---|---|---|
| ASSR | 0x42 (I/O 0x22) | Асинхронный режим таймера 2 | 0x00 |
| OCR2 | 0x43 (I/O 0x23) | Регистр сравнения таймера 2 | 0x00 |
| TCNT2 | 0x44 (I/O 0x24) | Счётный регистр таймера 2 | 0x00 |
| TCCR2 | 0x45 (I/O 0x25) | Управление таймером 2 | 0x00 |
| SFIOR | 0x50 (I/O 0x30) | Специальные функции ввода-вывода | 0x00 |
| TIFR | 0x58 (I/O 0x38) | Флаги прерываний таймера | 0x00 |
| TIMSK | 0x59 (I/O 0x39) | Маска прерываний таймера | 0x00 |
Режимы работы (WGM)
Режим таймера задают биты WGM21:0 в TCCR2. TOP — значение, на котором счёт поворачивает или сбрасывается; регистр сравнения OCR2 в режимах ШИМ принимает новое значение не сразу, а в момент из третьего столбца. Таблица 42 даташита 2486AA.
| Режим | WGM21:0 | Работа таймера | TOP | OCR2 обновляется | Флаг TOV2 |
|---|---|---|---|---|---|
| 0 | 00 | Обычный счёт (Normal) | 0xFF | сразу | MAX |
| 1 | 01 | ШИМ с коррекцией фазы (Phase Correct) | 0xFF | TOP | BOTTOM |
| 2 | 10 | Сброс при совпадении (CTC) | OCR2 | сразу | MAX |
| 3 | 11 | Быстрый ШИМ (Fast PWM) | 0xFF | BOTTOM | MAX |
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
TCCR2 = 0;Ассемблер Microchip (m8def.inc)
ldi r16, 0x00
out TCCR2, r16ASSR — асинхронный режим таймера 2
Адрес 0x42 (I/O 0x22), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | AS2 | TCN2UB | OCR2UB | TCR2UB |
| Доступ | R | R | R | R | R/W | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | FOC2 | WGM20 | COM21 | COM20 | WGM21 | CS22 | CS21 | CS20 |
| Доступ | W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- FOC2 (бит 7) — Принудительное совпадение для OC2.
- WGM20 (бит 6) — Режим работы таймера 2, бит WGM20.
- COM21:0 (биты 5:4) — Режим вывода OC2.
- WGM21 (бит 3) — Режим работы таймера 2, бит WGM21.
- 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
SFIOR — специальные функции ввода-вывода
Адрес 0x50 (I/O 0x30), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | — | — | ACME | PUD | PSR2 | PSR10 |
| Доступ | R | R | R | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- PSR2 (бит 1) — Сброс предделителя таймера 2.
Остальные биты регистра относятся к другим блокам: ACME — вход компаратора от мультиплексора ацп (AC), PUD — запрет подтяжек всех портов (CPU), PSR10 — сброс предделителя таймеров 1 и 0 (CPU).
TIFR — флаги прерываний таймера
Адрес 0x58 (I/O 0x38), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | — | TOV0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- OCF2 (бит 7) — Флаг совпадения с OCR2. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- TOV2 (бит 6) — Флаг переполнения таймера 2. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
Остальные биты регистра относятся к другим блокам: ICF1 — флаг захвата таймера 1 (TC1), OCF1A — флаг совпадения с ocr1a (TC1), OCF1B — флаг совпадения с ocr1b (TC1), TOV1 — флаг переполнения таймера 1 (TC1), TOV0 — флаг переполнения таймера 0 (TC0).
TIMSK — маска прерываний таймера
Адрес 0x59 (I/O 0x39), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | — | TOIE0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- OCIE2 (бит 7) — Прерывание по совпадению с OCR2.
- TOIE2 (бит 6) — Прерывание по переполнению таймера 2.
Остальные биты регистра относятся к другим блокам: TICIE1 — прерывание по захвату таймера 1 (TC1), OCIE1A — прерывание по совпадению с ocr1a (TC1), OCIE1B — прерывание по совпадению с ocr1b (TC1), TOIE1 — прерывание по переполнению таймера 1 (TC1), TOIE0 — прерывание по переполнению таймера 0 (TC0).
Частые вопросы
Какими командами ассемблера обращаться к регистрам TC2 ATmega8?
Командами IN и OUT доступны ASSR (0x22), OCR2 (0x23), TCNT2 (0x24), TCCR2 (0x25), SFIOR (0x30), TIFR (0x38) и TIMSK (0x39). В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.
Какие значения у регистров TC2 после сброса?
Все регистры блока, для которых даташит 2486AA приводит значение после сброса (ASSR, OCR2, TCNT2, TCCR2, SFIOR, TIFR и TIMSK), после сброса равны нулю.
Как установить биты TCCR2 на C?
Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: TCCR2 = (1 << FOC2) | (1 << WGM20); записывает новое значение целиком, а TCCR2 |= (1 << FOC2); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. Atmel. ATmega8(L) datasheet (2486AA) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega8 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATmega8
- Все регистры ATmega8Таблица по адресам
- Аналоговый компараторACSR, SFIOR
- SPISPCR, SPSR, SPDR
- Внешние прерыванияMCUCR, GIFR, GICR
- Таймер-счётчик 0 (8 бит)TCNT0, TCCR0, TIFR, TIMSK
- Таймер-счётчик 1 (16 бит)ICR1, OCR1B, OCR1A, TCNT1, TCCR1B, TCCR1A
- USARTUBRRL, UCSRB, UCSRA, UDR, UCSRC, UBRRH
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR
- Порты ввода-выводаPIND, DDRD, PORTD, PINC, DDRC, PORTC
- EEPROMEECR, EEDR, EEAR
- Ядро и системные регистрыWDTCR, SFIOR, OSCCAL, MCUCSR, MCUCR, SPMCR
- АЦПADC, ADCSRA, ADMUX