Автоматизация

Вид материалаДокументы

Содержание


Модуль счетчиков
Mcall .mrkt, .spnd, .rsum, .exit
Time: .word 0
Интерфейс графического дисплея
Амплитудно-цифровой преобразователь (АЦП)
Модуль памяти
Режим набора спектра.
Буферный режим
Мультисчетный режим (режим многоканального счета)
Режим усреднения
Начальная уста­новка.
Простейшая измерительная система
9.3. Системные средства программирования аппаратуры камак
Mcall cint $ c, spnd $ s, exit $ s, rsum $ c, astx $ s
Cint $ c 150, 120000, it, inten.pr4, ast
End start
Mcall .protect, .spnd, .inten, .synch, .rsum, .exit
Подобный материал:
1   ...   17   18   19   20   21   22   23   24   25
§ 9.2. ПРОГРАММИРОВАНИЕ МОДУЛЕЙ КАМАК

Модуль счетчиков

Рассмотрим программное управление модулем счетчиков, описанным в § 2.5. Пусть на входы счетчиков модуля поступают импульсы от детекторов, регистрирующих излучение в двух точках экспериментальной установки. Требуется включить счетчики на не­которое время, например 100 с, и снять с них показания. Поскольку время экспозиции относительно велико, для его измерения можно воспользоваться системным таймером. В этом случае программа управления модулем может иметь следующую структуру:

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

задание экспозиции с помощью системной макрокоманды .MRKT и включение счетчиков;

блокировка задачи;

по истечении времени экспозиции — считывание информации со счетчиков и разблокировка задачи;

обработка полученной информации.

Текст программы (в системе РАФОС) будет выглядеть следую­щим образом:


.MCALL .MRKT, .SPND, .RSUM, .EXIT

CSR = 164000

А0 = 164140; модуль .на станции № 3

А1 = 164142

CNTR = —Bl0l; слово состояния модуля: ;

W1 = 1 (модуль работает как два счетчика);

W2 = О (работа без внешнего управления);

W3 = 1 (действие сигнала I разрешено)

MOV #1000,@#CSR ; генерация сигнала Z, сброс счетчиков, запрет счета

MOV #17.,@#CSR ; F(17) в РУС

MOV #CNTR,@#A0 ; установка режима

.MRKT #ARG,#TIME,#COMP ; задание времени экспозиции

MOV #26.,@#СSR ; разрешение счета

TST @#А0 ; в обоих счетчиках

.SPND ; блокировка задачи


. . . ; обработка полученной информации

.EXIT ; завершение задачи

ARG: .BLK.W 5 ; поле для аргументов макрокоманд

TIME: .WORD 0

.WORD 5000. ; 5000 тиков, т. е. 100 с

СОМР: MOV#24.,@#CSR ; запрет

TST @#А0 ;счета

MOV #2,@#CSR ; F(2) в РУС

MOV@#A0,R1 ; чтение и сброс 1-го счетчика

MOV@#A1,R2 ; чтение и сброс 2-го счетчика

.RSUM ; разблокировка задачи

RTS PC ; выход в задачу


Макрокоманда .MRKT устанавливает запрос к таймеру на вре­мя, указанное в поле с меткой TIME, и возвращает управление задаче, которая, разрешив счет в обоих счетчиках, блокируется макрокомандой .SPND.

По истечении заданного интервала времени монитор передает управление подпрограмме завершения, точка входа в которую (мет­ка СОМР) указана среди аргументов макрокоманды .MRKT. Под­программа завершения, выполнив считывание информации из счет­чиков в регистры R1 и R2, разблокирует задачу с помощью про­граммного запроса .RSUM. По команде RTS PC подпрограмма завершения заканчивает свою работу и задача приступает к обра­ботке полученной информации.


Интерфейс графического дисплея

