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

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

Содержание


Привилегированные задачи
Tkb task/ pr = task
Работа с прерываниями от внешних устройств
Mcall cint $ c, spnd $ s, rsum $ c, astx $ s, exit $ s
End start
Контрольные вопросы к главе 8
Программирование аппаратуры камак
Начальная установка
Начальная установка
Подобный материал:
1   ...   17   18   19   20   21   22   23   24   25

Привилегированные задачи


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

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

Непривилегированные задачи отображаются так, как это было показано на рис. 8.7. Для отображения могут использоваться все восемь РАС, и, поскольку все виртуальное пространство адресов занято самой задачей, она не имеет доступа ни к управляющим программам ОС, ни к странице ввода - вывода. Все РАС содержат одинаковое смещение, величину которого определяет ОС; задача может быть загружена в любое свободное место памяти.

Для того чтобы сделать задачу привилегированной, надо при ее компоновке указать ключ PR и номер используемого РАС. Допустимо использовать для отображения задачи РАС 4, РАС 5 и РАС 0. Ниже будет рассмотрен наиболее распространенный случай использования РАС 5 (для РАС 5 его номер можно не указывать):


TKB TASK/ PR = TASK


В этом случае отображение задачи соответствует рис. 8.14. Компоновщик размещает задачу на 5-й и 6-й виртуальных страницах, начиная с виртуального адреса 120000 (а не 0, как это было для непривилегированных задач). Таким, образом, для отображения задачи используются только два РАС: РАС 5 и РАС 6. РАС 7 отображает на виртуальное пространство задачи страницу ввода - вывода, а первые пять РАС служат для отображения на виртуальное пространство задачи области памяти, занятой монитором.



Рис. 8.14. Отображение привилегированной задачи


Как уже отмечалось, это дает доступ задаче как к регистрам ВУ, так и к системным областям памяти. Например, строка программы


MOV # 340, @ # 62


приведет к пересылке числа 340 во второе слово вектора прерывания клавиатуры консольного терминала, а строка


MOV @ # 177562, R2


передаст содержимое регистра данных клавиатуры в R2. Указание в программе абсолютных виртуальных адресов 62 и 177562 приводит к обращению по физи­ческим адресам 62 (через РАС 0 с нулевым смещением) и 777562 (через РАС 7 со смещением 600000). Это стало возможным потому, что соответствующие области физических адресов отображены на виртуальное пространство задачи.

Легко сообразить, что размер привилегированной задачи (месте с заголовком и стеком) не должен превышать 8К слов, так для ее отображения резервируются только два РАС.


Работа с прерываниями от внешних устройств

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

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

Предположим, необходимо организовать прием информации из физической установки в режиме прерываний с последующей обработкой информации. Пусть для простоты кодировщик физической информации подключен к ЭВМ через стандартный параллельный интерфейс с адресом регистра команд и состояний 176550, а регистра данных — 176552. Пусть вектор прерывания этого устройства расположен в ячейке с адресом 350. Устройство подключено к пятой линии за­проса прерывания. Появление информации на выходе кодировщика вызывает прерывание, по которому необходимо считать информацию из регистра данных ВУ (один байт) и занести ее в память с целью последующей обработки. Текст программы выглядит следующим образом:


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

INF: .BYTE 0 ; байт для приема инфор-

.EVEN ; мации

START: CINT $ C 350,120000, ISR, EDR, PR5, ASTS

STOP: SPND $ S ; блокирование задачи

.

. ; обработка принятого

. ; байта

BR STOP

EDR: BCS DISB ; подпрограмма разреше-

; ния - запрещения прерываний

ENB: BIS # 100, @ # 176550 ; строка разрешения пре-

RTS PC ; рываний

DISB: BIG # 100, @ # 176550 ; строка запрещения пре-

RTS PC рываний

ISR: MOVB @ # 176552.INF ; программа обработки

; прерываний

CALL @ # $ FORK2 ; переход на уровень от-

CLR @ R3 ; ложенных прерываний

CALL @ # $ QASTC ; активизация АСП и пе-

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

RTS PC ; возврат из 'программы

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

