Общие сведения.
Для эффективного управления устройствами в реальном времени микропроцессорные системы должны обеспечить выполнение таких функций как:
? формирование импульсов (меток реального времени) через заданные интервалы времени;
? подсчет количества импульсов внешнего сигнала на заданном временном интервале;
? контроль состояния линий ввода и измерение длительности входного сигнала с заданным логическим уровнем;
? формирование импульсного выходного сигнала с программируемыми частотой и коэффициентом заполнения (скважностью);
? формирование сигнала заданного логического уровня с программируемой задержкой относительно времени изменения уровня входного сигнала. Один из возможных способов реализации функций управления в реальном времени состоит в использовании надлежащих команд с привлечением центрального процессора для их выполнения, т. е. осуществлять реализацию функций управления только программными средствами. Например, для формирования меток реального времени можно использовать подпрограмму, включающую команды загрузки регистра, инкрементации, логическую операцию с флагом переполнения регистра и др. Существенный недостаток этого способа — отвлечение центрального процессора от выполнения основной программы на второстепенную работу. Поэтому выполнение функций, связанных с управлением устройствами в реальном времени, возлагается на специальные аппаратные средства, которые называются таймером. В современных микроконтроллерах таймер выполняется в виде отдельного модуля.
Структурно–функциональные особенности.
Схема простейшего модуля таймера изображена на рис. 4.8.1. В его
состав входят:
? суммирующий счетчик таймера, доступный для чтения и записи. При использовании 16–разрядного счетчика он отображается на карте памяти двумя регистрами для старшего и младшего байтов;
? делитель частоты с переменным управляемым коэффициентом деления (К = 2, 4, 8, …). Делитель предназначен для увеличения длительности временного интервала, формируемого таймером, путем инкрементирования содержимого счетчика после поступления определенного числа тактовых импульсов;
? триггер переполнения, который устанавливается в единичное состояние по истечении счетной последовательности импульсов. Выходной сигнал триггера можно использовать в качестве метки реального времени или запроса на прерывание.
Путем выбора источника тактирования счётчик может быть настроен:
? на последовательность импульсов, поступающих с выхода управляемого делителя частоты. В этом случае модуль таймера работает как таймер (режим таймера);
? на внешние импульсы тактирования, поступающие на один из входов микроконтроллера. В этом случае модуль таймера работает как счетчик событий (режим счетчика событий).
Обычно пуск и останов счетчика выполняются только под управлением программы посредством установки/сброса соответствующего бита. После переполнения работа счетчика продолжается. 16–разрядный счетчик генерирует следующую периодическую последовательность кодов: …
FEh
,
FFh
, 00
h
, 01
h
, 02
h
, …,
FEh
,
FFh
, … Программным способом производится загрузка (установкой старшего и младшего байтов счетчика в требуемое состояние) и чтение текущего кода счетчика. Эти операции можно выполнять в процессе счета, если длительность операций записи и чтения меньше длительности периода следования импульсов тактирования счетчика.
Способы измерения временного интервала. Классический способ.
Рассмотрим особенности использования модуля таймера для измерения временного интервала Тх (рис. 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. Помимо счетчика таймера, делителя частоты и триггера переполнения в схему канала дополнительно введены:
? регистр входного захвата, в который записывается текущее состояние счетчика таймера по событию изменения логического уровня входного сигнала;
? детектор событий, предназначенный для фиксации изменения логического уровня сигнала на входе канала (обычно входом является один из выводов порта) и выдачи строба по факту этого события для записи текущего состояния счетчика таймера в регистр входного захвата. Три вида изменения логического уровня входного сигнала воспринимаются детектором как событие захвата: с 0 на 1 (фронт), с 1 на 0 (срез) и любое изменение логического уровня сигнала. Вид события захвата устанавливается в процессе инициализации модуля таймера и может многократно изменяться по ходу выполнения программы;
? триггер входного захвата, используемый для фиксации каждого события захвата путем установки в единичное состояние сигнала на своем выходе.
Рассмотрим сущность способа на примере измерения длительности Тх входного сигнала прямоугольной формы (рис. 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):
? регистром выходного сравнения, в который заносятся двоичные коды К1, и К2, определяющие требуемую длительность формируемого выходного импульса;
? схемой сравнения (цифровым компаратором), предназначенной для фиксации события сравнения — равенства непрерывно изменяющегося во времени кода счетчика таймера с кодом, хранящимся в регистре выходного сравнения;
? триггером выходного сравнения, используемым для установки в единичное состояние сигнала на своем выходе при каждом срабатывании схемы сравнения;
? формирователем уровня, предназначенным для установки логического уровня сигнала на выходе канала (обычно выходом является один из выводов порта) по факту события выходного сравнения. Возможны три вида установки: установка уровня логического 0, уровня логической 1 или перевод выхода в инверсное состояние. Вид события выходного сравнения устанавливается в процессе инициализации модуля таймера и может многократно изменяться по ходу выполнения программы.
Рассмотрим процесс формирования выходного прямоугольного импульса, длительность которого определяется разностью кодов К2 – К1 (рис. 4.8.6, а). Цифровой компаратор непрерывно сравнивает изменяющийся во времени код счетчика таймера с предварительно установленным кодом К1 регистра. В момент
t
0
_1,
равенства кодов на выводе «Выход» микроконтроллера и выходе триггера выходного сравнения устанавливается уровень логической 1. Одновременно генерируется запрос на прерывание микроконтроллера, и в подпрограмме прерывания происходит загрузка нового кода сравнения К2. В момент
t
1
_0
наступает второе событие сравнения, и на выводе «Выход» устанавливается уровень логического 0. Таким образом, длительность сформированного временного интервала
Tx
определяется разностью кодов и не зависит от особенностей программного обеспечения микроконтроллера.
Временные диаграммы рис. 4.8.6, б иллюстрируют возможность использования способа выходного сравнения для К1>К2.
Отметим характерные особенности модулей таймеров, построенных с использованием рассмотренных способов:
? счетчик модуля таймера часто не имеет:
• функции программного останова,
т. е. он работает в режиме постоянного счета. В этом режиме состояние счетчика нельзя синхронизировать с каким–либо моментом работы микропроцессорной системы;
• опции тактирования внешним сигналом,
т. е. он не может работать в режиме счетчика событий;
? число каналов входного захвата (
I
С) и выходного сравнения (ОС) модулей таймера микроконтроллеров может быть различным. Например, в семействе НС05 микроконтроллеров
Motorola
типовыми решением является использование одного модуля таймера с каналами
2IC+2OC
или
1IC+1OC,
а в семействе НС11 —
4IC+5OC.
Микроконтроллеры
PIC16
Microchip
содержат до трех модулей таймеров со структурой 1
IC
+1
OC
(обозначается
IC
/ОС);
? в некоторых модулях таймера каналы могут быть произвольно настроены, на функцию входного захвата (
I
С) или выходного сравнения (ОС) посредством инициализации.
Модули процессоров событий.
Следующим этапом в развитии подсистемы реального времени микроконтроллеров стали модули процессоров событий. Впервые такой модуль был предложен фирмой
Intel
.
Модуль процессора событий содержит (рис. 4.8.7):
? счетный модуль
(счетчик и регистр периода), тактируемый импульсной последовательностью с выхода программируемого делителя частоты f
BUS
или внешнего генератора. Счетчик имеет опции пуска/останова и сброса в 0. В некоторых модулях счетчик доступен для чтения «на лету» — автоматического копирования содержимого счетчика в специальные буферные регистры. В наиболее совершенных счетных модулях возможно изменение коэффициента счета счетчика, реализуемого с помощью дополнительного программно доступного регистра периода и многоразрядного цифрового компаратора. При совпадении текущего кода счетчика с кодом регистра периода счетчик автоматически сбрасываются в 0;
? универсальные каналы
захвата/сравнения, обеспечивающие работу процессора событий в режимах входного захвата, выходного сравнения и широтно–импульсной модуляции (ШИМ). Для реализации первых двух режимов программно–логическая модель каждого канала включает регистр данных канала и триггер события. В зависимости от выбранного режима регистр данных канала используется для записи кода счетчика в момент наступления входного захвата или для хранения кода выходного сравнения. Триггер устанавливается в 1 при наступлении любого из этих событий. В режиме широтно–импульсной модуляции (рис. 4.8.8) на выводе «Вход/Выход» микроконтроллера формируется последовательность импульсов с периодом, равным периоду Т работы счетчика. Длительность
T
и
импульса прямо пропорциональна коду в регистре данных канала. Отметим, что режим ШИМ в различных моделях процессоров событий имеет существенные отличия.
Использование модулей процессора событий позволяет обрабатывать сигналы разного временного масштаба, формировать сигналы ШИМ и синхронизированные между собой многоканальные импульсные последовательности.
Сторожевые таймеры.
Сторожевой таймер представляет собой аппаратное средство, защищающее микроконтроллер от сбоев при выполнении программы. Причиной сбоя могут быть, например, электрические помехи, вызывающие обращение микроконтроллера по неправильному адресу. Сторожевой таймер производит сброс микроконтроллера, если его содержимое не обновляется в течение определенного промежутка времени (обычно от десятков миллисекунд до нескольких секунд). Если изменение содержимого программного счетчика не соответствует заданной программе, то команда модификации сторожевого таймера не будет выполнена, и он производит сброс микроконтроллера, устанавливая его в исходное состояние.