Визуальное представление информации является важнейшим элементом организации автоматизированного эксперимента. В тех случаях, когда результаты измерений или обработки представляют собой всего несколько чисел, их можно инициировать с помощью модулей счетчиков с индикацией либо на экране алфавитно-ци­фрового дисплея. Однако чаще результатами измерений являются распределения изучаемых величин (записываемые в памяти ЭВМ в виде значительных по объему массивов), наглядное представ­ление которых возможно только с помощью графических средств. Наряду с универсальными графическими терминалами, управля­емыми непосредственно от ЭВМ, для наблюдения эксперименталь­ных результатов используются также обычные телевизоры. Для управления телевизорами (черно-белыми и цветными) разработаны специальные модули К.АМАК. Эти модули обычно содержат запо­минающее устройство (ЗУ) для хранения графического кадра. Со­держимое ЗУ сканируется с частотой кадровой развертки телевизо­ра и формирует видеосигнал, подаваемый на видеовход телевизора. Для изменения содержимого ЗУ (образования нового графического кадра) используются соответствующие команды К.АМАК.. Интерфейс телевизора обычно имеет широкий набор команд, позволяющий выводить на экран телевизора как графические изображения лю­бого характера, так и тексты. При необходимости наблюдать од­новременно несколько изображений (например, несколько графи­ков) их можно наложить друг на друга или вывести в разные части (квадранты) графического поля.

В рассматриваемом интерфейсе номер квадранта задается с по­мощью указания соответствующего субадреса: Так, квадранту № 1 (левый верхний) соответствует субадрес А(1), квадранту № 2 (пра­вый верхний) —субадрес А (2), квадранту № 3 (левый нижний) — субадрес А (4) и квадранту № 4— субадрес А (8). Гра­фический кадр может включать также любые два квадранта или все четыре. Так, для вывода изображения в верхнюю половину экрана следует указывать субадрес А(3), в нижнюю половину — субадрес А(12). Графическому кадру размером в целый экран отвечает субадрес А (15).

Для вывода на экран светящейся точки (точнее говоря, для записи координат точки в ЗУ интерфейса) используется функция F(16) с указанием соответствующего субадреса. Координаты точки передаются по линиям W, при этом разряды 0—7 содержат Y-координату, а разряды 8—15 — Х-координату. Таким образом, размер экрана составляет 256 на 256 точек. Для облегчения вывода гра­фиков функций или спектров в интерфейсе предусмотрен режим автоматического инкремента Х-координаты. Для установки этого режима используется команда A(13)F(26), для отмены — A(13)F(24).

Рассмотрим в качестве примера вывод на экран телевизора спектра, накопленного в памяти ЭВМ. Спектр представляет собой массив из 256 целых чисел, нормированных на 256 (в этом слу­чае отпадают проблемы масштабирования). Модуль управления телевизором установлен на станции № 3:


CSR = 164000

А13 = CSR + < 3 * 40> + <13. * 2> А15 = CSR + < 3 * 40> + < 15. * 2 >

MAS: .BLKB 256. ; массив со спектром

MOV #1000,@#CSR ; генерация сигнала Z

MOV #26.,@#CSR ; установка режима

TST @№А13 ; автоматического инкремента по X

MOV #MAS,R1

MOV #256.,R2 ; загрузка счетчика числа шагов цикла

OUT: MOVB (R1)+,@#A15 ; пересылка координаты очередной точки

SOB R2,OUT ; организация цикла


Амплитудно-цифровой преобразователь (АЦП)

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


В модуле используются следующие команды КАМАК:


F(26)A(1) —разблокировка входа преобразователя и сброс выходного регистра;

F(24)A(1) —блокировка входа преобразователя;

F(26)A(0) —разблокировка L-запроса;

F(24)A(0) —блокировка L-запроса;

F(8)A(0) —проверка L-запроса (используется при программировании в режиме циклической проверки готовности) ;

F(27)A(0) —проверка LAM-требования;

F(10)A(0) — сброс LAM-требования;

F(0)A(0) —считывание кода из выходного регистра и сброс LAM-требования;

F(9)A(0) —сброс выходного регистра, сброс LAM-требования,

разблокировка входа преобразователя;

F(2)A(0) —считывание кода, сброс выходного регистра, сброс LAM-требования, разблокировка входа.


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

генерация сигнала Z;

разблокировка входа преобразователя;

ожидание установки LAM-требования;

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

по окончании работы — блокировка входа преобразователя.

