Программное обеспечение системы сбора данных установки ВЕС
Драйвер устройства AM (Адаптер МИСС)


Для чтения данных, получаемых электроникой МИСС установки ВЕС используется плата RDO в стандарте ISA, установленная в компьютере BEC - AlphaStation 600au.

Доступ к внешним устройствам в операционной системе VMS осуществляется при помощи драйвера устройства, таким драйвером для устройства AM (адаптер МИСС) является AMDRIVER.

Драйвер устройства в VMS - это набор подпрограмм и таблиц, которые использует операционная система для обработки запросов ввода/вывода определенного устройства (или категории устройств). Основную часть работы по обработке запроса операционная система берет на себя, драйвер же должен сосредоточиться на специфичных для данной аппаратуры вопросах. Для этого операционная система предоставляет драйверу следующие сервисы:

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

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

Драйвер устройства AM (AMDRIVER.MAR) - это Step 2 OpenVMS device driver, написанный на языке MACRO-32. Он содержит макро-библиотеку для работы с картами расширения ISA и PCI в AlphaStation и выполняет ряд стандартных функций по инициализации устройства, обработке запросов ввода/вывода и прерываний.

Через системный вызов $QIO пользователю доступны следующие функции:

ИмяОписание
AM$READDMA чтение блока данных (макс.64 Кбайт)
AM$WAIT_NIMОжидание сигнала NIM1 или NIM2
AM$SEND_NIMПосылка сигнала NIM3 или NIM4
AM$READ_ISAЧтение байта из порта ISA
AM$WRITE_ISAЗапись байта в порт ISA
AM$READ_PCIЧтение байта конфигурации PCI устройства
AM$WRITE_PCIЗапись байта конфигурации PCI устройства

Чтение блока данных и ожидание сигналов NIM имеют таймаут - 2 и 15 секунд соответственно. Чтение блока принудительно заканчивается по приходу сигнала NIM2. Число принятых байт, статус завершения операции и содержимое регистра состояния модуля RDO возвращаются в блоке статуса ввода/вывода (IOSB).

Операции чтения портов ISA и PCI возвращают прочитанный байт на месте регистра статуса в IOSB. Чтение и запись портов ISA и конфигурации PCI устройств необходимы для программирования контроллера моста PCI/ISA (Intel 82378ZB или Cypress 82C693) с целью оптимизации скорости передачи данных, в частности моды DMA. Также можно немного увеличить частоту шины ISA (с 8.33 до 11Мгц).

После загрузки, AMDRIVER проверяет наличие платы адаптера МИСС, и в случае успеха создает в системе устройство с именем "AMA0:". Для обращения к функциям драйвера через $QIO интерфейс из программы на языке FORTRAN необходимо вначале открыть канал на это устройство:

ist = SYS$ASSIGN('AMA0:',chan,,,)

Общая форма вызова функций драйвера:

ist = SYS$QIO[W]([efn], chan, func, [iosb], [astadr], [astprm], [p1], [p2], [p3], [p4], [p5], [p6])

В скобках указаны необязательные параметры. В соответствии с интерфейсом $QIO все численные параметры передаются по значению, в отличие от принятого в языке FORTRAN соглашения о передаче параметров по адресу. Для этого можно использовать макрос "%VAL".

Назначение параметров, общих для всех запросов:

Специфические параметры запроса ввода вывода P1-P6 зависят от функции:

ФункцияНазначениеПараметры
AM$READЧтение блока данныхP1 - адрес буфера
P2 - число байт
AM$WAIT_NIMОжидание сигнала NIMP1 - номер NIM, 1 или 2
AM$SEND_NIMПосылка сигнала NIMP1 - номер NIM, 3 или 4
AM$READ_ISAЧтение порта ISAP1 - номер порта
[P2] - номер индексного порта
[P3] - значение индекса
AM$WRITE_ISAЗапись порта ISAP1 - номер порта
P2 - значение байта данных
[P3] - номер индексного порта
[P4] - значение индекса
AM$READ_PCIЧтение порта PCIP1 - номер узла
P2 - номер порта
AM$WRITE_PCIЗапись порта PCIP1 - номер узла
P2 - номер порта
P3 - значение байта данных

Индексные регистры ISA используются для конфигурирования мод работ DMA моста PCI/ISA фирмы Cypress.

Номер узла (node) PCI формируется следующим образом:

3116158 7320
unused bus# dev# fun#
Например номер узла моста PCI/ISA равен 38(hex).

Блок статуса ввода/вывода после исполнения запроса содержит статус выполнения, число переданных байт и регистр состояния карты RDO. Функции чтения портов ISA/PCI возвращают данные в поле статуса ввода/вывода:

3116150
Число байтСтатус ввода/вывода
Регистр состояния карты RDO

Исходный текст драйвера AMDRIVER.MAR и процедуры его сборки а также загрузки находятся в каталоге ONL$SRC:[AM]. Для пере-сборки драйвера следует использовать командный файл AMDRIVER.COM с параметром MACRO. Параметр LOAD служит для загрузки и инициализации драйвера операционной системой после включения компьютера.


Last updated Jan-2004 by Solo