ТАЙМЕРЫ И ПРОЦЕССОРЫ СОБЫТИЙ

Большинство задач управления, которые возлагаются на МП-системы, должны выполняться в реальном времени. Понятие "управление в реальном времени" означает способность МП-системы получить информацию о состоянии управляемого объекта, выполнить необходимые расчеты и сформировать управляющие воздействия в течение интервала времени, по истечении которого эти воздействия вызовут желаемое изменение поведения объекта. Возможность использования того или иного МК для управления конкретным устройством в реальном времени определяется в первую очередь производительностью процессорного ядра, т.к. МК должен успеть за строго ограниченное время выполнить расчет корректирующего воздействия. Однако только высокой производительности недостаточно. Необходимо организовать прием информации с датчиков и выдачу управляющих сигналов таким образом, чтобы при сохранении требуемой точности на эти операции расходовалось как можно меньше времени. В противном случае не останется времени для выполнения вычислений. Эффективное распределение задач управления между различными модулями МК обеспечивает возможность качественного управления в реальном времени. Многие подсистемы МК используются для решения этих задач, но в первую очередь среди них выделяют подсистему прерываний и модуль таймера. Развитая подсистема прерываний позволяет сократить время реакции МП-системы на изменения состояния объекта. Модули таймеров служат для приема информации отдатчиков с времяим-пульсными выходами, а также для формирования управляющих воздействий в виде последовательности импульсов с изменяющимися параметрами.

Опыт построения МП-систем позволяет выделить типовые задачи, которые должен уметь решать МК для эффективного управления в реальном времени:

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

2. Контроль за изменением состояния линии ввода МК.

3. Измерение длительности сигнала заданного логического уровня на линии ввода МК.

4. Подсчет числа импульсов внешнего сигнала на заданном временном интервале.

5. Формирование на линии вывода МК сигнала заданного логического уровня с программируемой задержкой по отношению к изменению сигнала на линии ввода.

6. Формирование на линии вывода МК импульсного сигнала с программируемой частотой и программируемым коэффициентом заполнения.

Каждая из перечисленных задач в отдельности может быть выполнена только программными средствами, без использования специальных аппаратных решений. Так, для формирования интервалов времени следует загрузить в регистр центрального процессора число, а затем выполнять команду декрементирования этого регистра до тех пор, пока содержимое регистра не станет равным нулю. Обычно такую "связку" команд называют программной задержкой. Для контроля за изменением состояния линии ввода следует организовать постоянный опрос линии одной из команд чтения порта ввода/вывода. Такое решение называют поллингом. Похожие решения можно предложить и для остальных перечисленных задач. Однако все эти решения будут обладать одним недостатком: невозможностью выполнения вычислений одновременно с отсчетом временного интервала или контролем состояния линии ввода/вывода. Поэтому для выполнения функций, связанных с управлением в реальном времени, в состав МК включаются специальные аппаратные средства, которые называют таймерами.

Модуль таймера 8-разрядного МК представляет собой 16-разрядный счетчик со схемой управления (Рис. 1.16). В карте памяти МК счетчик отображается двумя регистрами: ТН — старший байт счетчика, TL — младший байт. Регистры доступны для чтения и для записи. Направление счета счетчика — только прямое, т.е. при поступлении тактовых импульсов десятичный эквивалент двоичного кода счетчика изменяется в сторону увеличения. В зависимости от программных настроек счетчик может использовать один из двух источников тактирования:

1. Импульсную последовательность с выхода управляемого делителя частоты feus.

2. Внешнюю импульсную последовательность, поступающую на один из входов МК.

В первом случае говорят, что счетчик работает в режиме таймера, во втором — в режиме счетчика событий. При переполнении счетчика устанавливается триггер переполнения TF, который генерирует запрос на прерывание, если прерывания от таймера разрешены. После переполнения работа счетчика продолжается. Последовательность изменения кодов следующая: $FFFF, $0000, $0001 и т.д. Пуск и останов счетчика могут выполняться только под управлением программы посредством установки/сброса соответствующего бита. Программа также может установить старший (ТН) и младший (TL) байты счетчика в произвольное состояние, или прочитать текущий код счетчика. Однако эти операции не следует выполнять в процессе счета, т.к. длительность операции чтения или записи может превысить длительность периода частоты тактирования счетчика. Тогда за время чтения одного из байтов, второй успеет измениться. В результате, будет прочитана недостоверная информация. По этой же причине может оказаться ошибочной операция записи. Например, пользователь записывает в регистры счетчика код $0005: сначала старший байт $00, а затем младший — $05. Если текущее состояние счетчика пользователю неизвестно, то может оказаться, что на момент завершения операции записи старшего байта младший равен $FF. Тогда в процессе записи младшего байта старший, ранее записанный, успеет измениться, и конечный код счетчика будет равен $0105.