Коды, принимаемые из выходного регистра АЦП, могут обра­батываться различными способами. Наиболее распространенный способ заключается в организации в оперативной памяти ЭВМ массива, размер которого совпадает с числом уровней квантования АЦП, и в сортировке приходящих кодов по строкам этого масси­ва — каналам. Сортировка заключается в добавлении 1 к содержи­мому канала, номер которого совпадает с пришедшим кодом.

Пусть АЦП установлен на станции 3, число уровней квантова­ния составляет 256 и требуется зарегистрировать в общей слож­ности 60 000 импульсов.

Программа инициализации АЦП, приема кодов и сортировки их по каналам выглядит следующим образом:


SPE: .BLKW 256. ; область для накопления спектра

CNT: ;WORD 0 ; счетчик числа зарегистрированных импульсов

CSR = 164000

А0 = 164140

А1 = 164142

ST: MOV #1000,@#CSR ; генерация Z

MOV #26,@#CSR ; F (26) в РУС

TST @#A1 ; разблокировка входа преобразователя

MOV #27.,@#CSR ; F (27) в РУС


W: TST @#А0 ; проверка готовности. Q= 1? нет.

BPL W ; Повторение проверки готовности

MOV #2,@#СSR ; да. F (2) в РУС

MOV @#А0, R4 ; код из АЦП в R4

ASL R4 ; умножение на 2

INC SPE (R4) ; + 1 в канал

INC CNT ; + 1 в счетчик импульсов

CMP CNT, #60000. ; зарегистрировано заданное количество импульсов?

BEQ FIN ; да. Переход на завершение работы

BR W ; нет. Переход на ожидание готовности

FIN: MOV #24.,@#CSR ; F (24) в РУС

TST @#А1 ; блокировка входа АЦП


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

Программа инициализации прерываний выполняет следующие действия:

генерацию сигнала Z;

установку маски L-запросов в контроллере;

заполнение вектора прерываний;

разблокировку входа преобразователя;

разблокировку L-запроса в модуле;

разрешение прерываний в РУС;

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

Программа инициализации прерываний будет выглядеть сле­дующим образом:


MOV #1000,@#CSR ; генерация Z

MOV #4,@#CSR+2 ; установка маски L-запроса (разряд 2) РЗМ

MOV #IТ,@#150 ; адрес ПОП в вектор прерывания


MOV #240,@#152 ; приоритет 5 в вектор прерывания

MOV #26.,@#СSR ; F (26) в РУС

TST @#А1 ; разблокировка входа преобразователя

TST @#А0 ; разблокировка L - запроса

MOV #100,@#СSR ; разрешение прерываний в РУС

.......... ; фоновая программа


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


IT: MOV #2,@#CSR F (2) в РУС

MOV @#А0, R4 ; код из АЦП в R4

ASL R4 ; умножение на 2

INC SPE (R4) ; + 1 в канал

INC CNT ; + 1 в счетчик импульсов

CMP #60000.,CNT ; зарегистрировано заданное количество импульсов?

BEQ FIN ; да

MOV #100,@:#CSR ; разрешения прерываний в РУС нет.

RTI ; Выход из прерывания


FIN: MOV #24.,@#CSR ; F (24) в РУС

TST @#А1 ; блокировка входа преобразователя

RTI ; выход из прерывания


Модуль памяти

Модуль предназначен для накопления массивов эксперименталь­ных данных, поступающих на его вход в виде цифровых кодов. Использование модуля памяти для регистрации кодов от АЦП позволяет существенно повысить эффективность работы ЭВМ и сни­зить мертвое время установки, так как в этом случае прерывания, отнимающие значительное время, происходят не после регистрации каждого события, а после заполнения памяти, т. е. гораздо реже.

Основной элемент модуля —ЗУ на 1024 24-разрядных слова. ЗУ организовано аналогично оперативной памяти ЭВМ. С помощью регистра адреса (РА) происходит выбор требуемой ячейки памяти, а с помощью регистра данных (РД) —обмен данными с этой ячейкой — чтение или запись.

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


1. Режим набора спектра. В этом режиме на вход модуля подаются обычно коды от аналого-цифрового преобразователя и такая система из двух модулей работает в качестве анализатора импульсов (амплитудного или временного). Входным сигналом для модуля памяти в этом случае является параллельный цифровой код, задающий адрес ячейки ЗУ, в которую затем автоматически добав­ляется единица. Сигнал L-запроса появляется в случае переполне­ния одной из ячеек, т. е. после накопления 224 событий в одном из каналов.