ASTS: RSUM $ С .TASK1 ; разблокирование задачи

TST (SP)+ ; удаление параметра из стека

ASTX $ S ; выход из АСП .

.END START


Рассмотрим выполнение программного запроса CINT $. На стадии выполнения программы запрос CINT $ формирует в динамической области памяти монитора блок передачи прерывания, через который будет осуществляться вызов программы обработки прерывания (ПОП). По адресу вектора прерывания (350) заносится адрес этого блока. Во второе слово вектора прерывания заносится значение ССП, с которым начнется обработка прерывания. Значение приоритета ССП автоматически устанавливается максимальным, равным 7.

Директива CINT $ может использоваться как для связи с вектором прерыва­ния, так и для его освобождения. Последнее вызывается повторным вызовом, директивы CINT $ с тем же значением вектора прерывания, но с нулевым адресом ПОП. Освобождение вектора система выполняет автоматически, если повторного вызова директивы CINT $ не произошло, а задача завершилась.

В процессе связи с вектором прерывания после создания блока передачи прерывания происходит передача управления на подпрограмму разрешения — запрещения прерываний. Входная точка этой подпрограммы, написанной пользо­вателем, указывается среди параметров директивы CINT $ (параметр EDR в при­мере). При выполнении директивы связи с вектором монитор вызывает эту под­программу, предварительно сбросив разряд С в ССП. При освобождении вектора прерывания монитор вызывает ту же подпрограмму, но предварительно установив разряд С в ССП. Пользователь сам проверяет значение этого разряда на входе в подпрограмму и передает управление на строки разрешения или запрещения прерываний.

После выполнения подпрограммы разрешения прерываний (которая в рассматриваемом примере заключается в установке разряда 6 в РКС ВУ) управление передается в основную программу (в примере - на метку STOP) с целью ее продолжения до прихода сигнала прерывания. В примере предполагается, что последующие строки программы организуют обработку принятого байта, поэтому задача блокируется программным запросом SPND $ вплоть до окончания обработки очередного прерывания. Если последующие строки программы не связаны с принимаемыми данными, выполняемая задача может продолжаться асинхронно с обработкой прерываний.

При возникновении прерывания управление через блок передачи прерывания передается специальной системой программе $ INTSC. Происходит переключение процессора в режим системы. Задача отображается через системные РАС (в диспетчере памяти имеются два набора РАС: один - для работы в режиме пользователя и другой — для работы в системном режиме). Процессор работает с приоритетом 7, т. е. внешние прерывания полностью заблокированы. В соответствии с системными соглашениями длительность такого состояния не должна превышать 100 мкс. За это время система проталкивает в стек текущее содержимое РОН R4 и R5, которые могут использоваться в ПОП, понижает приоритет процес­сора с 7 до приоритета ВУ (указывается символически как PR5 в параметрах директивы CINT $ ) и при помощи адреса, находящегося в блоке передачи прерывания, передает управление ПОП (параметр ISR директивы CINT $ ), которая в рассматриваемом примере состоит из одной строки передачи байта данных из РД ВУ по адресу INF. ПОП, написанная пользователем, выполняется, таким образом, на уровне приоритета 5; ее может прервать любое ВУ, имеющее более высокий приоритет. По системным соглашениям время работы на этом уровне (уровень прерываний) не должно превышать 500 мкс. Если обработка прерываний сложна и требует большего времени, следует перейти на уровень отложенных прерываний, что делается с помощью системной программы $ FORK2. На этом уровне приоритет процессора равен 0, т. е. любое ВУ может прервать выполнение ПОП. Следует отметить, что на обоих уровнях прерываний запрещены любые программные запросы - их можно выдавать только на уровне задачи. В рассматриваемом примере на уровне отложенных прерываний не выполняются какие-либо программные строки.

По ходу примера завершение ПОП должно привести к разблокированию задачи. Для этого используется программа обработки АСП, адрес которой ASTS указывается среди параметров директивы CINT $ . АСП активизируется обращением к системной программе $ QASTC. Поскольку обработка АСП происходит уже на уровне задачи, в этой программе возможна выдача программных запросов. Программа обработки АСП с помощью запроса RSUM $ снимает блокировку задачи и возвращает управление в задачу. После обработки принятого байта задача снова блокируется в ожидании очередного прерывания.

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

