Средства счета времени

Программируемый интервальный таймер ВИ53/ВИ54. Среди периферийных БИС программируемый интервальный таймер (ПИТ, PIT—Programmable Interval Timer) КР580ВИ53 (ВИ53) занимает особое место. Это функционально законченное однокристальное ПУ встраиваемого типа, предназначенное для работы совместно с МП ВМ80. Интервальный таймер ВИ53 решает одну из наиболее общих проблем любой МС—генерацию точных временных интервалов под программным контролем. Микросхема выполнена по n-МОП-технологии в 24-выводном корпусе типа 2120.24 и имеет единственный источник питания +5 В.

В состав БИС (рис. 3.50) входят три 16-разрядных вычитающих счетчика (СТ) с частотой счета по входу CLK (Clock) до 2 МГц. Каждый СТ может работать в одном из шести программно-заданных режимов независимо от других. Все счетчики программно доступны для записи и чтения с помощью слов данных DW и могут работать как в двоичном коде, так и в 2/10-коде. Управление режимами выполняется с помощью управляющих слов CW (рис. 3.51), которые кроме режима (поле М) определяют код счета (двоичный или 2/10) и формат обмена данными с МП при операциях со счетчиками: только старшим байтом, только младшим байтом или всем словом (поле RL). Поле SC используется для указания счетчика, к которому относится очередное слово CW.

Рис. 3.50. Программируемый интервальный таймер ВИ53: а—структурная схема; б—условное графическое обозначение Рис. 3.51. Формат управляющего слова ВИ53

Связь ПИТ с МС осуществляется через двунаправленную 8-разрядную шину данных D7—D0 под управлением пяти сигналов А0, А1, , и в соответствии с табл. 3.6. При двухбайтовом формате данных операция со счетчиками выполняется дважды: сначала записывается или считывается младший байт, затем—старший. Обслуживание СТ выполняется параллельно и независимо друг от друга. При подаче питания их состояния и режим работы оказываются неопределенными. Поэтому перед началом работы каждый СТ должен быть инициализирован индивидуально посылкой соответствующего слова состояния CW. Каждое CW, за исключением операции защелкивания (RL = 0), сопровождается 1-2 байтами слова данных DW начального состояния выбранного СТ. Выполнение операции начинается только после загрузки последнего байта данных. Последовательность инициализации и переинициализации счетчиков произвольна. Допускается приостановка последовательности инициализации любого СТ на неопределенное время с последующим ее продолжением или началом новой.

Таблица 3.6

A1 A0 Операция   A1 A0 Операция
DСчетчик 0   Счетчик 1D
DСчетчик 1   Счетчик 2D
DСчетчик 2   УправлениеD
Нет операции   X X Нет операции
Счетчик 0D   X X X X Нет операции

Р е ж и м 0 (прерывание по окончанию счета). По окончании записи CW на выходе OUT устанавливается 0 (рис. 3.52, а). После загрузки DW счетчик начинает вычитать по каждому срезу CLK. При переходе в 0 на выходе OUT устанавливается 1. Работа СТ при этом не останавливается. Перезапуск канала производится при загрузке новых данных DW. Запись первого байта останавливает счет, второй байт запускает новый счет. Вход GATE разрешает счет при высоком и запрещает при низком уровне напряжения.

Рис. 3.52. Временные диаграммы работы программируемого интервального таймера:

а—режим 0; б—режим 1; в—режим 2

Р е ж и м 1 (программируемый одновибратор). Выход OUT генерирует 0 по первому срезу CLK после фронта GATE (рис. 3.52, б) и счетчик начинает считать. При переходе СТ в 0 на выходе OUT устанавливается 1. Перезагрузка СТ во время счета не изменяет длительности текущего импульса. Однако появление нового фронта GATE перезапускает СТ с новым или старым значением. Чтение счетчика возможно в любое время.

Р е ж и м 2 (генератор частоты). Выход OUT = 0 только в течение одного периода входной частоты CLK (рис. 3.52, в), который определяется значением DW. Перезагрузка СТ не приводит к изменению длительности текущего периода, но влияет на длительность последующего. При подаче на управляющий вход GATE 0 осуществляется переход в 1 выхода OUT. Фронт GATE запускает СТ из начального состояния. Может служить для аппаратной синхронизации счетчика.