2. Буферный режим. В этом режиме ЗУ модуля исполь­зуется для записи кодов в порядке их поступления, без всякой сортировки. Обычно накопление данных начинается с нулевой ячейки памяти. Сигнал L-запроса вырабатывается после переполне­ния регистра адреса, т. е. после регистрации 1024 кодов.

3. Мультисчетный режим (режим многоканального счета). В этом режиме входной информацией являются не цифровые коды, а электрические импульсы. Модуль определяет число импульсов, пришедших от начала измерений до некоторых моментов времени, задаваемых, например, таймером. Получаемые отсчеты запоминаются в последовательных ячейках ЗУ. Такой режим используется для исследования зависимости средней частоты поступления импульсов от времени, например, при изучении распадных кривых.

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

4. Режим усреднения. Аналогичен режиму многоканаль­ного счета с той разницей, что возможно многократное повторение измерений с суммированием данных, накопленных в каждой ячейке памяти. В этом режиме используется еще один внешний импульс, определяющий начало нового цикла измерений. С приходом этого импульса сбрасывается содержимое регистра адреса, накопленные ранее данные из нулевой ячейки ЗУ передаются в счетчик и вновь поступающие импульсы добавляются к содержимому счетчика. После прихода импульса отметки времени число из счетчика передается в ту же ячейку ЗУ. Затем та же операция повторяется с 1-й ячейкой ЗУ и т. д. Сигнал L-запроса появляется в случае переполнения счетчика.

Модуль может находиться в двух состояниях: управления от ЭВМ и автономной работы. Переход из одного состояния в другое осуществляется программно. По команде NA (0) F (24) модуль переводится в состояние управления от ЭВМ, в котором входные данные не воспринимаются, запрещается выдача L-запроса и выполняются любые команды модуля. По команде NA (0) F (26) модуль переходит в режим приема внешних данных, в котором ре­гистрируются входные импульсы, разрешается выработка L-запроса, но не воспринимаются команды, связанные с обменом данными с ЭВМ. В случае поступления от ЭВМ таких команд модуль не вырабатывает сигнал Q, что можно использовать для диагностики ошибок.

Для того чтобы считать в ЭВМ содержимое некоторой ячейки ЗУ, необходимо перевести модуль в состояние управления от ЭВМ, затем по команде NA (0) F (16) записать адрес ячейки в РА и по команде NA (0) F(0) считать ее содержимое в ЭВМ. Обычно требуется считать в ЭВМ содержимое не одной ячейки, а всего ЗУ. Для этого необходимо последовательно выполнить команды чтения для каждой из ячеек ЗУ.

Из двух особенностей модуля следует отметить выполнение команды NA (0) F (25) и безадресной команды Начальная уста­новка. Обе эти команды выполняются одинаково, результатом их выполнения является сброс всех ячеек ЗУ, всех регистров модуля и L-запроса. Для выполнения всех операций сброса модулю требуется значительное время (около 1 мс), в течение которого он не вы­полняет адресуемые ему команды. Для того чтобы определить момент, когда кончается выполнение команды начальной установки, используется специальная команда А (0) F (27). В том случае, если сброс закончен, в ответ на эту команду модуль вырабаты­вает ответ Q. В противном случае ответ Q не вырабатывается.

Пусть модуль используется совместно с АЦП для накопления спектра. После окончания измерений содержимое ЗУ модуля следует переписать в оперативную память ЭВМ. Программа, выполняющая указанную операцию, выглядит следующим образом:


CSR= 164000

А0= 164040

SPECTR: .BLKW 1024. ; область для спектра

MOV #24.,@#СSR ; F (24) в РУС

TST @#А0 ; перевод модуля в режим управления от ЭВМ

MOV #16.,@#СSR ; F (16) в РУС

CLR @#А0 ; сброс регистра адреса ЗУ

MOV #1024., R0 ; начальная установка счетчика цикла

MOV #SРЕСТR, R1 ; адрес области для спектра в R1