Среди параметров директивы CINT $ остался нерассмотренным второй параметр — число 120000 в приведенном примере. Это число представляет собой виртуальный базовый адрес, т. е. виртуальный адрес в программе, начиная с которого будет происходить отображение задачи во время выполнения программы обработки прерываний, подпрограммы разрешения — запрещения прерываний системы, когда отображение задачи осуществляется через системный набор РАС. При этом для отображения программных секций задачи выделяется только один РАС 5, т. е. одна виртуальная страница памяти размером 4К слов. Программа Обработки прерываний, подпрограммы разрешения - запрещения прерываний и все поля данных, на которые они ссылаются, должны иметь суммарную длину не более 4К слов, чтобы поместиться в эту виртуальную страницу. Программирование существенно упрощается, если вообще вся задача пользователя, включая стек и заголовок, не превышает 4К слов. Тогда в качестве виртуального базового адреса можно указать ее начальный виртуальный адрес. Поскольку привилегированная задача обычно компонуется с ключом / PR:5, что обеспечивает ее отображение через РАС 5 и начальный виртуальный адрес соответственно 120000, именно этот адрес и указан в качестве базового в рассматриваемом примере. В этом случае при переходе в системный режим отображение задачи переключится с пользовательского РАС 5 на системный РАС 5, в результате чего виртуальные адреса задачи останутся неизменными.

В тех случаях, когда программа не помещается в 4К слов, через системный РАС 5 придется отображать не весь образ задачи, а ту его часть, которая содержит ПОП. Начальный виртуальный адрес этого участка уже не будет равен 120000, но при переходе в режим системы он будет по-прежнему отображаться через системный РАС 5, т. е. на виртуальный адрес 120000. В результате произойдет изменение виртуальных адресов задачи. Программа, работающая в таком режиме, должна быть написана в позиционно-независимом коде, обеспечивающем правильное выполнение задачи при изменении ее виртуальных адресов. Процессоры СМ-4 обеспечивают режимы адресации, которые позволяют писать позиционно-независимые программы. Однако это несколько усложняет программирование.


КОНТРОЛЬНЫЕ ВОПРОСЫ К ГЛАВЕ 8


1. В каком случае будет выполняться установленная задача:

а) когда завершатся более приоритетные задачи;

б) когда освободится место в оперативной памяти;

в) когда задача будет запущена?

2. Какой механизм позволяет захватить ресурсы ЭВМ высокоприоритетной

задаче, находящейся на диске:

а) чекпойнтинг;

б) шафлинг;

в) свопинг?

3. Какой механизм позволяет выполнять большему числу равноприоритетных

задач, чем их может поместиться в оперативной памяти:

а) чекпойнтинг;

б) шафлинг;

в) свопинг?

4. В каком случае целесообразно использовать $-форму системной директивы:

а) если данная директива выполняется в программе многократно;

б) если требуется высокая скорость выполнения программного запроса;

в) если директива имеет большое количество параметров?

5. Куда заносится код завершения директивы:

а) в регистр слова состояния процессора;

б) в слово состояния программы;

в) в слово состояния директивы?

6. Когда выполняется подпрограмма обработки асинхронного системного

прерывания:

а) при запуске этой подпрограммы;

б):при наступлении события, связанного с этой подпрограммой;

в) при завершении основной задачи?

7. Какая директива ОС РВ является аналогом макрокоманды .READC системы

РАФОС:

а) QIO $ с указанием адреса подпрограммы обработки АСП;

б) QIO $ совместно с директивой MRKT $ ;

в) ALUN $ ?

8. Что такое диспетчер памяти:

а) устройство, распределяющее оперативную память между задачами;

б) устройство, позволяющее использовать расширенную память;

в) устройство, контролирующее свободную от задач память?

9. Где находится стек задачи:

а) в динамической области памяти;

б) в мониторе;

в) в области памяти, примыкающей к задаче?

10. От чего ведется отсчет виртуальных адресов:

а) от начала загрузочного модуля; б) от начала объектного модуля;

