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

Таймеры-счётчики 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.

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

РегистрАдресНазначениеПосле сброса
TIFRn1: 0x36 (I/O 0x16), 3: 0x38 (I/O 0x18), 4: 0x39 (I/O 0x19), 5: 0x3A (I/O 0x1A)Флаги прерываний таймера n0x00
TIMSKn1: 0x6F, 3: 0x71, 4: 0x72, 5: 0x73Маска прерываний таймера n0x00
TCCRnA1: 0x80, 3: 0x90, 4: 0xA0, 5: 0x120Управление таймером n, регистр A0x00
TCCRnB1: 0x81, 3: 0x91, 4: 0xA1, 5: 0x121Управление таймером n, регистр B0x00
TCCRnC1: 0x82, 3: 0x92, 4: 0xA2, 5: 0x122Управление таймером n, регистр C0x00
TCNTn1: 0x84, 3: 0x94, 4: 0xA4, 5: 0x124Счётный регистр таймера n0x0000
ICRn1: 0x86, 3: 0x96, 4: 0xA6, 5: 0x126Регистр захвата таймера n0x0000
OCRnA1: 0x88, 3: 0x98, 4: 0xA8, 5: 0x128Регистр сравнения A таймера n0x0000
OCRnB1: 0x8A, 3: 0x9A, 4: 0xAA, 5: 0x12AРегистр сравнения B таймера n0x0000
OCRnC1: 0x8C, 3: 0x9C, 4: 0xAC, 5: 0x12CРегистр сравнения C таймера n0x0000

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

Режим таймера задают биты WGMn3:0 — два в TCCRnA и два в TCCRnB. TOP — значение, на котором счёт поворачивает или сбрасывается; регистры сравнения OCRnx в режимах ШИМ принимают новое значение не сразу, а в момент из третьего столбца. Таблица 17-2 даташита 2549Q.

РежимWGMn3:0Работа таймераTOPOCRnx обновляетсяФлаг TOVn
00000Обычный счёт (Normal)0xFFFFсразуMAX
10001ШИМ с коррекцией фазы (Phase Correct), 8 бит0x00FFTOPBOTTOM
20010ШИМ с коррекцией фазы (Phase Correct), 9 бит0x01FFTOPBOTTOM
30011ШИМ с коррекцией фазы (Phase Correct), 10 бит0x03FFTOPBOTTOM
40100Сброс при совпадении (CTC)OCRnAсразуMAX
50101Быстрый ШИМ (Fast PWM), 8 бит0x00FFBOTTOMTOP
60110Быстрый ШИМ (Fast PWM), 9 бит0x01FFBOTTOMTOP
70111Быстрый ШИМ (Fast PWM), 10 бит0x03FFBOTTOMTOP
81000ШИМ с коррекцией фазы и частотыICRnBOTTOMBOTTOM
91001ШИМ с коррекцией фазы и частотыOCRnABOTTOMBOTTOM
101010ШИМ с коррекцией фазы (Phase Correct)ICRnTOPBOTTOM
111011ШИМ с коррекцией фазы (Phase Correct)OCRnATOPBOTTOM
121100Сброс при совпадении (CTC)ICRnсразуMAX
131101зарезервирован———
141110Быстрый ШИМ (Fast PWM)ICRnBOTTOMTOP
151111Быстрый ШИМ (Fast PWM)OCRnABOTTOMTOP

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

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

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

Результат

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

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

TCCR1A = 0;

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

ldi r16, 0x00
sts TCCR1A, r16

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

Адреса 0x36 (I/O 0x16) — TIFR1, 0x38 (I/O 0x18) — TIFR3, 0x39 (I/O 0x19) — TIFR4, 0x3A (I/O 0x1A) — TIFR5, 8 бит, после сброса 0x00.

Бит76543210
Имя——ICFn—OCFnCOCFnBOCFnATOVn
ДоступRRR/WRR/WR/WR/WR/W
После сброса00000000
  • 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.

Бит76543210
Имя——ICIEn—OCIEnCOCIEnBOCIEnATOIEn
ДоступRRR/WRR/WR/WR/WR/W
После сброса00000000
  • 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.

Бит76543210
ИмяCOMnA1COMnA0COMnB1COMnB0COMnC1COMnC0WGMn1WGMn0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • 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.

Бит76543210
ИмяICNCnICESn—WGMn3WGMn2CSn2CSn1CSn0
ДоступR/WR/WRR/WR/WR/WR/WR/W
После сброса00000000
  • ICNCn (бит 7) — Подавление помех на входе захвата ICPn.
  • ICESn (бит 6) — Фронт захвата на входе ICPn.
  • WGMn3:2 (биты 4:3) — Режим работы таймера n (WGM).
  • CSn2:0 (биты 2:0) — Тактирование таймера n: источник и предделитель.
    CSn2:0Значение
    000Таймер остановлен
    001clk без деления
    010clk/8
    011clk/64
    100clk/256
    101clk/1024
    110Внешний сигнал на входе Tn, спад
    111Внешний сигнал на входе Tn, фронт

TCCRnC — управление таймером n, регистр C

Адреса 0x82 — TCCR1C, 0x92 — TCCR3C, 0xA2 — TCCR4C, 0x122 — TCCR5C, 8 бит, после сброса 0x00.

Бит76543210
ИмяFOCnAFOCnBFOCnC—————
ДоступWWWRRRRR
После сброса00000000
  • 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); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.

Источники

  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

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