- •Таймерная подсистема
- •Основной счетчик
- •Техника измерения времени (чтение счетчика)
- •Цена «деления», диапазон измерения и управление входной частотой
- •Программный либо аппаратный захват времени.
- •Техника формирования события в заранее заданное время
- •Сравнение с уставкой
- •Загрузка значения и сравнение с нулем (использование сигнала переполнения).
- •Автоперезагрузка и формирование периодического события.
- •Широтно_импульсный модулятор
- •Все возможности, объединенные в одном таймерном канале
- •Таймерная подсистема в мк aDuC70xx
- •Структура таймерного канала в микросистеме aDuC70xx
- •Определение констант для работы с битовыми полями регистра управления таймером 1.
Структура таймерного канала в микросистеме aDuC70xx
Таймер1 это 32-битовый универсальный таймер/счетчик общего назначения с предделителем.
В качестве входной частоты предделителя по выбору программиста можно использовать частоту ядра, либо частоту 32 КГц, либо внешнюю частоту с входов параллельного порта P1.0 либо P0.6.
Работает по выбору программиста, как на сложение, так и на вычитание.
Счетчик можно сконфигурировать как обычный двоичный, либо как работающий в режиме «Часы:Минуты:Секунды:СотыеДоли-Секунды.
Структура Таймера1 изображена на рисунке.
Таймер1 имеет регистр захвата (Capture), в котором может фиксироваться значение счетчика Таймера1 в момент возникновения выбранного программистом запроса прерывания. Это позволяет с высокой точностью зафиксировать момент возникновения выбранного запроса. Кроме перечисленного, Таймер1 можно использовать для периодического запуска аналого-цифрового преобразования.
Интерфейс Таймера1 включает пять регистров СФ:
T1LD – Адрес: 0xFFFF0320. Разрядность: 32 бит. Доступ: R/W. Регистр уставки, из которого по переполнению может происходить перезагрузка счетчика.
T1VAL – Адрес: 0xFFFF0324. Разрядность: 32 бит. Доступ: R/o. Из этого адреса можно считать текущее содержимое счетчика Таймера1.
T1CON – Адрес: 0xFFFF0328. Разрядность: 32 бит. Доступ: R/W
T1CLRI – Адрес: 0xFFFF032C. Разрядность: 8 бит. Доступ: R/W. Любая запись в него ‑ сброс запроса прерывания от Таймера1.
T1CAP – Адрес: 0xFFFF0330. Разрядность: 32 бит. Доступ: R/W. Из этого регистра можно считать значение времени, автоматически «захваченное» при возникновении выбранного программистом запроса прерывания.
Регистр управления Таймером1 T1CON
Биты |
Описание |
31..18 |
Резервированы |
17 |
Разрешить (1) или запретить (0) захват момента времени по выбранному событию (запросу прерывания) |
16..12 |
Выбор события, вызывающего захват времени (см. табл. для подсистемы прерываний) |
11..9 |
Выбор источника 000 – частота ядра; 001 – частота 32 768 Гц; 010 – фронт импульса на входе P1.0 011 – фронт импульса на входе P0.6 |
8 |
Направление счета: сложение (1) или вычитание (0 – значение по умолчанию) |
7 |
Разрешить (1) работу Таймера1 или запретить (0 – значение по умолчанию) |
6 |
Режим работы Таймера1: свободный счёт (0 – значение по умолчанию) или с автоперезагрузкой (1) |
5..4 |
Формат счета: 00 – двоичный 10 – (0….23 Часа): Минуты: Секунды: (1/128)Доли 11 ‑ (0..255 Часов): Минуты: Секунды: (1/128)Доли |
3..0 |
Коэффициент предделителя: 0000 – 1, 0100 – 16, 1000 – 256, 1111 – 32768 |
Определение констант для работы с битовыми полями регистра управления таймером 1.
//=== Таймерная подсистема =====
// Определение констант для настройки Tm1
// Регистрация события
#define Event (1<<17)
// Входная частота
#define F_P10_1 (10<<9) // Биты 11-9 в регистре управления таймера
#define F_P06_1 (11<<9)
#define F32K_1 (1<<9)
#define FCore_1 0
// Направление счета
#define Up_1 (1<<8) // Бит 8
#define Down_1 0
// Пуск
#define En_1 (1<<7) // Бит 7
#define Dis_1 0
// Перезагрузка
#define Rld_1 (1<<6) // Бит 6
#define Free_1 0
// Режим счета
#define H24ms_1 (10<<4) // Биты 5-4
#define H256ms_1 (11<<4) // Биты 5-4
#define Bin_1 0
// Предделитель
#define P32K_1 0x0F // Биты 3-0
#define P256_1 (1<<3) // Биты 3-0
#define P16_1 (1<<2)
#define P1_1 0