Материал: Микропроцессорные устройства систем управления (2005)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

жет работать в асинхронном режиме от дополнительного генератора, со­ держащегося в микроконтроллере. Этот генератор оптимизирован для ра­ боты с кварцевым резонатором часов частотой 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

Источник: https://studfile.net/preview/16521245/