Если рассмотренный таймер используется для измерения временного интервала tx (Рис. 1.17), то необходимо выполнить следующую последовательность действий:

1. Прервать выполнение текущей программы при изменении сигнала на линии РТх1 с 0 на 10 В подпрограмме прерывания установить регистры счетчика таймера в $0000 и разрешить счет.

2. При изменении сигнала на линии РТх1 с 1 на 0 еще раз прервать выполнение программы МК. В подпрограмме прерывания остановить счет. Код в регистрах ТН и TL будет равен длительности интервала tx, выраженной числом периодов частоты тактирования счетчика таймера.

Однако такой способ измерения годится для сигналов, длительность которых составляет единицы мс и более. Моменты разрешения счета таймера ^ и его остановки f2 не совпадают с моментами изменения сигнала на входе РТх1, т.к. пуск и останов выполняются в подпрограмме прерывания. Ошибка счета равна t<\ - Г2- Каждое из значений ^ или f2 определяется временем перехода МК к выполнению подпрограммы прерывания и временем выполнения некоторого количества инструкций, предшествующих команде разрешения или останова счета таймера. Вторая величина является систематической ошибкой и может быть учтена при выполнении дальнейших расчетов, в то время как первая — время перехода на подпрограмму прерывания — величина случайная, которая зависит от особенностей выполнения программного обеспечения МП-системы. Так, если рассматриваемых каналов измерения несколько и изменение сигналов на входах PTxi произошло одновременно, то в первом из обслуженных по прерыванию каналов ошибка будет минимальной, а в последнем — максимальной. Эта максимальная ошибка может составить несколько десятков мкс, поэтому рассмотренный метод не может быть использован для измерения временных интервалов микросекундного диапазона. В противном случае точность измерения будет недостаточной. Наряду с задачей измерения временного интервала может возникнуть необходимость одновременного формирования времяимпульсных сигналов по нескольким каналам. Тогда желательно, чтобы МК имел в своем составе несколько таймеров. Увеличение числа модулей таймеров, интегрированных на кристалл МК, является объективной тенденцией совершенствования структуры современных МК.

 

Рассмотренный "классический" модуль таймера наиболее часто используется в МК с архитектурой MCS-51.

Он претерпел некоторые усовершенствования:

1. Дополнительная логика счетного входа позволяет тактовым импульсам поступать на вход счетчика, если уровень сигнала на одной из линий ввода равен 1. Такое решение повышает точность измерения временного интервала, т.к. интервалы ^ и f2 теперь не являются составляющими погрешности измерения.

2. Реализован режим перезагрузки счетчика произвольным кодом в момент переполнения. Это позволяет формировать метки реального времени с периодом, отличным от периода полного коэффициента счета, равного 216.

Однако эти дополнения не устраняют главного недостатка модуля "классического" таймера — невозможность одновременного обслуживания (измерения или формирования импульсного сигнала) сразу нескольких каналов.

Совершенствование структуры подсистемы реального времени 8-разрядных МК ведется по двум направлениям:

1. Простое увеличение числа модулей таймеров. Этот путь характерен для части МК компаний Philips и Atmel со структурой MCS-51, для МК компаний Mitsubishi и Hitachi.

2. Модификация структуры модуля таймера, при которой увеличение числа каналов достигается не увеличением числа счетчиков, а введением дополнительных аппаратных средств входного захвата и выходного сравнения. Такой путь характерен для 8-разрядных МК Motorola, Microchip, Philips, Infineon.

Типовая структура усовершенствованного модуля таймера представлена на Рис. 1.18 и 1.20. Счетчик таймера дополнен аппаратными средствами входного захвата и выходного сравнения. Эти средства принято называть каналом входного захвата 1C (Input Capture) и выходного сравнения ОС (Output Compare).

