Таймеры и процессоры событийОбщие сведения.

Для эффективного управления устройствами в реальном времени микропроцессорные системы должны обеспечить выполнение таких функций как:

● формирование импульсов (меток реального времени) через заданные интер­валы времени;

● подсчет количества импульсов внешнего сигнала на заданном временном ин­тервале;

● контроль состояния линий ввода и измерение длительности входного сигна­ла с заданным логическим уровнем;

● формирование импульсного выходного сигнала с программируемыми часто­той и коэффициентом заполнения (скважностью);

● формирование сигнала заданного логического уровня с программируемой задержкой относительно времени изменения уровня входного сигнала. Один из возможных способов реализации функций управления в реальном времени состоит в использовании надлежащих команд с привлечением централь­ного процессора для их выполнения, т. е. осуществлять реализацию функций уп­равления только программными средствами. Например, для формирования ме­ток реального времени можно использовать подпрограмму, включающую коман­ды загрузки регистра, инкрементации, логическую операцию с флагом перепол­нения регистра и др. Существенный недостаток этого способа — отвлечение центрального процессора от выполнения основной программы на второстепен­ную работу. Поэтому выполнение функций, связанных с управлением устройства­ми в реальном времени, возлагается на специальные аппаратные средства, кото­рые называются таймером. В современных микроконтроллерах таймер выполня­ется в виде отдельного модуля.

рис. 4.8.1

Структурно–функциональные особенности.

Схема простейшего модуля тай­мера изображена на рис. 4.8.1. В его



состав входят:

● суммирующий счетчик таймера, доступный для чтения и записи. При исполь­зовании 16–разрядного счетчика он отображается на карте памяти двумя ре­гистрами для старшего и младшего байтов;

делитель частоты с переменным управляемым коэффициентом деления (К = 2, 4, 8, ...). Делитель предназначен для увеличения длительности времен­ного интервала, формируемого таймером, путем инкрементирования содер­жимого счетчика после поступления определенного числа тактовых импульсов;

триггер переполнения, который устанавливается в единичное состояние по истечении счетной последовательности импульсов. Выходной сигнал тригге­ра можно использовать в качестве метки реального времени или запроса на прерывание.

Путем выбора источника тактирования счётчик может быть настроен:

● на последовательность импульсов, поступающих с выхода управляемого де­лителя частоты. В этом случае модуль таймера работает как таймер (режим таймера);

● на внешние импульсы тактирования, поступающие на один из входов микро­контроллера. В этом случае модуль таймера работает как счетчик событий (режим счетчика событий).

Обычно пуск и останов счетчика выполняются только под управлением про­граммы посредством установки/сброса соответствующего бита. После перепол­нения работа счетчика продолжается. 16–разрядный счетчик генерирует следу­ющую периодическую последовательность кодов: ...

FEh

,

FFh

, 00

h

, 01

h

, 02

h

, ...,

FEh

,

FFh

, ... Программным способом производится загрузка (установкой старше­го и младшего байтов счетчика в требуемое состояние) и чтение текущего кода счетчика. Эти операции можно выполнять в процессе счета, если длительность операций записи и чтения меньше длительности периода следования импульсов тактирования счетчика. рис. 4.8.2

Способы измерения временного интервала. Классический способ.

Рассмотрим особенности использования модуля таймера для измерения времен­ного интервала Тх (рис. 4.8.2). Для этого необходимо:

● прервать выполнение текущей программы в момент времени

t

0—>1


, когда про­исходит изменение импульса на выводе Вход с 0 на 1, с помощью подпро­граммы прерывания произвести сброс счетчика в нулевое состояние и разре­шить счет;

● повторно прервать выполнение текущей программы в момент времени

t

1—>0


, когда происходит изменение импульса на выводе Вход с 1 на 0, и с помощью подпрограммы прерывания остановить счет. Содержимое счетчика будет со­ответствовать длительности интервала Тх, выраженной в двоичной форме числом периодов входных импульсов тактирования.

Процесс измерения временного интервала представлен временными диа­граммами на рис. 4.8.2, где

t

0—>1


,

t

1—>0


— моменты времени, инициирующие начало и завершение счета;

t

1


,

t

2




— время задержки начала и окончания работы счетчика, обусловленное вызовом, выполнением и завершением подпрограмм, обслужива­ющих прерывания. Ошибка счета равна |

t

1




t

2


|.

Рассмотренный способ может быть использован для измерения сигналов сравнительно большой длительности (единицы миллисекунд и более). Его глав­ный недостаток — невозможность одновременного обслуживания нескольких ка­налов. Для устранения указанного недостатка используется два пути:

● простое увеличение числа модулей таймеров (микроконтроллеры компаний

Philips

,

Atmel

,

Mitsubishi

,

Hitachi

);



● модификация структуры модуля таймера путем введения дополнительных ап­паратных средств с использованием способов входного захвата и выходного сравнения (микроконтроллеры фирм

Motorola

,

Microchip

,

Philips

). Эти сред­ства принято называть каналом входного захвата (

Input



Capture



I

С) и вы­ходного сравнения (

Output



Compare

— ОС). рис. 4.8.3