в) от начала программной секции?

11. Зачем используется разделяемый район, наложенный на страницу

ввода — вывода:

а) для организации режима прерываний;

б) для организации общих для нескольких задач массивов данных;

в) для обращения к регистрам ВУ из непривилегированной задачи?

12. На каких уровнях могут обрабатываться прерывания от ВУ в системе

ОС РВ:

а) на уровнях прерываний, отложенных прерываний и асинхронных системных

прерываний;

б) только на уровне прерываний;

в) только на уровне системных асинхронных прерываний?

ГЛАВА 9

ПРОГРАММИРОВАНИЕ АППАРАТУРЫ КАМАК


§ 9.1. ОБЩИЕ ПРИНЦИПЫ ПРОГРАММИРОВАНИЯ


С широким внедрением системы КАМАК в практику физическо­го эксперимента особое значение приобрели вопросы ее про­граммного обеспечения. В зависимости от решаемых задач, а также от используемых программных и аппаратных средств можно выделить два подхода к его разработке:

использование языков КАМАК высокого, промежуточного или ассемблерного уровней;

непосредственное программирование системы КАМАК на АССЕМБЛЕРе ЭВМ.





Рис. 9.1. Карта адресов крейта КАМАК


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

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

Техника программирования аппаратуры КАМАК зависит от типа контроллера крейта. В гл. 3 была рассмотрена структура типичного контроллера, предназначенного для связи аппаратуры КАМАК с ЭВМ типа СМ-4. Ниже описаны принципы программиро­вания аппаратуры КАМАК с использованием этого контроллера.

Характерная особенность контроллера состоит в том, что для каждого функционального элемента любого модуля крейта выде­лен адрес в адресном поле ЭВМ (рис. 9.1). Так, регистру КАМАК N(1)A(0), т. е. регистру с субадресом А(0), входящему в состав модуля, установленного на первой станции (N=1), соответствует адрес на магистрали ЭВМ 164040 (для крейта с базовым адресом 164000); регистру N (1)А(1) — адрес 164042 и т. д., вплоть до адреса 165376, закрепленного за регистром N(23) А (15). Кроме адресов, предназначенных для обращения к регистрам модулей, в адресном поле ЭВМ отводятся еще 16 адресов для регистров контроллера. В рассматриваемом типе контроллера используются только три регистра с адресами 164000 (РУС), 164002(РЗМ) и 164004 (РСБ).

Как известно, операции КАМАК делятся на безадресные и ад­ресные. Рассмотрим сначала' выполнение безадресных операций, т. е. операций, воздействующих на все модули крейта одновре­менно. Таких операций три: Начальная установка, Сброс и Запрет.

Для выполнения безадресных .операций Начальная установка или Сброс в программе необходимо предусмотреть заполнение соответственно разрядов 9 или 8 РУС. Для установки (сброса) сигнала Запрет необходимо программно записать 1 (0) в разряд 5 РУС. Примеры выполнения безадресных операций (адрес РУС N (0) А (0) = 164000):


MOV #40,@ # 164000 ; установка запрета

BIS #40,@ #164000 ; второй способ установки запрета

BIG #40, @ # 164000 ; сброс запрета

MOV #1000,@ # 164000 ; выполнение операции

; Начальная установка

MOV #400,@ # 164000 ; выполнение операции

; Сброс

Адресные операции КАМАК предусматривают выполнение оп­ределенных действий в конкретных модулях, по конкретным суб­адресам. Для их выполнения требуется сформировать команду КАМАК, в которую входит адресная часть с номером позиции N, занимаемой модулем в крейте, и субадресом А в модуле и часть, определяющая тип выполняемой операции (функция F).

Следует различать команды КАМАК чтения, записи и управ­ления, программное выполнение которых имеет свои особенности.

Рассмотрим сначала программное выполнение команды чтения на примере команды N(1)A(0)F(2) (чтение со сбросом). Опреде­лим адрес регистра КАМАК, из которого надо считать информа­цию, в адресном поле ЭВМ. В соответствии со сказанным выше, регистру модуля N(1)A(0) соответствует адрес 164040. Функция F задается разрядами 0—4 РУС. Выполнение команды КАМАК происходит в два этапа. Сначала заполняются разряды 0—4 РУС, определяющие номер выполняемой функции, а затем выполняется необходимое действие по адресу ЭВМ 164040 с помощью подходя­щей для этого машинной команды. Чаще всего используют коман­ду MOV:


