Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
55
Добавлен:
26.03.2015
Размер:
527 Кб
Скачать
☆

14.2.Организация общесистемных средств счета времени.

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

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

VELINI:

PUSH

PSW

 

 

MVI

A, 10110110B

; Код команды

 

OUT

PIT+3

 

 

POP

PSW

 

 

RET

 

 

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

VEL:

PUSH

PSW

 

 

MOV

А, С

; Младший байт фактора

 

OUT

PIT+2

;скорости

 

MOV

А, В

; Старший байт фактора

 

OUT

PIT+2

; скорости

 

POP

PSW

 

 

RET

 

 

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

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

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

Таблица 15.2.

 

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

MVI

?.00110100

;Код команды

OUT

В PIT+3

;для ПИТ

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

CLK:

PUSH

PSW

 

 

MOV

А,С

;Младший байт

 

OUT

PIT

 

 

MOV

А,С

;Старший байт

 

OUT

PIT

 

 

POP

PSW

 

 

RET

 

 

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

CLKINI:

PUSH

PSW

 

 

MVI

А,00110100В

;Код команды 

 

OUT

PIT+3

;для ПИТ 

 

LXI

B,40000

;Слово данных ПИТ 

 

CALL

CLK

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

 

POP

PSW

 

 

RET

 

 

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

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

MODUL:

DB

50

;Число системных меток 

 

 

 

;в секунде 

 

DB

60

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

 

DB

60

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

 

DB

24

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

 

DS

1

;Доли секунд 

 

DS

1

;Секунды 

 

DS

1

;Минуты 

 

DS

1

;Часы 

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

MODUL:

PUSH

PSW

;Сохранить

 

PUSH

В

;состояние регистров

 

 

 

;МП

 

PUSH

D

 

 

PUSH

24

 

 

LXI

H,MODUL

;Установить начальные

 

LXI

D,TIME

;значения указателей 

 

MVI

В,4

;Установить счетчик

 

 

 

;циклов 

NEXT:

LDAX

D

;Выбрать текущее 

 

 

 

;значение  

 

 

 

;времени 

 

INR

А

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

 

CMP

M

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

 

JNZ

ОК

;Конец счета, если 

 

 

 

;меньше 

 

XRA

А

;Иначе-

 

STAX

D

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

 

INX

Н

Модифицировать 

 

INX

D

указатели 

 

DCR

В

;Уменышить значение 

 

 

 

;счетчика 

 

 

 

;циклов на 1

 

JNZ

NEXT

;Переход, если цикл 

 

 

 

;не последний

OK:

STAX

D

;Сохранить модифи- 

 

 

 

;цированное значение ;текущего времени 

 

POP

H

восстановить 

 

POP

D

;состояние регистров 

 

 

 

;МП 

 

POP

В

 

 

CALL

EOI

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

 

POP

PSW

 

 

EI

 

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

 

RET

 

 

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

TGET:

DI

 

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

 

LDA

TIME+1

;Секунды 

 

LHLD

TIME+ 2

;Часы и минуты

 

EI

 

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

 

RET

 

 

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

TGET:

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

A,01110000B 

;Команда ПИТ 

 

OUT

PIT + 3

 

 

POP

PSW

 

 

RET

 

 

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

DELAY:

PUSH

PSW

 

 

MOV

A,C 

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

 

OUT

PIT+1

 

 

MOV

A,B  

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

 

OUT

PIT+1

 

 

POP

PSW

 

 

RET

 

 

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

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

Соседние файлы в папке КСТиАК - Конспект лекций