жет работать в асинхронном режиме от дополнительного генератора, со держащегося в микроконтроллере. Этот генератор оптимизирован для ра боты с кварцевым резонатором часов частотой 32,768 кГц, что позволяет получать с помощью таймера 2 импульсы с периодом 1 с.
Управление работой таймеров и обработка их сигналов производится через соответствующие регистры файла регистров ввода-вывода. Регистр масок TIMSK и регистр флагов прерываний TIFR - общие для всех тайме ров и программно доступны для чтения и записи. Остальные регистры управления индивидуальны для каждого таймера. Взаимодействие с тайме рами при формировании заданных временных интервалов практически все гда необходимо производить процедурами ввода-вывода по соответствую щим прерываниям. Основное назначение регистров TIMSK и TIFR - управление прерываниями таймеров.
Регистр TIMSK содержит биты разрешения, а регистр TIFR содержит флаги всех прерываний, вырабатываемых таймерами. Биты одноимен ных разрядов обоих регистров обеспечивают обработку соответствующих прерываний таймеров. Эти вектора прерываний будут описаны далее для каждого таймера.
Символические имена битов разрешения в регистре TIMSK
OCIE2 | TOIE2 | Т1СШГ |
OCIE1A | OCIE1B |
TOIE1 | - |
j TOIE0 1 |
Символические имена битов разрешения в регистре TIFR |
|||
[ OCF2 | TOV2 | ICF1 ~ |
OCF1A j OCF1B |
| TOV1 | - |
TOV0 1 |
Например, с помощью битов 6 обоих регистров (TOIE2 - TOV2) произ водится обработка прерывания по переполнению таймера 2. Установленное программно единичное значение бита TOIE2 разрешает прерывание, а при переполнении таймера 2 устанавливается единичное значение флага TOV2, которое вызывает вектор прерывания TIM20VF (адрес вектора $004), если общее разрешение прерывания установлено. Все флаги регист ра TIFR очищаются аппаратно при вызове векторов прерываний либо про граммно записью единицы в соответствующий бит этого регистра. Анало гично и попарно работают все остальные биты регистров TIMSK и TIFR.
3.4.1. Таймер О
Таймер 0 содержит 8-разрядный суммирующий двоичный счетчик и формирует прерывание только по переполнению с помощью битов TOIE0 и TOV0 регистров TIMSK и TIFR. Кроме этих регистров, таймер 0 использу-
55
ет регистры TCCRO и TCNTO из файла регистров ввода-вывода. Флаг TOV0 при выполнении условий, указанных выше, вызывает вектор пре рывания TIM0_OVF с адресом $009. Регистр TCCR0 управляет работой таймера, а регистр TCNT0 содержит текущее состояние счетчика таймера, оба регистра программно доступны и для чтения, и для записи.
В регистре TCCR0 используются только три младших бита CS02, CS01, CS00. Эти биты управляют входным сигналом таймера 0:
000 - входной сигнал блокируется, таймер остановлен.
001 - таймер работает (при всех последующих значениях управ ляющих битов также работает), входной сигнал счетчика - тактовые импульсы микроконтроллера с частотой fm.
010 - частота входного сигнала fn/8.
011 - частота входного сигнала fTH/64.
100 - частота входного сигнала £„,/256.
101 - частота входного сигнала £^/1024.
110 - внешний входной сигнал, поступающий на вход ТО (альтер нативная функция PB0), падающий фронт.
111 - внешний входной сигнал ТО (PB0), нарастающий фронт.
С помощью регистра TCNT0 можно производить программную обра ботку состояния таймера, запись байта в этот регистр не останавливает ра боту счетчика, а чтение этого же регистра позволяет программно анализи ровать изменение состояния счетчика от момента запуска битами управле ния. Прерывание в таймере 0 с вызовом соответствующего вектора преры вания формируется только флагом переполнения TOV0.
Пример программного управления таймером 0:
ml: |
clr |
rl |
; очистка г1 (г1=0), |
|
|
т2: |
out |
TCCRO, rl; |
пересылка байта из rl |
(0) в регистр |
|
|
|
; управления TCCR0, |
|
||
тЗ: |
out |
TCNTO, rl; |
пересылка байта из rl |
(0) в регистр |
|
|
Idi |
|
; таймера TCNT0, |
|
|
т4: |
г16,1 |
; загрузка в г16 константы 1, |
|||
т5: out |
TIMSK, г16 |
; пересылка в регистр TIMSK константы |
|||
|
Idi |
; |
для разрешения прерывания таймера 0, |
||
тб: |
г16, 3 |
; загрузка в г16 константы управления таймера 0, |
|||
ml: |
out |
TCCRO, rl6 |
; запуск таймера 0, |
||
Команды ml-тЗ |
выполняют подготовку таймера 0 для работы (т2 - ос- |
||||
тановка таймера, тЗ - сброс счетчика в нулевое состояние). Команды т4, т5 необходимы для разрешения прерывания таймера 0. Команды тб, ml производят запуск таймера 0. После выполнения команды ml таймер на чинает работать: частота входного сигнала fmx/64 в соответствии с константой управления, равной 3, через каждые 256 входных импульсов фор-
56
мируется флаг прерывания TOV0. Следовательно, вызов соответствующего вектора прерывания будет производиться каждые 64*256=16384 тактов работы микроконтроллера.
3.4.2. Таймер 1
Таймер 1 построен на основе 16-разрядного двоичного счетчика, форми рует прерывания по 4 различным векторам прерываний, может использо ваться в качестве широтно-импульсного модулятора (ШИМ) и обладает существенно расширенными возможностями по сравнению с таймером 0. Управление прерываниями, в соответствии с ранее описанными процеду рами, производится соответствующими битами регистров TIMSK и TIFR. Кроме этих двух регистров, режимы и параметры работы таймера 1 опре деляют еще 10 регистров файла регистров ввода-вывода.
Переполнение таймера 1 формирует флаг прерывания TOV1 (аналогичен флагу TOV0), который при выполнении необходимых условий вызывает
вектор прерывания TIMl_OVF с адресом $008. В таймере 1 также пре дусмотрены два канала сравнения эталонных значений, хранящихся в реги страх OCR1А и OCR IB, с текущим состоянием счетчика (Compare A, Com pare В). При совпадении эталонного значения с текущим состоянием счет чика формируется соответствующий флаг прерывания OCF1A или OCF1B в регистре TIFR и выполняется такая же стандартная процедура обработки аппаратных прерываний, как и для остальных флагов. Вектор прерывания
канала А - TIM1COMPA с адресом $006, вектор прерывания канала
В- Т1М1_СОМРВ с адресом $007.
Последний флаг прерывания таймера 1 - прерывание режима захват
ICF1. Когда на вход режима захват ICP (альтернативная функция ли нии ввода-вывода PD6) поступает сигнал, текущее состояние таймера за писывается в специальный регистр захвата ICR1 и формируется флаг прерывания ICF1 регистра TIFR со стандартной процедурой вызова векто ра прерывания Т1М1_САРТ с адресом $005. Основное назначение этого режима - отсчет интервала времени от программного запуска таймера до внешнего события, изменившего входной сигнал PD6.
Двухбайтовый регистр ICR1 программно доступен только для чтения и содержит оба байта текущего состояния 16-битового счетчика (ICR1L - ре гистр младшего байта, ICR1H - регистр старшего байта). При чтении со держимого регистра ICR1 в подпрограмме обработки прерывания сначала должна выполняться команда чтения младшего байта (регистр ICR1L) и только после этого - команда чтения старшего байта (регистр ICR1H) \
Чтение и запись содержимого всех 16-битовых регистров необходимо произво дить в определенной последовательности для обеспечения одновременного доступа к обоим байтам. В процедурах доступа старший байт всегда помещается в регистр временного хранения TEMP.
57
Процедуры доступа ко всем двухбайтовым регистрам должны выполняться в соответствии с правилами данного примечания.
Остальные параметры и режимы задаются регистрами TCCR1A и TCCR1B.
Символические имена битов управления в регистре TCCR1А
|COMlAl|COMlA0lCQMlBl|CQMlB0| - ( - \ PWM11 | PWM10|
Каждый канал сравнения в дополнение к флагу прерывания может фор мировать на выводах порта D выходной сигнал: ОС1А (альтернативная функция PD5), ОС1В (альтернативная функция PD4) с параметрами, определяемыми битами COM1A1, СОМ1 АО, COMIBI, СОМ1В0 регистра TCCR1A. Режимы формирования выходных сигналов для каналов Compare A, Compare В одинаковы и соответствуют битам управления СОМ 1X1, СОМ 1X0 (X - это или канал А, или канал В) следующим образом:
00 - выходной сигнал ОС IX не формируется, выходы порта D не ис пользуются.
01 - выходной сигнал ОС IX импульсный.
10 - выходной сигнал ОС IX имеет активный нулевой уровень. 11 - выходной сигнал ОС IX имеет активный единичный уровень.
Рекомендуется при использовании сигнала ОСIX запретить прерывание по этому каналу очисткой соответствующего бита разрешения в регистре TIMSK, иначе произойдет обработка прерывания при формировании этого сигнала. Эти же сигналы являются выходными для таймера, работающего в режиме модулятора ШИМ.
Последние биты PWM11, PWM10 регистра TCCR1A определяют работу таймера 1 в режиме модулятора ШИМ следующим образом:
00 - режим модулятора ШИМ запрещен (работа в стандартных режимах таймера).
01 - 8-битовый модулятор ШИМ.
10 - 9-битовый модулятор ШИМ,
11 - 10-битовый модулятор ШИМ.
Работа в режиме модулятора ШИМ будет описана позднее.
Команда чтения младшего байта одновременно записывает старший байт в TEMP, а следующая за этим операция чтения старшего байта фактически выполня ется из регистра TEMP. При записи последовательность обратная: сначала произво дится запись старшего байта (в действительности выполняется в TEMP), а следую щая за ней операция записи младшего байта производит одновременную передачу старшего байта из TEMP. Для корректного выполнения доступа к таким регистрам прерывание должно быть запрещено перед началом обмена.
58
Символические имена битов управления в регистре TCCR1B
1 ICNC1 1 ICES1 | - 1 - СТС1 | CS12 CS11 1 CS10 1
Биты ICNC1 и ICES1 второго регистра управления TCCR1B определяют работу таймера 1 в режиме "захват" (capture). ICNC1 определяет функцию дополнительного контроля входного сигнала ICP. При нулевом уровне это го бита функция "захват" включается первым тактом микроконтроллера после активного уровня сигнала ICP. При единичном значении бита требу ется, чтобы входной сигнал ICP был активным не менее 4 тактов микро контроллера. Этот режим позволяет устранить ложное включение под дей ствием кратковременных помех. Бит ICES1 определяет активный уровень сигнала ICP, при нуле - переход сигнала в активное состояние по падаю щему фронту, при единице - по нарастающему фронту.
Бит С Т О может разрешить сброс таймера 1 по сигналу сравнения кана ла А. При нулевом значении бита сброс таймера по каналу сравнения А не производится, при единичном значении бита и совпадении эталонного зна чения канала А с текущим состоянием таймера производится сброс его счетчика в исходное состояние ($0000). Биты CS12, CS11, CS10 задают параметры входного сигнала для счетчика в таймере 1:
000 - входной сигнал блокируется, таймер остановлен.
001 - таймер работает (при всех последующих значениях управляющих битов также работает), входной сигнал счетчика - тактовые им пульсы микроконтроллера с частотой im.
010 - частота входного сигнала fT„/8.
011 - частота входного сигнала fTH/64.
100 - частота входного сигнала fT„/256.
101 - частота входного сигнала fTH/1024.
110 - внешний входной сигнал, поступающий на вход Т1 (альтерна тивная функция линии РВ1), падающий фронт.
111-внешний входной сигнал Tl (PB1), нарастающий фронт.
При остановке таймера этими битами (000) все функции блокируются так же, как и в таймере 0. При работе таймера от внешнего источника сигнала тактовые импульсы микроконтроллера стробируют входные сигналы счет чика.
Кроме регистра ICR1, работу таймера I обеспечивают еще три 16разрядных регистра: регистр текущего состояния таймера TCNT1, регистр эталонного значения канала сравнения A OCR1A, регистр эталонного значения канала сравнения В OCR1B. Эти регистры программно доступны и для чтения, и для записи и фактически образуются регистровыми парами (индекс L - регистр младшего байта, индекс Н - регистр старшего байта). Процедуры доступа, как и ко всем двухбайтовым регистрам, должны вы-
59