Таймеры-счётчики 1, 3, 4 и 5 (16 бит) ATmega2560: регистры и биты
Таймеры-счётчики 1, 3, 4 и 5 (16 бит) ATmega2560 устроены одинаково, поэтому их регистры ниже названы с n вместо номера, а адреса даны для каждого. 16-битный таймер-счётчик n: считает такты через предделитель или импульсы на входе Tn; каналы сравнения OCRnA, OCRnB и OCRnC управляют выводами OCnA, OCnB и OCnC (ШИМ, генерация частоты); момент события на входе ICPn запоминается в ICRn. Режим задают биты WGMn3:0 в TCCRnA и TCCRnB, тактирование — CSn2:0.
Данные: описание ATmega2560 из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита 2549Q.
Регистры блока
| Регистр | Адрес | Назначение | После сброса |
|---|---|---|---|
| TIFRn | 1: 0x36 (I/O 0x16), 3: 0x38 (I/O 0x18), 4: 0x39 (I/O 0x19), 5: 0x3A (I/O 0x1A) | Флаги прерываний таймера n | 0x00 |
| TIMSKn | 1: 0x6F, 3: 0x71, 4: 0x72, 5: 0x73 | Маска прерываний таймера n | 0x00 |
| TCCRnA | 1: 0x80, 3: 0x90, 4: 0xA0, 5: 0x120 | Управление таймером n, регистр A | 0x00 |
| TCCRnB | 1: 0x81, 3: 0x91, 4: 0xA1, 5: 0x121 | Управление таймером n, регистр B | 0x00 |
| TCCRnC | 1: 0x82, 3: 0x92, 4: 0xA2, 5: 0x122 | Управление таймером n, регистр C | 0x00 |
| TCNTn | 1: 0x84, 3: 0x94, 4: 0xA4, 5: 0x124 | Счётный регистр таймера n | 0x0000 |
| ICRn | 1: 0x86, 3: 0x96, 4: 0xA6, 5: 0x126 | Регистр захвата таймера n | 0x0000 |
| OCRnA | 1: 0x88, 3: 0x98, 4: 0xA8, 5: 0x128 | Регистр сравнения A таймера n | 0x0000 |
| OCRnB | 1: 0x8A, 3: 0x9A, 4: 0xAA, 5: 0x12A | Регистр сравнения B таймера n | 0x0000 |
| OCRnC | 1: 0x8C, 3: 0x9C, 4: 0xAC, 5: 0x12C | Регистр сравнения C таймера n | 0x0000 |
Режимы работы (WGM)
Режим таймера задают биты WGMn3:0 — два в TCCRnA и два в TCCRnB. TOP — значение, на котором счёт поворачивает или сбрасывается; регистры сравнения OCRnx в режимах ШИМ принимают новое значение не сразу, а в момент из третьего столбца. Таблица 17-2 даташита 2549Q.
| Режим | WGMn3:0 | Работа таймера | TOP | OCRnx обновляется | Флаг TOVn |
|---|---|---|---|---|---|
| 0 | 0000 | Обычный счёт (Normal) | 0xFFFF | сразу | MAX |
| 1 | 0001 | ШИМ с коррекцией фазы (Phase Correct), 8 бит | 0x00FF | TOP | BOTTOM |
| 2 | 0010 | ШИМ с коррекцией фазы (Phase Correct), 9 бит | 0x01FF | TOP | BOTTOM |
| 3 | 0011 | ШИМ с коррекцией фазы (Phase Correct), 10 бит | 0x03FF | TOP | BOTTOM |
| 4 | 0100 | Сброс при совпадении (CTC) | OCRnA | сразу | MAX |
| 5 | 0101 | Быстрый ШИМ (Fast PWM), 8 бит | 0x00FF | BOTTOM | TOP |
| 6 | 0110 | Быстрый ШИМ (Fast PWM), 9 бит | 0x01FF | BOTTOM | TOP |
| 7 | 0111 | Быстрый ШИМ (Fast PWM), 10 бит | 0x03FF | BOTTOM | TOP |
| 8 | 1000 | ШИМ с коррекцией фазы и частоты | ICRn | BOTTOM | BOTTOM |
| 9 | 1001 | ШИМ с коррекцией фазы и частоты | OCRnA | BOTTOM | BOTTOM |
| 10 | 1010 | ШИМ с коррекцией фазы (Phase Correct) | ICRn | TOP | BOTTOM |
| 11 | 1011 | ШИМ с коррекцией фазы (Phase Correct) | OCRnA | TOP | BOTTOM |
| 12 | 1100 | Сброс при совпадении (CTC) | ICRn | сразу | MAX |
| 13 | 1101 | зарезервирован | — | — | — |
| 14 | 1110 | Быстрый ШИМ (Fast PWM) | ICRn | BOTTOM | TOP |
| 15 | 1111 | Быстрый ШИМ (Fast PWM) | OCRnA | BOTTOM | TOP |
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
TCCR1A = 0;Ассемблер Microchip (m2560def.inc)
ldi r16, 0x00
sts TCCR1A, r16TIFRn — флаги прерываний таймера n
Адреса 0x36 (I/O 0x16) — TIFR1, 0x38 (I/O 0x18) — TIFR3, 0x39 (I/O 0x19) — TIFR4, 0x3A (I/O 0x1A) — TIFR5, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | ICFn | — | OCFnC | OCFnB | OCFnA | TOVn |
| Доступ | R | R | R/W | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- ICFn (бит 5) — Флаг захвата таймера n. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- OCFnC (бит 3) — Флаг совпадения с OCRnC. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- OCFnB (бит 2) — Флаг совпадения с OCRnB. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- OCFnA (бит 1) — Флаг совпадения с OCRnA. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
- TOVn (бит 0) — Флаг переполнения таймера n. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
TIMSKn — маска прерываний таймера n
Адреса 0x6F — TIMSK1, 0x71 — TIMSK3, 0x72 — TIMSK4, 0x73 — TIMSK5, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | ICIEn | — | OCIEnC | OCIEnB | OCIEnA | TOIEn |
| Доступ | R | R | R/W | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- ICIEn (бит 5) — Прерывание по захвату таймера n.
- OCIEnC (бит 3) — Прерывание по совпадению с OCRnC.
- OCIEnB (бит 2) — Прерывание по совпадению с OCRnB.
- OCIEnA (бит 1) — Прерывание по совпадению с OCRnA.
- TOIEn (бит 0) — Прерывание по переполнению таймера n.
TCCRnA — управление таймером n, регистр A
Адреса 0x80 — TCCR1A, 0x90 — TCCR3A, 0xA0 — TCCR4A, 0x120 — TCCR5A, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | COMnA1 | COMnA0 | COMnB1 | COMnB0 | COMnC1 | COMnC0 | WGMn1 | WGMn0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- COMnA1:0 (биты 7:6) — Режим вывода OCnA. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
- COMnB1:0 (биты 5:4) — Режим вывода OCnB. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
- COMnC1:0 (биты 3:2) — Режим вывода OCnC. Что делается с выводом при совпадении, зависит от режима таймера: в режимах ШИМ те же значения битов означают другое, у каждого режима в даташите своя таблица.
- WGMn1:0 (биты 1:0) — Режим работы таймера n (WGM).
TCCRnB — управление таймером n, регистр B
Адреса 0x81 — TCCR1B, 0x91 — TCCR3B, 0xA1 — TCCR4B, 0x121 — TCCR5B, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | ICNCn | ICESn | — | WGMn3 | WGMn2 | CSn2 | CSn1 | CSn0 |
| Доступ | R/W | R/W | R | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- ICNCn (бит 7) — Подавление помех на входе захвата ICPn.
- ICESn (бит 6) — Фронт захвата на входе ICPn.
- WGMn3:2 (биты 4:3) — Режим работы таймера n (WGM).
- CSn2:0 (биты 2:0) — Тактирование таймера n: источник и предделитель.
CSn2:0 Значение 000 Таймер остановлен 001 clk без деления 010 clk/8 011 clk/64 100 clk/256 101 clk/1024 110 Внешний сигнал на входе Tn, спад 111 Внешний сигнал на входе Tn, фронт
TCCRnC — управление таймером n, регистр C
Адреса 0x82 — TCCR1C, 0x92 — TCCR3C, 0xA2 — TCCR4C, 0x122 — TCCR5C, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | FOCnA | FOCnB | FOCnC | — | — | — | — | — |
| Доступ | W | W | W | R | R | R | R | R |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- FOCnA (бит 7) — Принудительное совпадение для OCnA.
- FOCnB (бит 6) — Принудительное совпадение для OCnB.
- FOCnC (бит 5) — Принудительное совпадение для OCnC.
TCNTn — счётный регистр таймера n
Адреса 0x84 — TCNT1, 0x94 — TCNT3, 0xA4 — TCNT4, 0x124 — TCNT5, 16 бит: старший байт TCNTnH по адресу 0x85, младший TCNTnL по 0x84, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.
ICRn — регистр захвата таймера n
Адреса 0x86 — ICR1, 0x96 — ICR3, 0xA6 — ICR4, 0x126 — ICR5, 16 бит: старший байт ICRnH по адресу 0x87, младший ICRnL по 0x86, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.
OCRnA — регистр сравнения A таймера n
Адреса 0x88 — OCR1A, 0x98 — OCR3A, 0xA8 — OCR4A, 0x128 — OCR5A, 16 бит: старший байт OCRnAH по адресу 0x89, младший OCRnAL по 0x88, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.
OCRnB — регистр сравнения B таймера n
Адреса 0x8A — OCR1B, 0x9A — OCR3B, 0xAA — OCR4B, 0x12A — OCR5B, 16 бит: старший байт OCRnBH по адресу 0x8B, младший OCRnBL по 0x8A, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.
OCRnC — регистр сравнения C таймера n
Адреса 0x8C — OCR1C, 0x9C — OCR3C, 0xAC — OCR4C, 0x12C — OCR5C, 16 бит: старший байт OCRnCH по адресу 0x8D, младший OCRnCL по 0x8C, после сброса 0x0000. В C регистр читается и пишется целиком. На ассемблере старший байт пишут первым, а читают первым младший: 16-битный обмен идёт через общий временный регистр таймера.
Частые вопросы
Какими командами ассемблера обращаться к регистрам TC1/3/4/5 ATmega2560?
Командами IN и OUT доступны TIFRn (0x16, 0x18, 0x19, 0x1A); из них TIFRn — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. TIMSKn, TCCRnA, TCCRnB, TCCRnC, TCNTn, ICRn, OCRnA, OCRnB и OCRnC лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.
Какие значения у регистров TC1/3/4/5 после сброса?
Все регистры блока, для которых даташит 2549Q приводит значение после сброса (TIFRn, TIMSKn, TCCRnA, TCCRnB, TCCRnC, TCNTn, ICRn, OCRnA, OCRnB и OCRnC), после сброса равны нулю.
Как установить биты TCCR1A на C?
Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: TCCR1A = (1 << COM1A1) | (1 << COM1B1); записывает новое значение целиком, а TCCR1A |= (1 << COM1A1); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. Atmel. ATmega640/V-1280/V-1281/V-2560/V-2561/V datasheet (2549Q) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega2560 (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATmega2560
- Все регистры ATmega2560Таблица по адресам
- Аналоговый компараторACSR, ADCSRB, DIDR1
- USART0–USART3UCSR0A, UCSR0B, UCSR0C, UBRR0, UDR0, UCSR1A
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR, TWAMR
- SPISPCR, SPSR, SPDR
- Порты ввода-выводаPINA, DDRA, PORTA, PINB, DDRB, PORTB
- Таймер-счётчик 0 (8 бит)TIFR0, GTCCR, TCCR0A, TCCR0B, TCNT0, OCR0A
- Таймер-счётчик 2 (8 бит, асинхронный)TIFR2, GTCCR, TIMSK2, TCCR2A, TCCR2B, TCNT2
- EEPROMEECR, EEDR, EEAR
- Внешние прерыванияPCIFR, EIFR, EIMSK, PCICR, EICRA, EICRB
- Ядро и системные регистрыGPIOR0, GPIOR1, GPIOR2, OCDR, SMCR, MCUSR
- АЦПADC, ADCSRA, ADCSRB, ADMUX, DIDR2, DIDR0