Способ входного захвата.


Для пояснения способа воспользуемся схе­мой канала входного захвата, изображенной рис. 4.8.3. Помимо счетчика тайме­ра, делителя частоты и триггера переполнения в схему канала дополнительно введены:

регистр входного захвата, в который записывается текущее состояние счет­чика таймера по событию изменения логического уровня входного сигнала;

детектор событий, предназначенный для фиксации изменения логического уровня сигнала на входе канала (обычно входом является один из выводов порта) и выдачи строба по факту этого события для записи текущего состоя­ния счетчика таймера в регистр входного захвата. Три вида изменения логи­ческого уровня входного сигнала воспринимаются детектором как событие захвата: с 0 на 1 (фронт), с 1 на 0 (срез) и любое изменение логического уровня сигнала. Вид события захвата устанавливается в процессе инициали­зации модуля таймера и может многократно изменяться по ходу выполнения программы;

триггер входного захвата, используемый для фиксации каждого события за­хвата путем установки в единичное состояние сигнала на своем выходе. рис. 4.8.4

Рассмотрим сущность способа на примере измерения длительности Тх вход­ного сигнала прямоугольной формы (рис. 4.8.4). В этом случае должен быть уста­новлен вид события — «любое изменение логического уровня сигнала». Счетчик таймера постоянно изменяет свое состояние. Детектор событий следит за уров­нем напряжения на входе канала.

В момент времени

t

0–1


, происходит изменение логического уровня входного сигнала с 0 на 1. На выходе детектора событий вырабатывается строб записи, по которому:

● текущее состояние счетчика таймера записывается в виде кода К1 в регистр входного захвата;

триггер входного захвата устанавливается в единичное состояние;

● формируется запрос на прерывание, который информирует микроконтроллер о начале измерения интервала;

● с задержкой времени

t

1


, по отношению к

t

0–1


микроконтроллер считывает код К1 из регистра входного захвата, сбрасывает триггер входного захвата и ини­циализирует детектор события на формирование строба по срезу входного сигнала.

В момент времени

t

1–0


, когда происходит изменение логического уровня сигна­ла на входе детектора с 1 на 0, на выходе детектора событий также вырабатыва­ется строб записи, по которому:

● текущее состояние счетчика таймера записывается в виде кода К2 в регистр входного захвата;

● триггер


входного захвата устанавливается в единичное состояние;

● формируется запрос на прерывание, который информирует микроконтроллер об окончании измерения интервала;

● с задержкой времени

t

2


по отношению к

t

1


_0 микроконтроллер считывает код К2 из регистра входного захвата и сбрасывает триггер входного захвата.

Приведенные временные диаграммы отражают процесс измерения временно­го интервала при отсутствии переполнения счетчика (рис. 4.8.4, а) и при перепол­нении счетчика (рис. 4.8.4, б) и относятся к случаю, когда длительность измеря­емого интервала Тх меньше длительности полного цикла тактирования счетчика таймера NТ, где N — количество импульсов за цикл тактирования; Т — период им­пульсов тактирования.

Длительность измеряемого временного интервала определяется следующими соотношениями:

● Тх = (К2 – К1)10 х Т — при отсутствии переполнения счетчика (К2 > К1);

● Тх = N

T



– (К1 – К2)10 х Т — при переполнении счетчика (К1 > К2),

где (К2 – К1)10, N – (К1 – К2)10 — число импульсов тактирования, поступивших на

вход счетчика таймера за время измерения.

Время перехода к подпрограммам прерывания

t

1


и

t

2


, не влияет на точность измерения, так как задержка при записи текущего состояния счетчика, реализу­емой аппаратными средствами, одна и та же.

Использование запросов на прерывание по событию переполнения счетчика для контроля переполнений, возникающих между фронтом и срезом импульса на входе канала, позволяет измерять длительности импульсов при Тх >> N

T

. рис. 4.8.5

Способ выходного сравнения.


Для организации канала выходного сравнения простейший модуль таймера дополняется следующими функциональ­ными узлами (рис. 4.8.5):

регистром выходного сравнения, в который заносятся двоичные коды К1, и К2, определяющие требуемую длительность формируемого выходного импульса;

схемой сравнения (цифровым компаратором), предназначенной для фикса­ции события сравнения — равенства непрерывно изменяющегося во времени кода счетчика таймера с кодом, хранящимся в регистре выходного сравнения;

триггером выходного сравнения, используемым для установки в единичное состояние сигнала на своем выходе при каждом срабатывании схемы срав­нения;

формирователем уровня, предназначенным для установки логического уров­ня сигнала на выходе канала (обычно выходом является один из выводов порта) по факту события выходного сравнения. Возможны три вида установки: установка уровня логического 0, уровня логической 1 или перевод выхода в инверсное состояние. Вид события выходного сравнения устанавливается в процессе инициализации модуля таймера и может многократно изменяться по ходу выполнения программы.