Р е ж и м 3 (генератор прямоугольных импульсов). На выходе OUT 1 будет сохраняться до тех пор, пока не закончится одна половина счета (рис. 3.53, а). При нечетном DW на протяжении (N + 1)/2 тактов удерживается 1 и на протяжении (N – 1)/2 тактов—0. При перезагрузке СТ новое значение скажется на результат работы только при переходе OUT в другое состояние. В остальном режим подобен предыдущему.

Рис. 3.53. Временные диаграммы работы программируемого интервального таймера:

а—режим 3; б—режим 4; в—режим 5

Р е ж и м 4 (программная задержка строба). После записи CW на выходе OUT устанавливается 1 (рис. 3.53, б). Запуск счета осуществляется после загрузки DW. При достижении 0 на выходе OUT генерируется импульс длительностью в один период CLK, а СТ продолжает работать. Перезагрузка СТ во время счета приводит к перезапуску СТ. Генерация 0 на входе GATE приостанавливает счет.

Р е ж и м 5 (аппаратная задержка строба). Счетчик начинает работать только по фронту GATE (рис. 3.53, в). Новый фронт перезапускает текущий счет. В остальном режим подобен предыдущему.

Во всех режимах сигнал GATE (рис. 3.54) является управляющим: запрещает счет низким уровнем напряжения и (или) перезапускает фронтом. Функции входа GATE приведены в табл. 3.7.

Рис. 3.54. Временные диаграммы периферийных сигналов программируемого интервального таймера Рис. 3.55. Новые форматы слов ВИ54: а—управляющее слово; б—слово состояния

Таблица 3.7

Режим Переход в 0 Переход в 1 Напряжение высокого уровня (1)
Запрет счета Нет операции Разрешение счета
Нет операции Запуск с переходом OUT в 0 Нет операции
2, 3 Запрет счета с установкой OUT в 1 Запуск счета Разрешение счета
Запрет счета Нет операции Разрешение счета
Нет операции Запуск счета Нет операции

В ряде случаев необходимо контролировать текущее состояние СТ, например, когда СТ используется в качестве счетчика событий или реальных часов. Существуют два метода чтения содержимого СТ. Первый метод состоит в обычном чтении 1—2 байтов выбранного СТ. Для устойчивого чтения текущего состояния СТ функция счета может быть подавлена с помощью входа GATE или внешним запретом импульсов CLK. Сначала читается младший, затем старший байт. Если формат данных обмена с СТ—слово, то оба байта должны быть сосчитаны до подачи на данный СТ новой команды.

Второй метод заключается в чтении содержимого СТ «на ходу»—без запрета его работы. Для этого в ПИТ должна быть послана специальная команда защелкивания (поле RL = 0), при которой поле выбора счетчика SC кодирует выбор СТ. Остальные разряды CW могут быть произвольными. По команде защелкивания текущее состояние выбранного СТ записывается в специальный регистр, что не мешает работе СТ. Следующая за командой операция чтения приводит регистр в исходное состояние. Операция чтения подвержена тем же ограничениям, что и в предыдущем случае.

Программируемый интервальный таймер ВИ54 является усовершенствованным архитектурно совместимым с ВИ53 прибором. В устройстве предусмотрена новая команда для чтения текущего состояния счетчиков, включая режим. Форматы команды и нового слова состояния SW приведены на рис. 3.55.

Организация общесистемных средств счета времени. Программируемый интервальный таймер ВИ53/ВИ54 является прибором широкого назначения. На его основе могут быть построены разнообразные времязависимые устройства, имеющие общесистемное значение: генераторы скорости передачи последовательных данных, часы суточного времени, средства контроля за длительностью обращения к системной магистрали и др. Учитывая широкий интерес к средствам такого типа, рассмотрим примеры их конкретной реализации для МС на базе ВМ80.

Г е н е р а т о р с к о р о с т и. Генератор скорости передачи данных через последовательные каналы может быть построен на базе одного из счетчиков ПИТ. Например, для приведенного на рис. 3.35 адаптера ИРПС используется счетчик СТ2, который должен быть запрограммирован для работы в режиме генератора прямоугольных импульсов. На вход GATE счетчика необходимо подать напряжение высокого уровня, а вход CLK соединить с линией системной частоты CCLK. При перезапуске системы (включении питания или нажатии клавиши RESET) генератор скорости должен быть проинициализирован. Это делается c помощью специальной процедуры инициализации VELINI, переводящий СТ2 в режим 3 с обменом словами в двоичном коде:

