На начало страницы
| Главная страница | Обмен с внешними устройствами | Системная шина ISA | Платы расширения для шины ISA |
| Пример системы сбора данных | Система виртуальной отладки | Справочная информация |
Построение систем сбора и обработки 
информации
Система виртуальной отладки
Описание портов внешних устройств

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

ЗАДАНИЕ ПАРАМЕТРОВ ПОРТОВ
При описании портов - адресуемых элементов в пространстве вввода-вывода процессора, параметры портов и их интерфейс с системной шиной задаются в макроопределениях как константы PNum - адpес поpта; PType - тип поpта; PSize - pазpядность порта.
Принципиальная схема платы расширения должна быть составлена точно для реализации вполне определенных функций и программа обмена процессора с платой должна точно учитывать все особенности схемы.
По системной шине обмен может производиться только байтами (8 разрядов) или словами (16 разрядов) как результат выполнения различных команд ввода-вывода:
in   al, dx ; ввод байта в регистр al из порта, адрес которого указан в регистре dx,
in   ax, dx ; ввод слова в регистр ax из порта, адрес которого указан в регистре dx,
out   dx, al ; вывод байта из регистра al в порт, адресуемый первым операндом,
out   dx, ax ; вывод слова из регистра ax в порт, адресуемый первым операндом.
Для предотвращения ошибочного выполнения программы (например, искажения содержимого аккумулятора) или ошибочной реакции на команды ввода-вывода во внешних устройствах необходимо строго соблюдать соответствие между используемыми командами, схемной реализацией интерфейса порта платы с линиями данных системной шины и, соответственно, описанием порта в макроопределениях - выбором константы PSize, равной PS_Byte или PS_Word. Реально в разрабатываемых в практикуме системах разрядность портов равна 8. Поэтому в СВО по умолчанию считается, что поpты имеют pазpядность один байт. При этом следует иметь в виду, что при обращении к порту на запись или на чтение по линиям данных системной шины всегда передается 8 разрядов, независимо от того - все 8 разрядов порта подключены к шине или только некоторые их них.
После разработки принципиальной схемы платы расширения становятся известными общее количество занимаемых адресов в пространстве ввода-вывода, причем всегда определяется также определенный набор базовых адресов (Абаз), на которые могут быть настроены как плата расширения, так и программа обмена с платой. Это позволяет определить для портов константы PNum, а также выбрать типы макроопределений Memory, MemDual, или System, в котором указывается эта константа.
В программе отладки между макроопределениями StartRedirect и StopRedirect команды ввода-вывода могут использоваться для обращения к различным типам внешних устройств:
- Устройствам, расположенным на плате расширения. Для таких устройств типом макроопределения может быть Memory или MemDual.
- Реальным устройствам ПК, которые в момент отладки используются только самой отлаживаемой программой. Вероятнее всего этими устройствами будут последовательный или параллельный порт ПК. Для таких устройств типом макроопределения может быть System. Однако задавать и контролировать состояния регистров этих устройств можно только имитацией в отладчике команд ввода-вывода. Поэтому более удобно использовать макроопределения Memory или MemDual.
- Реальным устройствам ПК, которые в процессе отладки используются и другими программами. Чаще всего такими устройствами являются системный таймер и контроллер прерываний. Можно для описания портов этих устройства воспользоваться макроопределением System, однако настоятельно рекомендуется применять Memory.
Макроопределения должны быть составлены для всех портов имеющихся на схеме и для всех адресов, которые встречаются в программе. Указание лишних адресов - адресов портов, которых нет на плате расширения, считается ошибкой. Однако, не возбраняется для используемых на плате интерфейсных БИС или портов ПК описывать все адресуемые порты, даже те, к которым нет обращений в программе обмена - эти порты имеются в БИС или портах и указание адресов свидетельствует о знании структуры этих устройств.

В программе, написанной на Ассемблере, в командах ввода-вывода действительные значения адресов портов могут встретиться только в случае, если эти адреса не превышают 255 (0FFh). Такие адреса в разрабатываемых программах чаще всего являются адресами регистров контроллеров прерываний.
В макроопределениях константа PNum должна быть равна реальному адресу порта устройства с обязательным обозначением системы счисления.
При величинах адресов, превышающих 255 (0FFh), используются команды с косвенной адресацией через регистр dx. В командах, изменяющих содержимое регистра dx, действительные значения адресов портов встречаться не должны - сама программа должна настраиваться на базовый адрес портов платы расширения - Абаз. В программе всегда должна быть определена переменная для обозначения базового адреса, например, BASE и именно эта переменная используется в командах:
mov   dx, BASE,
in   al, dx,
mov   dx, BASE+8,
in   al, dx ; ввод из порта с адресом Абаз+8.
Возможно также использование команд
inc   dx,
dec   dx.
При использовании переменной для обозначения базового адреса макроопределения должны быть составлены для всех портов при всех возможных значениях Абаз, причем константы PNum указываются равными действительным адресам портов. Все макроопределения должны сопровождаться комментариями.