MOV #2,@ # 164000 ; подготовка к выполне-

; нию команды с функци-

; ей F(2)

MOV @ # 164000, RO ; чтение информации из

; регистра КАМАК в ре-

; гистр R0 процессора


Вместо MOV можно применять и другие машинные команды, при выполнении которых считывается информация по указанному адресу, например:


MOV #2,@ # 164000 ADD @ # 164000, R0


Программное выполнение команд записи отличается от рас­смотренного случая только направлением передачи информации. Пример выполнения команды N(1)A(1)F(17):


MOV #17.,@#164000 ; подготовка к выполнению ко-

; манды с функцией F(17)

MOV R0,@#164042 ; запись информации из регистра

; R0 по адресу КАМАК N(1) А( 1)


Программирование управляющих команд КАМАК немного от­личается от рассмотренных случаев. Рассмотрим их программное задание на примере выполнения команды КАМАК N(2)A(0)F(10) (сброс L-запроса). Подготовительная фаза выполнения этой ко­манды такая же, как и в предыдущих случаях: код выполняемой функции задается в соответствующих разрядах РУС. Исполнитель­ной командой в этом случае является любая команда, которая действует по нужному субадресу. Чаще всего для этого используют команду TST:


MOV #10.,@#164000 ; задание функции

; F(10)

TST @#164000 ; выполнение коман-

; ды


До сих пор мы рассматривали обмен с модулями КАМАК словами длиной не более 16 разрядов. Возможность программного обмена 24-разрядными словами дает еще один управляющий ре­гистр контроллера — регистр старшего байта (РСБ), обращение к которому для чтения и записи данных осуществляется по адресу N(0)A(2). При выполнении команд чтения младшие 16 разрядов слова КАМАК поступают, как описано выше, по адресу приемника, а старшее 8 разрядов — в РСБ. В этом случае требуется выпол­нить еще одну машинную команду для чтения содержимого РСБ. Приведем пример программирования команды КАМАК N(1)A(0)F(2) для этого случая:


MOV #2,@#164000 ; задание функции F(2)

MOV @# 164040, R0 ; выполнение команды. Младшие

; 16 разрядов поступают в R0,

; старшие 8 разрядов — в РСБ

MOV @#164004, R1 ; чтение старших 8 разрядов из

; РСБ в R1


Для выполнения команды записи необходимо предварительно записать в РСБ старшие 8 разрядов 24-разрядного слова КАМАК. Для примера рассмотрим выполнение команды N(1)A(1)F(17):


MOV #17.,@#164000 ; задание функции F(17)

MOV Rl,@ #164004 ; заполнение РСБ из регистра R1

MOV R0,@#164042 ; выполнение операции. Запись

; в модуль 24-разрядного слова

; КАМАК, младшие 16 разрядов

; которого поступают из RO, стар-

; шие 8 разрядов — из РСБ


В процессе обработки информации, поступающей от модулей, приходится анализировать состояние сигналов L, Q и X. Это легко сделать с помощью команд проверки:


TST @#164000 ; проверка сигнала Q

BPL Q0 ; переход на метку Q0, если Q=0

BMI Q1 ; переход на метку Q1, если Q=1

W: TSTB @#164000 ; проверка требования прерывания

BPL W ; ожидание установки требования прерывания

BIT #4000,@#164000 ; проверка сигнала X

BEQ ERR ; переход на метку ERR, если Х=0