MOV #2,@#CSR ; F (2) в РУС

XX: MOV @#А0, (Rl)+ ; перенос данных в память ЭВМ

SOB R0, XX ; цикл из 1024 шагов


Простейшая измерительная система

Для иллюстрации особенностей программного управления системой модулей рассмотрим простейший измерительный комплекс, содержащий два модуля КАМАК — аналого-цифровой преобразо­ватель АЦП и интерфейс графического дисплея ИГД (рис. 9.3).




Рис. 9.3. Структурная схема измерительного комплекса


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

Пусть с целью повышения скорости накопления событий информация из АЦП принимается в режиме программирования по готовности, и регистрируемые коды накапливаются в виде спектра, содержащего 256 каналов. Для визуального наблюдения за ходом измерений спектр постоянно выводится на графический дисплей, при этом каждое зарегистрированное событие модифицирует спектр. Предполагается, что число отсчетов в любом канале не превы­шает 255.

Программа, реализующая прием кодов из АЦП, накопление спектра и вывод его на экран графического дисплея, может вы­глядеть следующим образом:


CSR = 164000

N2А0 = CSR + < 2*40> ; АЦП на станции 2

N2A1 = CSR + <2 * 40> + 2

N5A1 5 = CSR + <5 * 40> + < 15. * 2>

; ИГД на станции 5

MOV #1000, @#CSR ; сигнал Z, очистка экрана

MOV #26., @#CSR

TST @#N2A0 ; разблокировка L-сигнала

TST @#N2A1 ; разблокировка входа АЦП

MOV #2, @#CSR ; подготовка к последующему

; считыванию кода из АЦП

W: TSTB @#CSR ; проверка разряда 7 РУС

BPL W ; разряд 7 сброшен, снова проверить

MOV @#N2A0,R0 ; в RO — код из АЦП

MOV R0,R2 ; то же в R2

ASL R0 ; умножение кода на два

INC SPECTR (R0) ; + 1 в соответствующий коду канал спектра

SWAB R2 ; код из АЦП в старшем байте R2

MOVB SPECTR (R0), R2 ; отсчет в канале в младшем байте R2

MOV R2,@#N5A15 ; вывод в графический файл новой точки

BR W ; переход на ожидание следующего срабатывания АЦП


Реальная программа может оказаться сложнее. Например, в приведенном варианте обойдены вопросы масштабирования спектра.


§ 9.3. СИСТЕМНЫЕ СРЕДСТВА ПРОГРАММИРОВАНИЯ АППАРАТУРЫ КАМАК


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

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

Другим способом уменьшения потерь и искажений является рациональное построение программы обработки прерываний.

Структура любой программы, реализующей режим прерываний, стандартна. В начале программы инициализируются прерывания — заполняются векторы прерываний обслуживаемых модулей и уста­навливаются разряды разрешения прерываний в управляющих регистрах модулей и контроллера. После этого программа обычно блокируется с помощью соответствующих средств операционной системы в ожидании прерываний. Каждое прерывание автомати­чески приводит к передаче управления на соответствующую дан­ному модулю подпрограмму обработки прерываний, которая чаще всего организует передачу информации из регистра (или регистров) КАМАК в память ЭВМ. Часто в ПОП осуществляется также и первичная обработка принятых данных, например их сортировка или форматирование, а также передача на внешние запоминающие устройства — НМД или НМЛ. После окончания ПОП управление передается назад в основную программу. Если программа по-преж­нему заблокирована, то ЭВМ ожидает следующего прерывания.

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

Рассмотрим сначала особенности программирования аппаратуры КАМАК в системе ОС РВ.

Обработка прерываний в ОС РВ возможна на любом из четырех уровней:

уровень прерываний;

уровень отложенных прерываний;

уровень асинхронных системных прерываний;

уровень задачи.

Уровень прерываний, который автоматически устанавливается после каждого прерывания, характеризуется прежде всего тем, что процессор работает в системном режиме. При этом физический уровень приоритета процессора, определяемый содержимым раз­рядов 5—7 слова состояния процессора, обычно совпадает с уровнем линии запроса прерывания, к которой подключено ВУ. Таким образом, часть ПОП, выполняемая на уровне прерываний, может быть прервана только в том случае, если придет запрос на прерывание от внешнего устройства, находящегося на более высоком уровне. Длительность такого состояния не должна превышать 500 мкс.

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

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

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

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