Принцип действия канала входного захвата поясняет Рис. 1.18. Схема детектора события "наблюдает" за уровнем напряжения на одном их входов МК. Обычно это одна из линий порта ввода/вывода. При изменении уровня логического сигнала на входе детектора с 0 на 1 или наоборот вырабатывается строб записи и текущее состояние счетчика таймера записывается в 16-разрядный регистр данных TIC канала захвата. Описанное действие в микропроцессорной технике называют событием захвата. Предусмотрены три типа изменения сигнала на входе детектора, которые воспринимаются как событие захвата:

1. Изменение логического уровня с 0 на 1 (нарастающий фронт сигнала).

2. Изменение логического уровня с 1 на 0 (падающий фронт сигнала).

3. Любое изменение логического уровня сигнала.

Выбор типа события захвата устанавливается в процессе инициализации модуля таймера и может многократно изменяться по ходу выполнения программы. Каждое событие захвата отмечается установкой в 1 триггера TIC. Состояние триггера может быть считано программно, а если прерывания по событию захвата разрешены, то генерируется запрос на прерывание.

Временные диаграммы на Рис. 1.19 поясняют процесс измерения временного интервала с использованием режима входного захвата. Первоначально детектор события инициализируется на контроль за нарастающим фронтом сигнала на линии РТх1. При изменении уровня сигнала с 0 на 1 код счетчика К, копируется в регистр канала захвата TIC. Триггер TIF устанавливается в 1, одновременно формируется запрос на прерывание: таймер "сообщает" МК о том, что измеряемый интервал начался. С задержкой времени ^ по отношению к моменту появления запроса на прерывание МК считывает код К) из регистра TIC, сбрасывает триггер TIF и инициализирует детектор события на контроль за падающим фронтом сигнала РТх1. При изменении уровня сигнала с 1 на 0 детектор снова фиксирует событие захвата и код счетчика К2 копируется в регистр TIC. Снова выставляется запрос на прерывание, с задержкой Г2 этот код считывается в память МК. Разность кодов К2 - К^ и есть длительность измеряемого временного интервала, выраженная в числе периодов частоты тактирования счетчика таймера. Максимальная ошибка измерения равна двум периодам частоты тактирования, т.к. погрешность детектора событий не может превышать единицы квантования таймера. Время перехода к подпрограммам прерывания t, или f2 не оказывает влияния на точность измерения, т.к. копирование текущего состояния счетчика осуществляется аппаратными, а не программными средствами. Однако время перехода на подпрограмму прерывания f, накладывает ограничение на длительность измеряемого интервала tx, т.к. обсуждаемый метод реализуем при условии, что второе событие захвата произойдет позже, чем код К, будет считан в память МК.

 

Структура аппаратных средств канала выходного сравнения представлена на Рис. 1.20. Многоразрядный цифровой компаратор непрерывно сравнивает изменяющийся во времени код счетчика таймера с кодом, который записан в 16-разрядном регистре ТОС канала сравнения. В момент равенства кодов на одном из выводов МК (РТх2 на Рис. 1.20) устанавливается заданный уровень логического сигнала. Рассмотренное действие называют событием выходного сравнения. Предусмотрены три типа изменения сигнала на выходе РТх2 в момент события выходного сравнения:

1. Инвертирование сигнала на выходе.

2. Установка низкого логического уровня.

3. Установка высокого логического уровня.

При наступлении события захвата устанавливается в 1 триггер TOR Аналогично предыдущему случаю, состояние триггера может быть считано программно, а если прерывания по событию выходного сравнения разрешены, то генерируется запрос на прерывание.

Временные диаграммы Рис. 1.21 иллюстрируют способ формирования временного интервала предварительно рассчитанной длительности Гх с использованием аппаратных средств канала выходного сравнения. Первое событие сравнения в момент t-i формирует нарастающий фронт сигнала РТх2. Одновременно генерируется запрос на прерывание МК и в подпрограмме обработки прерывания происходит загрузка нового кода сравнения К2. Время, необходимое для записи нового значения в регистр канала сравнения ТОО, ограничивает минимальную длительность формируемого временного интервала. В момент Г2 наступает второе событие сравнения и выход РТх2 устанавливается в 0. Таким образом, длительность сформированного временного интервала fx определяется только разностью кодов и не зависит от особенностей программного обеспечения МК.