VELINI: PUSH PSW

MVI А, 10110110В ;Код команды

OUT PIT + 3

POP PSW

RET

Процедуру установки скорости передачи удобно оформлять в виде отдельной подпрограммы VEL, принимающей через регистровую пару ВС 16-разрядный фактор скорости в двоичной форме:

VEL: PUSH PSW

MOV А, С ;Младший байт фактора

OUT PIT + 2 ;скорости

MOV А, В ;Старший байт фактора

OUT PIT + 2 ;скорости

POP PSW

RET

С учетом дополнительного деления частоты на К внутренними средствами ПСА параметр x для подпрограммы VEL рассчитывается по формуле: x = CCLK/KV, где V—скорость передачи информации. Значения переменной x для стандартных скоростей передачи при CCLK = 2 МГц и К = 16 приведено в табл. 3.8.

Таблица 3.8

Требуемая скорость V, Гц Параметр х Действительная скорость V, Гц Отклонение от стандарта, Гц
104 (112) 52 (56) 26 (28) 13 (14) 7 (7) +2 +4 +8 +16 –1343

Очевидно, что с помощью данной схемы скорость передачи 19200 Гц с достаточной точностью не может быть получена. Для решения данной задачи необходим специальный подбор значений частоты CCLK, которая для ВМ80 связана с частотой выхода Ф2TTL ГТИ. Если использовать CCLK = 1,9384 МГц, то можно получить все стандартные частоты. Для этого потребуется кристалл с частотой OCS = 17,4456 МГц и параметр х, который представлен выше в скобках.

Ч а с ы с у т о ч н о г о в р е м е н и. Если функцию счета времени возложить на программные средства, то для реализации часов достаточно построить генератор меток реального времени. Для этой цели резервируется счетчик СТ0 программируемого таймера, вход CLK которого соединяется с CCLK, на вход GATE подается напряжение высокого уровня, а выход OUT используется в качестве сигнала запроса на прерывание высшего приоритета IR0. Такая схема обеспечивает своевременную обработку меток реального времени через систему прерываний.

Контроллер прерываний ВН59 фиксирует запрос на прерывание по фронту с предварительным удержанием низкого уровня напряжения на входе не менее 120 нс. Поэтому СТ0 можно запрограммировать для работы как в режиме 2, так и в режиме 3. Остановимся на режиме 2:

MVI А, 00110100В ;Код команды

OUT PIT + 3 ;для ПИТ

Процедура установки частоты следования меток реального времени подобна VEL:

CLK: PUSH PSW

MOV А, С ;Младший байт

OUT PIT

MOV A, B ;Старший байт

OUT PIT

POP PSW

RET

Обычно эти метки следуют с частотой 50 Гц. Предполагая, что CCLK = 2 МГц, получаем стандартную процедуру инициализации генератора системного времени:

CLKINI: PUSH PSW

MVI A, 00110100B ;Код команды

OUT PIT + 3 ;для ПИТ

LXI B, 40000 ;Слово данных ПИТ

CALL CLK ;Вывод слова данных

POP PSW

RET

Скорость счета может быть изменена в любой момент вызовом подпрограммы CLK.

Счет суточного времени может быть организован специальной программой [11], запускаемой по прерыванию IR0. Подпрограмма ведет счет в формате «часы, минуты, секунды, доли секунд» и использует 8 байт данных:

MODUL: DB 50 ;Число системных меток в секунде

DB 60 ;Число секунд в минуте

DB 60 ;Число минут в часе

DB 24 ;Число часов в сутках

TIME: DS 1 ;Доли секунд

DS 1 ;Секунды

DS 1 ;Минуты

DS 1 ;Часы

Предполагается, что метки следуют с частотой 50 Гц:

CLOCK: PUSH PSW ;Сохранить

PUSH В ;состояние регистров МП

PUSH D

PUSH Н

LXI H, MODUL ;Установить начальные

LXI D, TIME ;значения указателей

MVIВ, 4 ;Установить счетчик циклов

NEXT: LDAX D ;Выбрать текущее значение времени

INR А ;Увеличить его на 1

СМР М ;Сравнить с максимальным