Переход с уровня на уровень требует определенного времени. В то же время выход из прерывания в задачу можно осуществить и непосредственно, минуя уровни отложенных прерываний и АСП. С целью уменьшения непроизводительных затрат времени на пере­ходы с уровня на уровень целесообразно организовать иерархическую обработку поступающей информации. На уровне прерываний можно выполнять минимально необходимую обработку, например прием данных из регистров КАМАК, в выделенный для этого буфер оперативной памяти и сосчитывание количества поступивших кодов. Немедленный выход после этого в задачу обеспечивает минималь­ное «мертвое время» ЭВМ. После обработки некоторого количества прерываний и накопления в буфере заданного объема данных можно перейти на уровень отложенных прерываний и обработать всю принятую группу данных, например рассортировать их по каналам, освободив буфер для приема следующей группы входных данных. Переход на следующий уровень — уровень АСП осущест­вляется еще реже, после сортировки заданного количества групп данных. Поскольку на уровне АСП разрешены программные за­просы, его целесообразно использовать для «сброса» на НМД всей накопленной информации. Наконец, после завершения измерений можно перейти на уровень задачи для окончательной обработки полученных данных.

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

Рассмотрим в качестве примера программирование работы амплитудно-цифрового преобразователя. Пусть АЦП занимает станцию 7 и имеет вектор прерывания по адресу 150. Запрос от АЦП маскируется разрядом 2 младшего байта РЗМ. Текст програм­мы приема данных из АЦП в простейшем случае выглядит следующим образом:


.MCALL CINT $ C, SPND $ S, EXIT $ S, RSUM $ C, ASTX $ S

CSR= 164000

A0=16400+<7*40>

Al=A0+2

START: MOV #1000, @#CSR ; генерация сигнала Z

MOV #4,@#CSR+2 ; размаскирование L- запроса в контроллере

CINT $ C 150, 120000, IT, INTEN.PR4, AST

SPND $ S ; блокировка задачи в ожидании прерываний


....... ; обработка накопленного спектра


EXIT $ S ; завершение задачи

INTEN: MOV #26., @# CSR ; F(26) в РУС

TST @# А0 ; разблокировка входа АЦП

TST @# А1 ; разблокировка L-запроса в модуле

MOV #100, @# CSR ; разрешение прерываний в контроллере

RTS PC ; возврат в задачу


IT: MOV #2, @#CSR ; F (2) в РУС

MOV @#А0, R4 ; код из АЦП в R4

ASL R4 ; умножение на два

INC SPECTR (R4) ; инкремент канала

INC COUNT ; инкремент счетчика

; кодов

CMP СОUNT,#65000. ; спектр набран?

BEQ FIN ; да. Продолжение ПОП

MOV #100,@#СSR ; нет. Разрешение прерываний

RTS PC ; возврат из прерывания в задачу


FIN: MOV # 24.,@# CSR ; F(24) в РУС

TST @# А0 ; блокировка АЦП

TST @# А1 ; блокировка L-запроса в модуле

CALL @#$FORK2 ; переход на уровень отложенных прерываний

CLR @R3 ; служебная строка

CALL @#3QASTC ; переход на уровень АСП

RTS PC ; возврат в задачу


AST: RSUM $ C TASK2R ; снятие блокировки задачи

TST (SP)+ ; восстановление стека

ASTX $S ; выход из АСП в задачу


SPECTR: .BLKW 256. ; область под спектр

COUNT: .WORD 0 ; счетчик зарегистрированных кодов

.END START


В подготовительной части программы генерируется сигнал Z, устанавливается маска запросов (разблокируется запрос от данного модуля) и с помощью системной директивы СINТ$ происходит подсоединение к соответствующему вектору прерывания. После этого директива SPND $ блокирует задачу в ожидании преры­ваний.

В приведенном примере используется вектор прерываний по адресу 150. Метка IT характеризует начало ПОП, а метка INTEN — подпрограмму инициализации прерываний, в которой разблокиру­ется АЦП и устанавливается разряд разрешения прерываний РУС.