В рассмотренных примерах каждому событию модуля таймера (изменению уровня логического сигнала на входе или выходе МК) ставится в соответствие код счетчика, т.е. счетчик используется для создания непрерывно изменяющихся меток текущего времени. В отличие от "классического" таймера, где счетчик используется непосредственно для формирования кода измеряемого временного интервала, в усовершенствованном таймере счетчик лишь создает образ времени, подобно часам. А все действия по формированию или измерению временных интервалов производят аппаратные средства сравнения/захвата. Поэтому счетчик в составе модуля усовершенствованного таймера называют "счетчиком временной базы" или просто "временной базой". Эта же терминология сохранится и далее в модулях процессоров событий.

Если говорить о модификациях модуля усовершенствованного таймера в МК различных фирм, то необходимо отметить следующие особенности:

• Число каналов входного захвата и выходного сравнения (1C и ОС), которые реализованы в модуле усовершенствованного таймера МК, может быть различно. Так, в МК семейства НС05 фирмы Motorola типовыми решениями являются модули 2IC + 20С или 1IC + ЮС, и модуль таймера в составе МК всегда только один. А МК PIC16 фирмы Microchip содержат до трех модулей таймеров, но обязательно со структурой 11C или ЮС (см. ниже).

• В ряде модулей каналы могут быть произвольно настроены на функцию входного захвата (1C) или выходного сравнения (ОС) посредством инициализации.

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

• Часто счетчик таймера не имеет опции тактирования внешним сигналом, т.е. не может работать в режиме счетчика событий.

Аппаратные средства усовершенствованного таймера позволяют решить многие задачи управления в реальном времени. Однако процесс совершенствования алгоритмов управления предъявляет все новые требования к структуре МК. И, как следствие, все более отчетливо проявляются ограничения модулей усовершенствованного таймера:

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

• Однозначно определенная конфигурация каналов (или захват, или сравнение) часто не удовлетворяет пользователя.

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

Следующий этап в развитии модулей подсистемы реального времени — модули процессоров событий. Впервые модули процессоров событий были предложены фирмой Intel в составе МК 8xC51FA/FB/FC/GB, позже аналогичный модуль появился в МК с ядром MCS-51 фирмы Philips. Модуль, который входит в состав перечисленных МК, носит название программируемого счетного массива РСА (Programmable Counter Array). В МК других фирм аналогичные по функциональному назначению модули обозначают САРСОМ (Infineon), TIM08 (семейство НС08 Motorola).

Структурная схема процессора событий приведена на Рис. 1.22. Модуль процессора событий содержит в себе 16-разрядный счетчик временной базы и некоторое количество универсальных каналов захвата/сравнения. Счетчик может тактироваться импульсной последовательностью с выхода программируемого делителя частоты стробирования межмодульных магистралей fBus или внешним генератором. Счетчик имеет опции пуска/останова и сброса в 0. В некоторых моделях процессора событий счетчик временной базы доступен для чтения "на лету". Режим чтения "на лету" предусматривает автоматическое копирование содержимого старшего и младшего байтов счетчика в специальные буферные регистры в момент выполнения операции чтения указанного в спецификации байта счетчика (старшего или младшего). Тогда при чтении второго байта счетчика возвращается код из соответствующего буферного регистра. Тем самым исключается ошибка считывания по причине изменения состояния счетчика временной базы в процессе чтения. Наиболее совершенные модели процессора событий 8-разрядных МК допускают изменение коэффициента счета счетчика временной базы или, что то же самое, изменение периода его работы. Для этого в составе модуля имеется двухбайтовый программно доступный регистр периода и многоразрядный цифровой компаратор (не путать с каналом захвата). При совпадении текущего кода счетчика временной базы с кодом периода триггеры счетчика временной базы автоматически сбрасываются в 0.

 

Универсальные каналы захвата/сравнения полностью идентичны друг другу и в зависимости от программных настроек могут работать в одном из трех режимов:

1. Режим входного захвата.

2. Режим выходного сравнения.

3. Режим широтно-импульсной модуляции (ШИМ).

Первые два режима по принципу действия ничем не отличаются от аналогичных режимов модуля усовершенствованного таймера. Программно-логическая модель каждого канала включает двухбайтовый регистр данных канала и триггер события. В зависимости от выбранного режима регистр данных канала используется аппаратными средствами для записи кода временной базы в момент наступления входного захвата или для хранения кода выходного сравнения. Триггер устанавливается при наступлении любого из этих событий. При работе канала в режиме выходного сравнения могут возникать нарушения алгоритма работы, приводящие к неправильному формированию сигнала на выходе PTxi-модуля. Причиной таких сбоев является изменение под управлением программы величины кода сравнения в процессе работы канала. Наиболее совершенные модели процессора событий предусматривают для таких случаев специальный режим буферированного сравнения, при котором: 16-разрядный регистр кода сравнения дублируется; в каждый момент времени ко входу компаратора оказывается подключенным один из регистров данных, а для записи оказывается доступным другой; в момент наступления события выходного сравнения регистры автоматически меняются местами. Более подробно режим буферированного выходного сравнения, а также режим буферированной ШИМ рассмотрен в п. 3.7.