JNZ ОК ;Конец счета, если меньше

XRA А ;Иначе—

STAX D ;сброс ячейки памяти

INX Н ;Модифицировать

INX D ;указатели

DCR В ;Уменьшить значение счетчика циклов на 1

JNZ NEXT ;Переход, если цикл не последний

ОК: STAX D ;Сохранить модифицированное значение

;текущего времени

POP Н ;Восстановить

POP D ;состояние регистров МП

POP В

CALL EOI ;Конец прерывания

POP PSW

EI ;Разрешить прерывание

RET

Для получения текущего времени хранения в четырех соседних байтах с базой TIME необходимо просто прочитать их содержимое, например, с помощью процедуры:

TGET: DI ;Запретить прерывания

LDA TIME + 1 ;Секунды

LHLD TIME + 2 ;Часы и минуты

EI ;Разрешить прерывания

RET

Программа возвращает в регистре А секунды, в L минуты, в Н часы. Установка времени выполняется обратной процедурой, при этом доли секунд игнорируются:

TSET: DI ;Запретить прерывания

STA TIME + 1 ;Секунды

SHLD TIME + 2 ;Часы и минуты

EI ;Разрешить прерывания

RET

Подпрограммы используются при запрещенных прерываниях, что обеспечивает монопольный доступ к разделяемому двумя параллельными процессами CLOCK и TGET/TSET блоку данных TIME. В противном случае могут быть ошибки, связанные с одновременностью доступа.

Временные затраты, необходимые для поддержки рассмотренных выше часов суточного времени при тактовой частоте ВМ80, равной 2 МГц, и частоте системных меток 50 Гц составляют 1,2%. В тех случаях, когда они не удовлетворяют пользователя, их можно снизить, за счет уменьшения частоты генерации системных меток, отказа от счета суточного времени с преобразованием в часы и перехода к счету в периодах системных меток, расширения аппаратурных средств поддержки часов или перехода к их полной аппаратной реализации.

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

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

Решить проблему организации службы времени помогает устройство счета временных интервалов, в качестве которого применяется счетчик СТ1 программируемого таймера. Для этого вход CLK счетчика соединяется с выходом OUT генератора часов суточного времени, на вход GATE подается напряжение высокого уровня, а выход OUT используется в качестве запроса IRQ1 первого уровня. Запросам на обслуживание от счетчика временных интервалов отведен более низкий приоритет по сравнению с запросами от генератора суточного времени, так как они следуют намного реже. При такой организации служба времени представляет собой системную процедуру, которая активизируется по прерываниям первого уровня. В функции процедуры входит запуск обслуживания очередного запроса из очереди и установка нового интервала ожидания до начала обслуживания следующего запроса. Отработка данного интервала возлагается на счетчик паузы СТ1.

Счетчик СТ1 программируется для работы в режиме 0 с помощью процедуры:

DLINI: PUSH PSW

MVI А, 01110000В ;Команда ПИТ

OUT PIT + 3

POP PSW

RET

После ее выполнения на выходе OUT счетчика установится 0. Устройство запускается для отработки паузы, передаваемой через регистровую пару ВС, следующим образом:

DELAY: PUSH PSW

MOVA, C ;Младший байт значения паузы

OUT PIT + 1

MOVA, B ;Старший байт значения паузы

OUT PIT + 1

POP PSW

RET

Пауза передается в виде двоичного целого с периодом меток суточного времени. После отработки паузы счетчик СТ1 свою работу не приостановит. Для его остановки можно воспользоваться процедурой DLINI.

На рис. 3.56 представлена схема устройства на базе ПИТ, три счетчика которого зарезервированы для выполнения трех рассмотренных функций общесистемного значения. Это устройство, которое называется системным таймером, применяется в большинстве МС. Набор из шести процедур нижнего уровня (CLKINI, CLK, DLINI, DELAY, VELINI и VEL) образует драйвер системного таймера, который освобождает программиста от прямого управления работой устройства и предоставляет в его распоряжение стандартный интерфейс программного уровня. Такие компоненты, как часы суточного времени или служба реального времени, надстраиваются над драйвером, образуя второй слой ПО более высокого уровня.

Рис. 3.56. Схема системного таймера

ГЛАВА 4.








Дата добавления: 2019-02-07; просмотров: 563;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.042 сек.