Рассмотрим процесс формирования выходного прямоугольного импульса, длительность которого определяется разностью кодов К2 – К1 (рис. 4.8.6, а). Циф­ровой компаратор непрерывно сравнивает изменяющийся во времени код счет­чика таймера с предварительно установленным кодом К1 регистра. В момент

t

0


_1,

равенства кодов на выводе «Выход» микроконтроллера и выходе триггера выход­ного сравнения устанавливается уровень логической 1. Одновременно генериру­ется запрос на прерывание микроконтроллера, и в подпрограмме прерывания происходит загрузка нового кода сравнения К2. В момент

t

1


_0

наступает второе событие сравнения, и на выводе «Выход» устанавливается уровень логического 0. Таким образом, длительность сформированного временного интервала

Tx

опре­деляется разностью кодов и не зависит от особенностей программного обеспе­чения микроконтроллера. рис. 4.8.6

Временные диаграммы рис. 4.8.6, б иллюстрируют возможность использова­ния способа выходного сравнения для К12.

Отметим характерные особенности модулей таймеров, построенных с исполь­зованием рассмотренных способов:

● счетчик модуля таймера часто не имеет:

• функции программного останова,


т. е. он работает в режиме постоянного счета. В этом режиме состояние счетчика нельзя синхронизировать с ка­ким–либо моментом работы микропроцессорной системы;

• опции тактирования внешним сигналом,


т. е. он не может работать в режиме счетчика событий;

число каналов входного захвата (

I

С) и выходного сравнения (ОС) модулей таймера микроконтроллеров может быть различным. Например, в семействе НС05 микроконтроллеров

Motorola

типовыми решением является использова­ние одного модуля таймера с каналами

2IC+2OC

или

1IC+1OC,

а в семействе НС11 —

4IC+5OC.

Микроконтроллеры

PIC16

Microchip

содержат до трех мо­дулей таймеров со структурой 1

IC

+1

OC

(обозначается

IC

/ОС);

● в некоторых модулях таймера каналы могут быть произвольно настроены, на функцию входного захвата (

I

С) или выходного сравнения (ОС) посредством инициализации.

Модули процессоров событий.

Следующим этапом в развитии подсистемы реального времени микроконтроллеров стали модули процессоров событий. Впервые такой модуль был предложен фирмой

Intel

. рис. 4.8.7

Модуль процессора событий содержит (рис. 4.8.7):

● счетный модуль


(счетчик и регистр периода), тактируемый импульсной последо­вательностью с выхода программируемого делителя частоты f

BUS




или внешнего генератора. Счетчик имеет опции пуска/останова и сброса в 0. В некоторых модулях счетчик доступен для чтения «на лету» — автоматического копирования содержимого счетчика в специальные буферные регистры. В наиболее совершен­ных счетных модулях возможно изменение коэффициента счета счетчика, реали­зуемого с помощью дополнительного программно доступного регистра периода и многоразрядного цифрового компаратора. При совпадении текущего кода счетчика с кодом регистра периода счетчик автоматически сбрасываются в 0;

● универсальные каналы


захвата/сравнения, обеспечивающие работу процес­сора событий в режимах входного захвата, выходного сравнения и широтно–импульсной модуляции (ШИМ). Для реализации первых двух режимов про­граммно–логическая модель каждого канала включает регистр данных канала и триггер события. В зависимости от выбранного режима регистр данных ка­нала используется для записи кода счетчика в момент наступления входного захвата или для хранения кода выходного сравнения. Триггер устанавливает­ся в 1 при наступлении любого из этих событий. В режиме широтно–импульсной модуляции (рис. 4.8.8) на выводе «Вход/Выход» микроконтроллера фор­мируется последовательность импульсов с периодом, равным периоду Т работы счетчика. Длительность

T

и


импульса прямо пропорциональна коду в регистре данных канала. Отметим, что режим ШИМ в различных моделях процессоров событий имеет существенные отличия. рис. 4.8.8

Использование модулей процессора событий позволяет обрабатывать сигна­лы разного временного масштаба, формировать сигналы ШИМ и синхронизиро­ванные между собой многоканальные импульсные последовательности.

Сторожевые таймеры.

Сторожевой таймер представляет собой аппаратное средство, защищающее микроконтроллер от сбоев при выполнении программы. Причиной сбоя могут быть, например, электрические помехи, вызывающие обра­щение микроконтроллера по неправильному адресу. Сторожевой таймер произ­водит сброс микроконтроллера, если его содержимое не обновляется в течение определенного промежутка времени (обычно от десятков миллисекунд до не­скольких секунд). Если изменение содержимого программного счетчика не соот­ветствует заданной программе, то команда модификации сторожевого таймера не будет выполнена, и он производит сброс микроконтроллера, устанавливая его в исходное состояние.



Рекомендуйте эту статью другим!