В режиме широтно-импульсной модуляции (Рис. 1.23) на выводе ^ PTxi MK формируется последовательность импульсов с периодом, равным периоду работы счетчика временной базы. Длительность импульса (в некоторых моделях — длительность паузы) прямо пропорциональна коду в регистре данных канала. Режим ШИМ чрезвычайно удобен с точки зрения программного обслуживания. Если изменения коэффициента заполнения у не требуется, то достаточно один раз занести коду в регистр данных и проинициализировать режим ШИМ, и импульсная последовательность будет воспроизводиться с требуемыми параметрами без дальнейшего вмешательства со стороны программы.

 

Режим ШИМ в различных моделях процессоров событий имеет существенные отличия. В модулях программируемого счетного массива РСА код коэффициента заполнения имеет однобайтовый формат, следовательно, дискретность регулирования коэффициента заполнения составляет 1/256 периода ШИМ-сигнала. Причем 16-разрядный регистр данных универсального канала РСА в режиме ШИМ "распадается" на два однобайтовых регистра. Доступным для записи является только один из регистров. В начале каждого периода ШИМ-сигнала содержимое этого регистра копируется во второй регистр, который используется аппаратными средствами для формирования длительности импульса в текущем периоде. Такое буферирование позволяет избежать нарушений при формировании импульсной последовательности в случаях, когда до наступления момента равенства кодов регистра и счетчика происходит изменение кода коэффициента у и новое значение у меньше текущего кода счетчика. Тогда сравнение кодов в текущем периоде ШИМ-сигнала не наступит и импульс будет пропущен. Кроме недостатка по низкой дискретности регулирования коэффициента заполнения, модуль РСА имеет ограниченный набор несущих частот сигнала ШИМ. Это происходит потому, что коэффициент счетчика временной базы не может быть изменен, а регулирование частоты достигается только изменением коэффициента деления предварительного делителя частоты.

В модулях TIM08 МК семейства НС08 фирмы Motorola рассмотренные недостатки устранены. Код коэффициента заполнения имеет двухбайтовый формат, и, следовательно, дискретность регулирования составляет 1/216 периода ШИМ-сигнала. Одновременно период широтномодулированной импульсной последовательности может регулироваться в широких пределах, поскольку счетчик временной базы допускает изменение коэффициента счета.

Модули "классических" таймеров и таймеров со схемами захвата/сравнения — достаточно сложные устройства. Их функциональная гибкость в простейших системах управления часто оказывается избыточной. Поэтому в некоторых маловыводных МК, выполненных в корпусах с 16 и 20 выводами, с целью снижения стоимости ИС реализуются упрощенные таймеры. Таймеры содержат постоянно считающий 8-разрядный счетчик с триггером переполнения и программируемый делитель частоты. Такие таймеры могут формировать лишь метки реального времени с периодом следования, который определяется набором коэффициентов деления программируемого делителя частоты. Упрощенные модули таймера имеются в составе МК MC68HC705KJ1 фирмы Motorola (см. разд. 2) и Р1С16С5хх фирмы Microchip. Однако среди последних разработок наблюдается тенденция к функциональному усложнению модуля таймера даже в очень простых МК. Так, модуль процессора событий с небольшим числом каналов имеется в составе всех маловыводных МК семейства НС08 фирмы Motorola: серии JL/JK, KX, RK (см. разд. 3).

Тенденция увеличения числа таймеров/счетчиков, интегрированных на кристалл МК, нашла свое продолжение и для модулей процессоров событий. Так, во многих современных МК совершенствование подсистемы реального времени идет не просто по пути увеличения числа каналов процессора событий. Растет число модулей процессоров событий, предоставляя разработчику возможность использования нескольких "временных баз", что позволяет обрабатывать и формировать сигналы разного временного масштаба. Кроме того, в состав МК вводятся упрощенные модули таймеров, способные "разгрузить" процессор событий от выполнения простейших функций. И это в том числе дополнительная "временная база" (см. разд. 3).