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

Таймер-счётчик 0 (8 бит) ATmega32A: регистры и биты

8-битный таймер-счётчик 0: считает такты через предделитель или импульсы на входе T0; канал сравнения OCR0 управляет выводом OC0 (ШИМ, генерация частоты). Режим задают биты WGM01:0 в TCCR0, тактирование — CS02:0.

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

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

РегистрАдресНазначениеПосле сброса
TCNT00x52 (I/O 0x32)Счётный регистр таймера 00x00
TCCR00x53 (I/O 0x33)Управление таймером 00x00
TIFR0x58 (I/O 0x38)Флаги прерываний таймера0x00
TIMSK0x59 (I/O 0x39)Маска прерываний таймера0x00
OCR00x5C (I/O 0x3C)Регистр сравнения таймера 00x00

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

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

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

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

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

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

Результат

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

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

TCCR0 = 0;

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

ldi r16, 0x00
out TCCR0, r16

TCNT0 — счётный регистр таймера 0

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

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

TCCR0 — управление таймером 0

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

Бит76543210
ИмяFOC0WGM00COM01COM00WGM01CS02CS01CS00
ДоступWR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • FOC0 (бит 7) — Принудительное совпадение для OC0.
  • WGM00 (бит 6) — Режим работы таймера 0, бит WGM00.
  • COM01:0 (биты 5:4) — Режим вывода OC0.
  • WGM01 (бит 3) — Режим работы таймера 0, бит WGM01.
  • CS02:0 (биты 2:0) — Тактирование таймера 0: источник и предделитель.
    CS02:0Значение
    000Таймер остановлен
    001clk без деления
    010clk/8
    011clk/64
    100clk/256
    101clk/1024
    110Внешний сигнал на входе T0, спад
    111Внешний сигнал на входе T0, фронт

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

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

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

Остальные биты регистра относятся к другим блокам: OCF2 — флаг совпадения с ocr2 (TC2), TOV2 — флаг переполнения таймера 2 (TC2), ICF1 — флаг захвата таймера 1 (TC1), OCF1A — флаг совпадения с ocr1a (TC1), OCF1B — флаг совпадения с ocr1b (TC1), TOV1 — флаг переполнения таймера 1 (TC1).

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

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

Бит76543210
ИмяOCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1OCIE0TOIE0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • OCIE0 (бит 1) — Прерывание по совпадению с OCR0.
  • TOIE0 (бит 0) — Прерывание по переполнению таймера 0.

Остальные биты регистра относятся к другим блокам: OCIE2 — прерывание по совпадению с ocr2 (TC2), TOIE2 — прерывание по переполнению таймера 2 (TC2), TICIE1 — прерывание по захвату таймера 1 (TC1), OCIE1A — прерывание по совпадению с ocr1a (TC1), OCIE1B — прерывание по совпадению с ocr1b (TC1), TOIE1 — прерывание по переполнению таймера 1 (TC1).

OCR0 — регистр сравнения таймера 0

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

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

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

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

Командами IN и OUT доступны TCNT0 (0x32), TCCR0 (0x33), TIFR (0x38), TIMSK (0x39) и OCR0 (0x3C). В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

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

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

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

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

Источники

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

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

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

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