Принципы управления ВУ, рассмотренные в § 5.7, в полной мере применимы к программированию аппаратуры КАМАК. Так же, как и в случае стандартных ВУ, обмен информацией с модулями КАМАК может выполняться двумя способами: в режиме про­граммного управления и в режиме прерываний. Поскольку аппара­тура КАМАК в большинстве случаев воспринимает события, име­ющие случайный характер и возникающие в неопределенные за­ранее моменты времени, большая часть взаимодействия аппаратуры КАМАК с ЭВМ происходит в режиме прерываний. Режим программного управления используется главным образом для передачи одноразовых порций информации из ЭВМ в регистры КАМАК, если точно известно, что они готовы к приему этой информации. Таким образом, например, подаются команды на генерацию уп­равляющих сигналов КАМАК — Z; С, I; очищаются заданные регистры; устанавливаются коды масок в регистрах масок и т. д. В этих случаях нет необходимости ожидать каких-либо сигналов готовности устройства. Рассмотрим несколько примеров таких команд.

Пусть на первой станции крейта установлен счетчик с пред­установкой. Требуется привести аппаратуру в начальное состояние и установить в счетчике число 10000. Предустановка счетчика осуществляется командой NA(0)F(16):


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

MOV #16.,@#164000 ; код F(16) в РУС

MOV #10000.,@# 164040 ; выполнение команды — предустановка счетчика


Предположим, что требуется программно проверить наличие и работоспособность модулей, установленных на станциях 1 и 2. Известно, что в обоих модулях должна выполняться команда A(0)F(9) —сброс некоторых регистров:


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

MOV #9.,@# 164000 ; код F(9) в РУС

TST @#164040 ; выполнение команды в модуле 1

BIT #40000,@# 164000 ; проверка X

BEQ ERR1 ; переход на метку ERR1, если Х=0

TST @# 164100 ; выполнение команды в модуле 2

BIT #40000,@# 164000 ; проверка X

BEQ ERR2 ; переход на метку ERR2, если Х=0


В ряде случаев не только начальную установку или проверку, но и прием данных из модуля целесообразно осуществлять в ре­жиме программного управления. Этот режим обеспечивает мини­мальные задержки в приеме информации. Однако принять данные из модуля КАМАК можно, только если эти данные в модуле уже сформированы. Для многих модулей появление в выходном регист­ре модуля данных приводит к установке LAM-требования. Если это требование не замаскировано ни в модуле, ни в контроллере (в РЗМ), то оно приводит к L-запросу и установке разряда 7 РУС. При этом если разряд разрешения прерываний РУС сброшен, то прерывания работы ЭВМ не происходит, но, опрашивая разряд 7 РУС, можно установить факт готовности модуля к передаче данных. Фрагмент программы приема данных из модуля командой N(1)A(10)F(2) выглядит следующим образом:


MOV #2,@#164000 ; код F(2) в РУС. Подготовка к выполнению

; команды чтения со сбросом

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

BPL W ; ожидание установки разряда 7

MOV @# 164040, R0 ; передача кода из выходного регистра модуля в R0


Описанный способ обеспечивает максимальную скорость при­ема информации. Действительно, задержка между моментом по­явления кода в выходном регистре модуля и его поступлением в регистр R0 процессора определяется временем выполнения команд TSTB, BPL и MOV, на что требуется приблизительно 5,4+2,1 + +4,8=12,3 мкс для ЭВМ СМ-4 и 9,2+4+8=21,2 мкс для ЭВМ Электроника-60. При этом предполагается, что к моменту установ­ки L-запроса магистраль КАМАК была свободна. Однако исполь­зовать приведенную выше последовательность команд можно только в том случае, если в крейте имеется единственный источ­ник L-запроса. Если источников несколько, то можно предложить несколько способов программного управления:

1. ожидание установки разряда 7 РУС, как это делалось в приведенном фрагменте, а затем поиск источника L-запроса по­следовательным выполнением команды NAF(8). Найдя (по отве­ту Q) модуль, выставивший запрос, следует перейти к выполнению участка программы, в котором информация считывается именно из этого модуля. Процедура поиска и перехода требует значитель­ного дополнительного времени;

2.ожидание установки соответствующего разряда в регистре запросов и маски РЗМ. Пусть, например, L-запрос от интересу­ющего нас модуля устанавливает разряд 2 старшего байта РЗМ (рис. 9.2). Фрагмент программы приема информации из модуля с ожиданием его готовности выглядит следующим образом:


MOV #2,@# 164000 ; подготовка к выполнению команды чтения со сбросом