Пример описания портов
Иногда в программе в сегменте данных .data адресам портов присваиваются символические имена:
Adr_300    EQU 300h
Adr_301    EQU 301h
Adr_302    EQU 302h.
В таком случае именно эти символические имена могут быть указаны в макроопределениях как значения констант PNum.
Memory Adr_300, PT_In,,0FFh ;
Memory Adr_301, PT_In,,0FFh ;
Memory Adr_302, PT_InOut,,0FFh ;

Схемная реализация портов для разных операций обмена с процессором в макроопределениях задается выбором константы PType, равной PT_In, PT_Out или PT_InOut, а также выбором типа макроопределений Memory, MemDual, или System, в котором указывается эта константа.
Проверьте свои знания
Типы портов
Описание порта в макроопределении должно точно соответствовать схеме платы расширения. Если порт ориентирован только на чтение и команды записи данных по его адресу нет в программе, то указание константы как PT_InOut считается ошибкой. Порты интерфейсных БИС могут работать как в режиме ввода, так и в режиме вывода. Однако, указание константы как PT_InOut для порта БИС, настраиваемого программой инициализации только на один тип обмена, также считается ошибкой. Кроме того, следует принимать во внимание особенности интерфейсных БИС или стандартных внешних устройств ПК - по некоторым адресам определенные операции обмена (запись или чтения) могут быть запрещены.
Следует помнить, что при описании регистра данных БИС последовательного интерфейса или последовательного порта ПК следует использовать макроопределение MemDual (PNum, PT_InOut, PS_Byte)

ЗАДАНИЕ ИСХОДНОГО СОСТОЯНИЯ
Для портов памяти СВО позволяет задавать как начальное состояние, так и имитировать изменение их состояния под действием внешних сигналов в процессе выполнения программы. Ошибочным является задание начального состояния порта, равного, например, одной из комбинаций внешних сигналов, для которой будет отлаживаться программа. Начальное состояние должно отражать реальную ситуацию, которая возникает на входах порта или в его внутренних регистрах после подачи на плату расширения сигнала системного сброса RESDRV. Не всегда эти значения нулевые, что по умолчанию задается СВО.
При задании начального состояния - константы PValue следует учитывать тип порта - ориентацию на чтение или запись, схемную реализацию порта - сколько линий и как подключены к системной шине. Необходимо верно определять положение старших и младших разрядов кода состояния и указывать признак системы счисления.
Для портов, являюшихся частью БИС параллельного или последовательного интерфейса, БИС программируемого таймера, контроллера прерываний, стандартных внешних устройств ПК - параллельного или последовательного портов указание начального состояния позволяет судить о понимании принципов работы этих схем. Например, в БИС параллельного интерфейса независимо от желаемого режима работы и типа обмена все порты сигналом системного сброса, в обязательном порядке подаваемом на БИС, всегда устанавливаются во вполне определенное состояние.
В случае схемной реализации порта, ориентированного на запись, в виде регистра или отдельных триггеров, его начальное состояние определяется именно схемной реализацией - или состояние может быть произвольным, или же сигналом системного сброса элементы памяти устанавливаются в определенное состояние. Если не все разряды регистра подключены к линиям данных системной шины или количество используемых триггеров меньше заданной разрядности порта, в неиспользуемых разрядах кода начального состояния можно записать произвольную величину.
Реализация порта, ориентированного на чтение, может представлять собой передатчик с "трехстабильным" выходом. На входах передатчика может быть жестко запаян код наличия платы или же ко входам могут быть подключены выходы регистра, отдельных триггеров или выходы АЦП. Начальное состояние такого порта также полностью определяется схемной реализацией.
Для портов, ориентированных на чтение, особого внимания заслуживает ситуация, когда в передаваемом байте используются не все разряды. Например, порт передает в процессор только 4 разряда и в схеме платы расширения используется только четырехразрядный передатчик, однако процессор по команде чтения примет в регистр AL целый байт. Со другой стороны, СВО не позволяет задать состояние только каких-то отдельных разрядов порта - задаваемое состояние при чтении это то, что будет приниматься процессором с шины в аккумулятор. В рассматриваемом случае к четырем разрядам шины ничего не подключено, что равносильно при команде чтения выдаче на эти разряды шины "третьего" состояния и в соответствующие разряды регистра AL будут записаны "1". Именно эти значения и должны быть записаны в константе PValue.
Как вариант этой ситуации можно представить случай использования 8-разрядного передатчика или 8-разрядного порта БИС паралелльного интерфейса. Все выходы передатчика или выходы БИС подключаются к линиям данных, но на входах передатчика или порта БИС некоторые разряды не используются - на схеме "висят в воздухе".
Отладка программы

| На главную страницу | На начало раздела | На начало страницы | © КСиТ МИФИ, 2001 г.