В предлагаемом примере практически вся обработка прерыва­ний от АЦП выполняется на уровне прерываний. Приходящие коды распределяются по каналам, под которые отведено 256 слов памяти, начиная с метки SPECTR. Кроме того, в ячейке COUNT фиксируется число пришедших кодов. Пока это число меньше заданного, ПОП завершается строкой разрешения прерывания в РУС и командой RTS PC выходит в задачу на ожидание следующего прерывания. После того как в спектре накопится заданное количество отсчетов, происходит переход на метку FIN, блокировка АЦП и переход на уровень отложенных прерываний командами CALL @#$FORK2 и CLR@R3. Уровень отложенных прерываний нужен в данном примере только для того, чтобы перейти на уровень асинхронных системных прерываний, что осуществляется строкой


CALL@#$QASTC,


по которой управление передается на метку AST, указанную в директиве CINT $.

На уровне АСП осуществляется единственное действие — раз­блокировка задачи программным запросом RSUM$ , в поле которой указано имя задачи TASK2R.

После выхода из АСП директивой ASTX $ управление передается в задачу, где и обрабатывается накопленный спектр.

Рассмотрим теперь программирование того же модуля в системе РАФОС. Структура программы, полностью эквивалентной рассмот­ренной выше, выглядит следующим образом:


.MCALL .PROTECT, .SPND, .INTEN, .SYNCH, .RSUM, .EXIT

CSR= 164000

А0 = 164000 + <7 * 40>

Al = A0 + 2

START: MOV #1000,@#CSR ; генерация сигнала Z

MOV #4,@#CSR+2 ; размаскирование L-запроса

.PROTECT #AREA,# 150 ; защита вектора прерываний

MOV #IТ,@#150 ; адрес ПОП в векторе прерываний

MOV #340,@#152 ; приоритет 7 в векторе прерываний

MOV #26.,@#CSR ; F(26) в РУС

TST @#А0 ; разблокировка входа АЦП

TST @#А1 ; разблокировка L- запроса в модуле

MOV #100,@#CSR ; разрешение прерываний в РУС

.SPND ; блокировка задачи в ожидании прерываний


....... ; обработка спектра


.EXIT ; завершение задачи

IT: .INTEN 4 ; переход в режим системы

MOV #2,@#CSR ; F(2) в РУС

MOV @#A0,R4 ; код из АЦП в R4

.......... ; строки инкремента канала и счетчика кодов

MOV #100,@#CSR ; разрешение прерываний в РУС

RTS PC ; выход из прерывания

FIN: MOV #24.,@#CSR ; F(24) в РУС

TST @#А0 ; блокировка АЦП

TST @#А1 ; блокировка L-запроса в модуле

.SYNCH #SBL ; переход на уровень подпрограмм завершения

NOP ; пустая команда

.RSUM ; разблокировка задачи

RTS PC ; возврат в задачу

AREA: .BLKW 5 ; область для аргументов макрокоманд


SBL: .WORD 0,1,0,0,0,2—1,0 ; область для элемента очереди подпрограмм завершения


Программный запрос .РРОТЕСТ защищает и закрепляет за данной задачей используемый вектор прерывания. Вектор прерыва­ния, в отличие от предыдущего примера, загружается непосредст­венно в программе командами MOV. Строки подготовки аппарату­ры КАМАК не отличаются от рассмотренных выше, кроме то­го, что они не оформлены в виде подпрограммы, а включены в основную программу. После завершения инициализации задача блокируется программным запросом .SPND в ожидании прерыва­ний.

Как и в предыдущем случае, вся обработка происходит на уровне прерываний в режиме системы, переход на который осу­ществляется программным запросом .INTEN после того, как в результате прерывания от АЦП управление передается на метку IT.

После накопления заданного числа отсчетов управление пере­дается на метку FIN и происходит блокировка входа преобра­зователя и L-запроса в модуле. Эти действия осуществляются по-прежнему на уровне прерываний. После этого с помощью про­граммного запроса .SYNCH происходит переход на уровень под­программ завершения (аналог уровню АСП в ОС РВ); задача разблокируется и управление передается на строки обработки спектра.