W: BIT #2000,@# 164002 ; проверка разряда 2 в байте запросов РЗМ

BEQ W ; ожидание готовности

MOV @#164040,R0 ; прием кода из модуля


Скорость передачи информации здесь будет несколько ниже, чем в случае анализа РУС из-за большего (примерно на 1 мкс) времени выполнения двухадресной команды BIT по сравнению с одноадресной командой TSTB;

3. ожидание появления LAM-требования в модуле, для чего обычно используется функция F(27). Этот способ несколько слож­нее предыдущих:


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

W: TST @# 164040 ; проверка LAM-требования в модуле

BPL W ; ожидание готовности

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

MOV @# 164040, R0 ; передача кода


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

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





Рис. 9.2. Регистр запросов и маски


Пусть, например, модули — источники L-запросов установлены на станциях 6 и 8 и за ними закреплены разряды 2 и 3 РЗМ. Для размаскирования L-запросов от этих модулей надо выполнить команду (при базовом адресе крейта 164000)


MOV #14,@#164002


Поступление L-запроса от модуля устанавливает соответст­вующий разряд старшего байта РЗМ, разряд 7 РУС и, если прерывания разрешены (разряд 6 РУС установлен), инициирует механизм прерывания. Как было описано в § 5.7, внешнее устройст­во ЭВМ, в данном случае — контроллер КАМАК, получив от ЭВМ разрешение на передачу, выставляет на линии данных магистра­ли ЭВМ адрес своего вектора прерывания, в котором хранятся адрес программы обработки прерывания (ПОП) от данного уст­ройства и слово состояния процессора с приоритетом ПОП.

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

очистка регистра (в модуле), из которого принимались данные, с целью подготовки его к формированию следующей порции дан­ных;

разблокировка входа модуля, если он блокируется аппаратными средствами самого модуля в процессе формирования данных;

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

разрешение дальнейших прерываний от контроллера, для чего следует установить разряд 6 РУС. Этот разряд автоматически сбрасывается контроллером после получения от ЭВМ подтвержде­ния прерывания от данного источника.

Рассмотрим, например, простейший вариант программы обра­ботки прерываний от амплитудно-цифрового преобразователя. В ПОП будут использованы следующие команды АЦП:


F(0)A(0) —считывание кода из выходного регистра АЦП;

F(9)A(0) —сброс выходного регистра; F(26)A(1) —разблокировка входа АЦП;

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


Если модуль установлен на станции 3, текст ПОП будет выг­лядеть следующим образом:


А0= 164140

A1=164142

CSR= 164000

CLR @#СSR ; в РУС F(0)

MOV @#А0, R4 ; в R4 результат преобразования

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

TST @#А0 ; сброс выходного регистра

АЦП

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

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

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

TST @#А0 ; сброс LAM-требования в модуле

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

RTI ; контроллера


Для упрощения программы обработки прерываний от АЦП и, главное, для сокращения времени ее выполнения конструкция АЦП предусматривает возможность использования комбинированной ко­манды F(2)A(0) —'считывание кода, сброс выходного регистра, сброс LAM-требования, разблокировка входа. С использованием функции F(2) ПОП будет выглядеть следующим образом:


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

MOV @#А0, R4 ; в R4 результат преобразования

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

RTI


В рассмотренном примере предполагается только один источник L-запроса в модуле. Если модуль содержит несколько источников L-запроса, то в ПОП прежде всего надо определить, какой именно регистр данного модуля требует обслуживания. Наконец, если крейт содержит большое количество модулей и за каждым разрядом РЗМ закреплена группа модулей (в каждом из которых может быть несколько источников L-запроса), то в ПОП следует сначала определить, какой из модулей данной группы запросил обслужи­вание, а затем найти источник L-запроса в данном модуле.

Приведенные выше примеры предполагали использование конт­роллера крейта, описанного в гл. 3. Этот контроллер не явля­ется единственным. Другие типы контроллеров могут отличаться способом задания команды КАМАК, количеством векторов пре­рываний и другими частностями, _но общие принципы програм­много управления аппаратурой КАМАК остаются неизменными.