Здесь рассмотрено взаимодействие программ с интерфейс- ными адаптерами. Приведены краткие сведения по архитек- туре PC. Описаны организация пространств памяти и вво- да/вывода, система прерываний и прямой доступ к памяти. Более подробные сведения можно найти в книге "Аппарат- ные средства IBM PC. Энциклопедия" ("Питер", 1998).
А.1. Пространство памяти
Логическая структура памяти PC обусловлена системой ад- ресации процессоров семейства х86. Процессоры 8086/88, применявшиеся в первых моделях IBM PC, имели адресное пространство 1 Мбайт (20 бит шины адреса). Начиная с про- цессора 80286 шина адреса была расширена до 24 бит, затем (386DX, 486, Pentium) до 32 и, наконец, до 36 бит (Pentium Pro, Pentium II). В реальном режиме процессора, используемом в DOS, формально доступен лишь 1 Мбайт памяти. Однако из-за ошибки эмуляции процессора 8086 в реальном режиме процессоры 80286 и выше имеют макси- мально доступный адрес lOFFEFh, что на (64К-16) байт больше. Область lOOOOOh-lOFFEFh называется высокой па- мятью - High Memory Area (HMA). В нее помещают часть ОС реального режима и небольшие резидентные програм- мы. Для полной совместимости с процессором 8086/88 име- ется вентиль линии А20 шины адреса - GateA20, который либо пропускает сигнал от процессора, либо принудительно обнуляет линию А20 системной шины адреса.
Основную часть адресного пространства занимает оператив- ная память. Объем установленной памяти определяется те- стом POST при включении компьютера, начиная с младших адресов. Натолкнувшись на отсутствие памяти (ошибку), тест останавливается и сообщает системе объем памяти.
Память, непосредственно адресуемая процессором, распре- деляется следующим образом:
^ OOOOOh-9FFFFh - Conventional {Base) Memory, 640 Кбайт - стандартная (базовая) память, доступная DOS и программам реального режима. В некоторых сис- темах с видеоадаптером MDA верхняя граница сдвигает- ся к AFFFFh (704 Кбайт). Иногда верхние 128 Кбайт стандартной памяти (область 80000h-9FFFFh) называют Extended Conventional Memory.
^ AOOOOh-FFFFFh - Upper Memory Area (UMA), 384 Кбайт - верхняя память, зарезервированная для си- стемных нужд. В ней размещаются буферы интерфейс- ных адаптеров (например, видеопамять) и постоянная память (BIOS с расширениями).
^ Память выше lOOOOOh - Extended Memory -дополнитель- ная (расширенная) память, непосредственно доступная только в защищенном режиме компьютеров 286 и выше.
Для компьютеров класса AT с 24-битной шиной адреса верх- няя граница дополнительной памяти - FDFFFFh (макси- мальный размер 14,9 Мбайт). Область FEOOOOh-FFFFFFh содержит ПЗУ BIOS (ROM BIOS Area); обращение к ней эквивалентно обращению к ROM BIOS по адресам OEOOOOh- OFFFFFh.
Для процессоров 386 и 32-битной шины адреса теоретичес- кая верхняя граница - 4 Гбайт, а для Pentium Pro и Pentium II-64 Гбайт (36-битная шина адреса). Обращение по адресам, превышающим границу установленной опера- тивной памяти (или максимально возможного объема), транслируется на шину PCI, которая имеет 32-битную ад- ресацию. В компьютерах с 32-разрядной шиной адреса об- раз BIOS дополнительно проецируется в адреса FFFEOOOOh- FFFFFFFFh. Иногда используется проекция BIOS в область FEOOOOh-FFFFFFh, что не позволяет использовать более
11 Зак.№530
16 Мбайт ОЗУ, поскольку система находит только непре- рывную область расширенной памяти. Для использования специфических адаптеров ISA, имеющих буфер с адресами в 16-м мегабайте памяти, в BIOS Setup предусматривают опцию Memory Hole At 15- 16М. Ее установка не позволяет использовать оперативную память свыше 16 Мбайт.
Для взаимодействия с интерфейсными адаптерами ISA ин- тересна верхняя память UMA. Стандартное распределение верхней памяти выглядит следующим образом:
^ AOOOOh-BFFFFh - Video RAM, 128 Кбайт - видеопамять (обычно используется не полностью).
^ COOOOh-DFFFFh - Adapter ROM, Adapter RAM, 128 Кбайт - зарезервировано для адаптеров, использую- щих собственные модули ROM BIOS и/или специаль- ное ОЗУ, разделяемое с системной шиной.
^ EOOOOh-EFFFFh - свободная область, 64 Кбайт, иногда занятая под System BIOS.
т FOOOOh-FFFFFh - System BIOS, 64 Кбайт - ROM на системной плате (в XT используется только FEOOOh- FFFFFh - 8 Кбайт).
т FDOOOh-FDFFFh - ESCD (Extended System Configuration Data) - область энергонезависимой памяти, используе- мая для конфигурирования устройств РпР. Эта область присутствует только при наличии РпР BIOS; ее положе- ние и размер жестко не заданы.
В области UMA практически всегда присутствует графичес- кий адаптер. В зависимости от модели он занимает следую- щие области:
т MDA RAM - BOOOOh-BOFFFh т CGA RAM - B8000h-BBFFFh т EGA ROM - COOOOh-C3FFFh/C7FFFh m VGA ROM - COOOOh-C7FFFh
m EGA, VGA RAM - AOOOOh-BFFFFh, в зависимости от ви- деорежима используются следующие области: Graphics - AOOOOh-AFFFFh; Color Text - B8000h-BFFFFh; Mono Text - BOOOOh-B7FFFh.
Распространенным потребителем UMA являются расшире- ния ROM BIOS, расположенные на платах дисковых контрол- леров, адаптеров SCSI, сетевых картах и т. д. Обычно они занимают область CSOOOh - CBFFFh/C9FFFh/C8FFFh (для дисковых контроллеров), но могут перемещаться при кон- фигурировании адаптеров.
А.2. Пространство ввода/вывода
Процессоры х86 имеют раздельную адресацию памяти и пор- тов ввода/вывода. Инструкции ввода/вывода порождают шинные циклы обмена, в которых вырабатываются сигналы IORD# (чтение порта) и IOWR# (запись в порт) на шинах ввода/вывода. Эти сигналы отличают пространство ввода/ вывода от пространства памяти, где соответствующие опе- рации чтения и записи вырабатывают сигналы MEMRD# и MEMWR#. Для обращения к пространству ввода/вывода пред- назначены четыре основные инструкции процессора: IN (ввод в регистр), OUT (вывод из регистра), INS (ввод из порта в элемент строки памяти) и OUTS (вывод элемента из строки памяти). Последние две инструкции с префиксом повтора REP используются для быстрой пересылки блоков данных между портом и памятью. Разрядность слова, передаваемо- го за одну инструкцию ввода/вывода, может составлять 8, 16 или 32 бита. В зависимости от выравнивания адреса по гра- нице слова и разрядности шины это слово может переда- ваться за один или несколько циклов шины.
Сигналы IORD# и IOWR# вырабатываются и в циклах DMA;
в этом случае на шину адреса подается адрес памяти, к кото- рой производится доступ, а не порта. Для блокировки сраба- тьшания дешифратора адреса порта в цикле DMA в шине ISA имеется сигнал AEN. Селективное программное управление сигналом AENx для каждого слота шины EISA дает возмож- ность изолировать пространства ввода/вывода портов, что используется для программного конфигурирования адресов адаптеров. В шине ISA разделение слотов не предусмотрено, что объясняет сложность реализации для нее системы РпР.
Для дешифрации адреса в оригинальном PC из 16 бит ис- пользовались только младшие 10 (АО-А9), что позволяет об-
ращаться к портам 0-3FFh. Старшие биты адреса, хотя и поступают на шину, устройствами игнорируются. Так, обра- щение по адресам 378h, 778h, B78h и F78h воспринимается устройствами одинаково. В адаптерах для шин МСА и PCI используются все 16 бит адреса. Современные системные платы полностью дешифруют адрес.
В реальном режиме процессора программе доступно все про- странство адресов ввода/вывода. В защищенном режиме (в частности, в режиме виртуального процессора 86) можно программно ограничить пространство ввода/вывода, опре- делив его максимальный размер. Внутри разрешенной обла- сти доступ может быть разрешен или запрещен для каждого конкретного адреса. Размер области и карта разрешенных портов (70 Permission Bitmap) задаются ОС в дескрипторе сегмента состояния задачи (TSS). При обращении по нераз- решенному адресу вырабатывается исключение процессора, обработчик которого определяется ОС. Возможно снятие задачи-нарушителя. Не исключено, что по обращению к пор- ту ОС выполнит некоторые действия, создав для програм- мы иллюзию реальной операции ввода/вывода.
Несколько портов вывода могут иметь совпадающие адреса. Операции записи они будут отрабатывать нормально. Для операций считывания ситуация другая. Если несколько пор- тов ввода имеют совпадающий адрес, при считывании они передают свои данные на шину. Если они находятся на од- ной физической шине, возникает конфликт. При прочих рав- ных условиях для каждого бита шины "побеждает" порт, выводящий логический ноль. Так, если один порт "хочет" передать байт OFh, а другой - FOh, то процессор считает OOh. Если порты находятся на разных физических шинах (напри- мер, один в ISA, а другой - в PCI), конфликта не будет, по- скольку шины отделены друг от друга буферами данных. Каждой шине назначается своя область ввода, и дешифра- тор, расположенный на системной плате, при чтении откры- вает соответствующие буферы, так что реально считывают- ся данные только с одной шины. При записи в порты данные (и сигнал записи) обычно распространяются по всем ши- нам компьютера. Адреса Oh-OFFh отведены для устройств системной платы, чтение по этим адресам не распространя-
ется на шины расширения. Для современных плат со встро- енной периферией и несколькими шинами (ISA, PCI) рас- пределением адресов управляет BIOS через регистры кон- фигурирования чипсета.
Приведенные выше рассуждения справедливы и для про- странства памяти, но, как правило, они актуальны только для портов ввода/вывода.
Карта распределения адресов ввода/вывода стандартных устройств приведена в табл. АЛ. Подразумевается 10-битная дешифрация адреса.
AT и PS/2
|
PC/XT
|
Назначение
|
000-OOF
|
000-OOF
|
Контроллер DMA #1 8237
|
010-01F
|
|
PS/2 - расширение DMA # 1
|
020-021
|
020-021
|
Контроллер прерываний #1 - 8259А
|
040-05F
|
040-043
|
Таймер (PC/XT: 8253, AT: 8254)
|
060
|
060
|
Диагностический регистр POST (только запись)
|
|
060-063
|
Системный интерфейс 8255
|
060,064
|
|
Контроллер клавиатуры AT 8042
|
061
|
|
Источники NMI и управление звуком
|
070-07F
|
|
Память CMOS и маска NMI
|
080
|
|
Диагностический регистр
|
080-08F
|
080-083
|
Регистры страниц DMA
|
090-097
|
|
PS/2: микроканал, арбитр и т. д.
|
|
ОАО
|
Маска NMI
|
OAO-OBF
|
|
Контроллер прерываний #2 - 8259А
|
OCO-ODF
|
|
Контроллер DMA #2 8237А-5
|
OFO-OFF
|
|
Сопроцессор 80287
|
100-1 EF
|
|
Управление микроканалом PS/2
|
170-177
|
|
Контроллер НЖМД #2 (IDE#2)
|
1FO-1F7
|
|
Контроллер НЖМД #1 (IDE#1)
|
AT и PS/2
|
PC/XT
|
Назначение
|
200-207
|
200-20F
|
Игровой адаптер
|
|
210-217
|
Блок расширений
|
238-23F
|
|
COM4
|
278-27F
|
278-27F
|
Параллельный порт LPT2 (LPT3 при наличии MDA)
|
|
2А2-2АЗ
|
Часы MSM48321RS
|
2CO-2DF
|
2CO-2DF
|
EGA #2
|
2ЕО-2Е7
|
|
COM4
|
2E8-2EF
|
|
COM4
|
2F8-2FF
|
2F8-2FF
|
COM2
|
300-31F
|
|
Плата-прототип
|
|
320-32F
|
Жесткий диск XT
|
338-33F
|
|
COM3
|
370-377
|
|
Контроллер НГМД #2
|
376-377
|
|
Порты команд IDE#2
|
378-37F
|
378-37F
|
Параллельный порт LPT1 (LPT2 при наличии MDA)
|
380-38F
|
380-38F
|
Синхронный адаптер SDLC/BSC #2
|
3AO-3AF
|
ЗАО-ЗА9
|
Синхронный адаптер BSC #1
|
ЗВО-ЗВВ
|
ЗВО-ЗВВ
|
Монохромный адаптер (MDA)
|
ЗВ4-ЗС9
|
|
Видеосистема PS/2
|
3BC-3BF
|
3BC-3BF
|
Параллельный порт LPT1 платы MDA
|
3CO-3CF
|
3CO-3CF
|
EGA#1
|
3CO-3DF
|
3CO-3DF
|
VGA
|
3DO-3DF
|
3DO-3DF
|
CGA/EGA
|
ЗЕО-ЗЕ7
|
|
COM3
|
3E8-3EF
|
|
COM3
|
3FO-3F7
|
3FO-3F7
|
Контроллер НГМД #1
|
3F6-3F7
|
|
Порты команд IDE#1
|
3F8-3FF
|
3F8-3FF
|
СОМ1
|
А.3. Аппаратные прерывания
Аппаратные прерывания обеспечивают реакцию процессора на события, происходящие асинхронно по отношению к ис- полняемому программному коду. Процессоры х86 поддер- живают таблицу, содержащую определения до 256 процедур обслуживания прерываний. Немаскируемые прерывания NMI обрабатываются процессором независимо от состояния флага разрешения прерывания IF. К ним относятся прерывания, приходящие по линии NMI, а для процессоров, поддержива- ющих режим системного управления, еще и по линии SMI#.
Сигнал на линию NMI приходит от схем контроля паритета памяти, от линии 10СНК шины ISA или SERR# шины PCI. В машинах класса AT сигнал NMI блокируется до входа про- цессора установкой бита 7 порта 070h в 1, отдельные источ- ники - битами 2, 3 порта 061h. Идентифицировать источник NMI позволяют биты 6, 7 регистра 061h.
В XT NMI вызывается и математическим сопроцессором при возникновении исключения. Запретить NMI позволяет об- нуление бита 7 порта OAOh; отдельные источники блокиру- ются битами 4, 5 регистра 061h; биты 6, 7 регистра 062h идентифицируют источник.
Обработка маскируемых прерываний может запрещаться ин- струкцией DI и разрешаться - Е1 (или другим способом воз- действия на флаг процессора /F). Эти прерывания обслужи- ваются контроллером, программно-совместимым с 8259А. Он имеет 8 входов запросов прерываний IRQx от внешних ис- точников. При обработке запроса контроллер передает по шине данных 8-битный вектор прерывания, соответствующий номеру запроса. Этот вектор является индексом, по которо- му ссылка на процедуру обработки прерывания хранится в таблице прерываний.
В машинах класса AT используются два контроллера пре- рываний. Ведущий (первичный) контроллер 8259А#1 обслу- живает запросы О, 1, 3-7. К его входу 2 подключен ведомый (вторичный) контроллер 8259А#2, который обслуживает за- просы 8-15. При этом используется вложенность приорите- тов - запросы 8-15 со своим рядом убывающих приорите-
тон вклиниваются между запросами 1 и 3 ведущего контрол- лера, приоритеты запросов которого также убывают с рос- том номера. В XT один контроллер 8259А обслуживал все 8 линий запросов.
На входы контроллеров прерываний поступают запросы от системных устройств и плат расширения. Эти линии обо- значаются как IRQx и имеют общепринятое назначение (табл. А.2). Прерывания в табл. А.2 расположены в порядке убы- вания их приоритетов. Номера векторов, соответствующих линиям запросов контроллеров, система приоритетов и дру- гие параметры могут задаваться программно при инициали- зации контроллеров.
Имя (номер)
|
Вектор
|
Назначение
|
NMI
|
02h
|
Контроль канала, паритет (в XT - сопроцессор)
|
0
|
08h
|
Таймер (канал 0 8253/8254)
|
1
|
09h
|
Клавиатура
|
IRQ2
|
OAh
|
XT - произвольно, AT - каскад IRQ8-IRQ15
|
8
|
70h
|
CMOS RTC - часы реального времени
|
IRQ9
|
71h
|
Произвольно
|
IRQ10
|
72h
|
Произвольно
|
IRQ11
|
73h
|
Произвольно
|
IRQ12
|
74h
|
PS/2-Mouse или произвольно
|
13
|
75h
|
Математический сопроцессор
|
IRQ14
|
76h
|
HDC - контроллер НЖМД
|
IRQ15
|
77h
|
Произвольно
|
IRQ3
|
OBh
|
COM2, COM4
|
IRQ4
|
OCh
|
СОМ1, COM3
|
IRQ5
|
ODh
|
XT - HDC, AT - LPT2, Sound (произвольно)
|
IRQ6
|
OEh
|
FDC - контроллер НГМД
|
IRQ7
|
OFh
|
LPT1 - принтер
|
Назначение номеров прерываний - процесс двухсторонний:
адаптер должен быть сконфигурирован на использование конкретной линии шины (джамперами или программно), а ПО, поддерживающее данный адаптер, должно быть проин- формировано о номере используемого вектора. Поскольку прерывания являются дефицитным ресурсом, возникает же- лание разделить эти линии между несколькими устройства- ми. Тогда обработчик прерывания устройства, определив, что источник - не его, вызывал бы обработчик другого устрой- ства, работающего с той же линией. Однако в шине ISA пре- рывание вырабатывается по положительному перепаду сиг- нала на линии запроса. Такой способ подачи сигнала имеет меньшую помехозащищенность, чем срабатывание по отри- цательному перепаду, и отрезает путь к нормальному разде- ляемому использованию линий, для которого полностью пригоден способ подачи сигнала по низкому уровню. По- скольку традиционный контроллер позволяет задавать чув- ствительность - уровень (Level) или перепад (Edge) - толь- ко для всех входов одновременно, разделяемые прерывания на шине ISA неработоспособны. Тем не менее, некоторые чип- сеты, реализующие контроллеры прерываний, допускают индивидуальное управление чувствительностью каждого вхо- да. Тогда при соответствующих возможностях BIOS Setup и адаптеров разделяемые прерывания технически реализуемы.
При чувствительности к уровню сигнал запроса аппаратно- го прерывания IRQx должен удерживаться генерирующей схемой по крайней мерю до цикла подтверждения прерыва- ния процессором. В противном случае источник прерыва- ния не будет правильно идентифицирован. Обычно адапте- ры строят так, что сигнал запроса сбрасывается при обращении программы обслуживания прерывания к соот- ветствующим регистрам адаптера.
Для запросов прерывания с шины PCI используются 4 ли- нии, которые обозначают как INTR А, В, С, D. Возможно их разделяемое использование. Линии циклически сдвигаются в слотах (рис. А.1) и независимо коммутируются на доступные IRQx с помощью конфигурационных регистров чипсета. Линии IRQx, используемые шиной PCI, недоступны для шины ISA. "Дележку" линий между шинами, а также управление
чувствительностью отдельных линий вьшолняют настройки BIOS Setup, а также система РпР. В опциях настройки ISA или Legacy подразумевают использование линий IRQx тради- ционными адаптерами шины ISA (статическое распределение), a PCI/PnP - адаптерами шины PCI или адаптерами РпР для шины ISA (динамическое распределение).
81.jpg
А.4. Прямой доступ к памяти и прямое управление шиной
Прямой доступ к памяти - DMA (Direct Memory Access) - метод обмена ПУ с памятью без участия процессора. В обыч- ном программном обмене (PIO) при пересылке блока дан- ных, например, из порта в память (инструкция REP INSB), выполняются следующие действия:
^ Процессор генерирует шинный цикл чтения порта, выстав- ляя его адрес и формируя сигнал IORD#. Данные из порта считываются процессором во внутренний шинный буфер.
т Процессор генерирует шинный цикл записи в память, выставляя адрес ячейки и формируя сигнал MEMWR#. Данные из внутреннего шинного буфера записываются в память.
^ Эти шаги автоматически повторяются с изменением ад- реса памяти. Количество повторов задается в регистре СХ,
инкремент/декремент адреса - флагом DF. Во время пе- редачи всего блока процессор занят.
В режиме прямого доступа к памяти процессор инициали- зирует контроллер прямого доступа к памяти - задает на- чальный адрес, счетчик и режим обмена, после чего осво- бождается. Обмен производит контроллер и выполняет его несколько иначе. Контроллер имеет несколько каналов. Для интерфейса ПУ каждый канал представляется парой сигна- лов: запрос обмена - DRQx и подтверждение обмена - DACKx#. В операциях по каналу DMA адрес порта не фигу- рирует, а используется только пара сигналов, соответствую- щая номеру канала. Цикл передачи блока в память будет выглядеть следующим образом (рис. А.2):
1. По сигналу DRQx контроллер запрашивает управление шиной и дожидается его предоставления процессором (и другими контроллерами шины).
2. Контроллер выставляет адрес ячейки памяти и форми- рует в одном цикле шины сигналы IORD#, DACKx# и MEMWR#. Сигнал DACKx# указывает на то, что операция выполняется для канала "х", a IORD# - на направление в канале (для пересьыки из памяти в канал использовался бы сигнал IOWR#). Чтобы по сигналу IORD# не было лож- ного чтения (по IOWR# - ложной записи) порта, адрес которого совпадает с адресом памяти, присутствующим в цикле DMA, контроллер высоким уровнем сигнала AEN запрещает портам дешифрацию адреса. Байт, считанный из канала, в том же цикле шины записывается в ячейку памяти.
3. Контроллер модифицирует счетчик адреса и повторяет шаги 1-2 для каждого следующего сигнала DRQx, пока не будет исчерпан счетчик циклов. В последнем цикле об- мена контроллер формирует общий сигнал окончания ТС (Terminate Count), который может быть использован устройством для формирования сигнала аппаратного пре- рывания.
Обратная пересылка отличается только тем, что использу- ются сигналы IOWR# и MEMRD#.
82.jpg
Рис. А.2. Цикл обмена DMA
Процессор при обмене занят только инициализацией кон- троллера, которая сводится к записи в его регистры несколь- ких байт. Затем обмен производят системная шина и кон- троллер. Если выбранный режим обмена не занимает всей пропускной способности шины, во время операций DMA процессор может продолжать работу.
Прямой доступ к памяти был использован еще в PC/XT, где применялась микросхема четырехканального контролле- ра DMA 18237А. Контроллер имеет 16-разрядные регистры адреса и счетчики, что позволяет программировать переда- чу блоков до 64 Кбайт. Для доступа к пространству разме- ром в 1 Мбайт применили внешние 4-разрядные регистры страниц DMA, отдельные для каждого канала. В них хра- нятся биты адреса А[19:16], а битами А[15:0] управляет кон- троллер. При достижении регистром-счетчиком адреса зна- чения FFFFh следующее его значение будет OOOOh, а внешний регистр адреса страницы останется неизменным. Таким об- разом, если блок начинается не с границы страницы памяти размером в 64 Кбайт, возможно его "сворачивание в кольцо". Но если для процессоров 80х86 в реальном режиме "свора- чиваемые" сегменты могут начинаться с адреса, кратного 10h, то при прямом доступе границы "сворачиваемого" сегмента кратны 1 OOOOh. Этот эффект обязательно необходимо учи-
тывать при программировании прямого доступа - блок, пе- ресекающий границу, должен пересылаться за два сеанса DMA, между которыми канал (включая регистр страниц) должен быть повторно инициализирован.
Из четырех каналов DMA XT на шине ISA доступны толь- ко три (1, 2 и 3). Канал 0 используется для регенерации ди- намической памяти, адрес регенерируемой строки берется с линий адреса ISA. Каналы 1, 2 и 3 обеспечивают побайтную передачу данных и называются 8-битными каналами DMA.
В архитектуре AT подсистему DMA расширили, добавив вто- рой контроллер 8237А. Его подключили к шине адреса со смещением на 1 бит. 16-битные регистры адреса способны управлять линиями адреса А[16:1], младший бит адреса АО всегда нулевой. Таким образом, второй контроллер передает данные только по два байта, поэтому его каналы названы 16-битными. За один сеанс второй контроллер способен пе- редать до 64 К 16-разрядных слов. Регистры страниц для всех каналов DMA у AT расширены до 8 бит, что делает доступной для любого канала область памяти размером 16 Мбайт (0- FFFFFFh). Эффект "сворачивания" сегментов в каналах пря- мого доступа сохраняется, только для каналов 5, 6 и 7 "коль- ца" имеют размер 64 К слов и границы, кратные 20000h. Микросхемы контроллеров 8237А включены каскадно, и ка- нал 4 недоступен - через него подключается первый контрол- лер. Стандартное назначение каналов приведено в табл. А.3.
Кроме увеличения числа каналов в AT ввели управление тиной ISA - Bus-Mastering - со стороны адаптера. Оно опи- рается на контроллер DMA, выполняющий в данном случае функции арбитра шины. Для получения управления шиной адаптер посылает запрос по линии DRQx (только для кана- лов 5-7) и, получив подтверждение DACKx, устанавливает сигнал MASTERS. Теперь шиной ISA управляет он, но не имеет права занимать шину более чем на 15 мкс за сеанс. В противном случае нарушится регенерация памяти. Интел- лектуальный контроллер может выполнять более эффектив- ные процедуры обмена, чем стандартный DMA.
Управление шиной используют высокопроизводительные адаптеры SCSI и локальных сетей, а также интеллектуаль-
ные графические адаптеры. Однако архитектурой шины до- ступное им пространство ограничено 16 Мбайт.
Ограничения на доступную память для "чистого" режима DMA в новых компьютерах снимаются применением расши- ренных регистров страниц, но об этом должно "знать" ПО.
На шине EISA каналы DMA могут работать в 8-, 16- и 32-битном режиме и, используя все 32 разряда шины ад- реса, иметь доступ ко всей памяти компьютера. Каждый ка- нал программируется на 1 из 4 типов цикла передачи:
^ Compatible - полностью совместим с ISA.
sii Type A - сокращенный на 25% цикл: время одиночного цикла 875 нс, в блочном режиме время цикла 750 нс. Ра- ботает почти со всеми ISA-адаптерами с большей скоро- стью.
^ Type В - сокращенный на 50% цикл (750/500 нс на цикл), работает с большинством EISA-адаптеров и некоторыми ISA. Возможен только с памятью, непосредственно до- ступной контроллеру шины EISA (то есть с памятью на адаптерах EISA и системной, если EISA является основ- ной шиной). Если декодированный адрес памяти отно- сится к 8/16-битной памяти ISA, то контроллер DMA EISA автоматически переводится в режим Compatible.
т Type С (Burst Timing) - сокращенный на 87,5% цикл, ориентированный на пакетный режим передачи. Работа- ет с быстрыми EISA-адаптерами. При обмене 32-битных устройств с 32-битной памятью позволяет развить ско- рость обмена до 33 Мбайт/с.
^ В PCI-системах для обмена с устройствами системной пла- ты (Fast ATA-2 или E-IDE-порты) возможно использова- ние DMA Type F, при котором между соседними циклами интервал не должен превышать 3 тактов шины (360 нс). Для разгрузки системной шины используется 4-байтный буфер. Режим F может работать только в режиме одиноч- ной передачи или по запросу и исключительно с инкре- ментом адреса. На самой шине PCI адаптеры могут ис- пользовать режим прямого управления шиной, для чего имеется специальный протокол арбитража.
Номер канала DMAft
|
о
|
1
|
2
|
3
|
4
|
5
|
Q
|
7
|
Стандартное назначение
|
XT
|
MRFR*
|
-
|
FDD
|
HDD
|
Отсутствуют
|
AT
|
-
|
SDLC*
|
FDD
|
HDD*
|
Каскад
|
-
|
-
|
-
|
Разрядность, байт
|
1
|
2 с четного адреса
|
Максимальный размер блока
|
64 Кбайта
|
128 Кбайт, четный
|
Граница блока
|
Кратна lOOOh
|
Кратна 2000h
|
Регистр страниц
|
4 бит А16-А19
|
7 бит А17-А23
|
Адреса регистров: страниц
начального адреса (W) текущего адреса (R)
начального счетчика (W) текущего счетчика (R)
|
|
|
|
|
|
|
|
|
087
|
083
|
081
|
082
|
08F
|
08В
|
089
|
087
|
000
|
002
|
004
|
006
|
ОСО
|
ОСА
|
ОС8
|
осе
|
001
|
003
|
005
|
007
|
ОС2
|
ОС6
|
ОСА
|
ОСЕ
|
* SDLC-адаптер устанавливается редко. HDD-контроллер в AT DMA обычно не использует. Канал 0 в XT используется для регенерации памяти (MRFR). Канал 4 доступен только в PS/2 МСА.
А.5. Обмен данными
Открытая архитектура PC предрасполагает использование различных адаптеров расширения. Чаще всего ПО общается с адаптерами через порты ввода/вывода, используя преры- вания, прямой доступ к памяти и непосредственное управ- ление шиной. Связь через область памяти, к которой при- писан адаптер, для "нештатных" адаптеров применяется редко. Выбор способа связи определяется пропускной спо- собностью, временем отклика на события, происходящие в адаптере, и допустимой загрузкой процессора.
Программно-управляемый обмен подразумевает следующие действия:
^ операцию чтения регистра состояния устройства для ана- лиза его готовности;
^ ожидание готовности (зацикливание предыдущего шага);
^ обмен байтом или словом данных.
Такой обмен сильно загружает процессор, особенно если про- грамма формирует управляющие сигналы обмена. Так, напри- мер, работает драйвер параллельного порта в стандартном ре- жиме, когда строб данных формируется двумя инструкциями OUT. В результате пропускная способность такого порта в за- висимости от процессора может быть порядка 150 Кбайт/с. Если разгрузить процессор от анализа готовности и форми- рования строба, как, например, в ЕРР-режиме параллельного порта, то производительность порта можно повысить на по- рядок. Такой режим обмена программно-управляемым назы- вать некорректно - это режим программного ввода/вывода с аппаратным контролем потока, где темп обмена определяет подключенное устройство. Высокоскоростные режимы PIO применяются в интерфейсе IDE. Они используют инструк- ции блочной пересылки REP INS/OUTS, при которых процес- сор пересылает данные между портом и областью памяти за минимальное количество тактов системной шины. Посколь- ку такую скорость ПУ обычно не воспринимают, контроллер интерфейса "притормаживает" обмен до разумных скоростей, определяемых режимом обмена. Параметры этих режимов, называемых PIO Mode, приведены в табл. 6.10.
Обмен по прямому доступу к памяти (как и режим прямого управления шиной) в наименьшей степени загружает процес- сор - он занимается лишь анализом состояния и инициали- зацией канала DMA, но не передачей данных. Время откли- ка на запрос, когда контроллер "заряжен" на обмен, не превышает сотен наносекунд. Однако скорость стандартно- го канала DMA ограничена значением 2/4 Мбайт/с в зави- симости от разрядности канала. Производительность в ре- жимах прямого управления шиной обычно выше, чем у стандартных каналов DMA. Прогрессивные режимы DMA обеспечивают более высокие скорости обмена: Ultra DMA - до 33 Мбайт/с.
Обсудим теперь инициализацию и синхронизацию. Инициа- тором обмена выступает или ПО, или ПУ. Программа ожи- дает какого-либо события в ПУ, периодически читая его ре- гистр состояния. Такой способ называется обменом по опросу готовности. Время реакции может составлять доли мик- росекунды, когда программа опрашивает устройство моно- польно. Однако при этом процессор загружен бесполезной работой. Другой подход - использование аппаратных пре- рываний, вырабатываемых устройством по событиям, тре- бующим внимания программы. Программные обработчики аппаратных прерываний инициализируют блочный обмен или выполняют одиночную операцию пересылки. Время ре- акции зависит от множества факторов, включая режим ра- боты процессора. В защищенном режиме прерывание при- водит к автоматическому сохранению контекста задачи в стеке и переключению задач. Эти действия связаны с ин- тенсивным обменом с памятью, так что отклик может до- стигать десятков микросекунд или гораздо больше, если за- действована виртуальная память. В реальном режиме процессора ответ на прерывание приходит за единицы мик- росекунд.
Возможно комплексное решение - опрос готовности уст- ройств по периодическим прерываниям, например, от сис- темного таймера - polling. Готовое устройство обслуживает- ся, неготовое - пропускается до следующего прерывания. Процессор не выполняет бесполезных циклов опроса, а за- нимается другими задачами. Правда, расходы на обслужи-
вание прерываний остаются, а максимальное время реакции на событие не может быть меньшим, чем период таймера. Так работает утилита фоновой печати PRINT.
Активное использование прерываний характерно для мно- гозадачных ОС.
А.6. Распределение системных ресурсов
Спецификация ISA требует, чтобы всем картам назначались свои системные ресурсы - области адресов в пространствах памяти и ввода/вывода, линии запросов прерываний и ка- налы прямого доступа к памяти. Платы не должны кон- фликтовать по ресурсам. Задача конфигурирования ослож- няется из-за отсутствия общего механизма автоматической передачи установленных параметров прикладному и систем- ному ПО. Конфигурирование адаптеров выполняется пере- ключением джамперов, затем установленные параметры за- носятся в конфигурационные файлы.
Применение энергонезависимой памяти (NVRAM или ее разновидности - EEPROM), хранящей настройки, облегча- ет конфигурирование. С соответствующими адаптерами по- ставляется утилита настройки. Отсюда их названия: Software Configured (программно конфигурируемые) или Jumperless (без джамперов). Утилита может проверить выбираемые установки на отсутствие конфликта, однако достоверность обнаружения конфликта относительна. Некоторые программ- но конфигурируемые адаптеры все же имеют джамперы, что бывает полезно для установки типовой настройки, устраня- ющей конфликты (например, наложение областей памяти се- тевого адаптера и видеопамяти). Преимуществом NVRAM является также отсутствие необходимости в конфигураци- онных файлах.
Ключевым моментом в автоконфигурировании является изо- ляция карты от остальных. Тогда ПО конфигурирования сможет вести с картой диалог, на который не влияет при- сутствие других устройств. Изоляция карт при конфигури- ровании заложена в шины МСА, PCI и EISA. В EISA для каждого слота возможно программное селективное управле-
ние сигналом AEN, запрещающим дешифрацию адресов пор- тов ввода/вывода. В системе с шиной EISA имеется энерго- независимая память конфигурирования слотов. Необходи- мо также обеспечить единый метод двухстороннего обмена конфигурационной информацией между картой и ПО.
В шину PCI автоматическое конфигурирование установлен- ных адаптеров заложено изначально. Здесь конфигурирова- нию также подлежат мосты шины (PCI Bridge) - аппарат- ные средства подключения PCI к другим шинам. Host Bridge - главный мост - используется для подключения к системной шине. Peer-to-Peer Bridge - одноранговый мост - используется для соединения двух шин PCI (дополнитель- ные шины PCI позволяют увеличить количество подключа- емых устройств). При конфигурировании мостов указыва- ется распределение системных ресурсов по шинам, которые они связывают. Таким образом, задаются пути транслирова- ния управляющих сигналов по шинам и управление буфе- рами данных, обеспечивая для каждого адреса памяти или ввода/вывода единственную шину назначения, по крайней мере для операций чтения (операции записи могут быть широковещательными). Подобная "маршрутизация" необ- ходима и для сигналов запросов прерываний (каналы DMA к шине PCI отношения не имеют).
Среди устройств РпР (для шин ISA и PCI) выделяется класс динамически конфигурируемых устройств DCD (Dynamically Configurable Device). Ресурсы, используемые ими, динами- чески переназначаются, не требуя перезагрузки ОС. Если устройство DCD находится в заблокированном состоянии (Locked DCD), его ресурсы не могут быть изменены.
Полная поддержка РпР предусматривает наличие РпР BIOS, плат расширения РпР и/или модулей на системной плате. Для хранения информации о системных ресурсах необходи- мо было стандартизовать способы представления конфигу- рации. В декабре 1994 года компании Compaq, Intel и Phoenix опубликовали версию 1.03 документа "Extended System Configuration Data Specification" ("Спецификация расширен- ных данных о системной конфигурации"), определяющего методы взаимодействия и структуры данных памяти для
конфигурации устройств ESCD. Данные ESCD хранятся в энергонезависимом хранилище информации NVS (Non- volatile Storage). Это может быть память NVRAM или файл данных для ISA-систем, не имеющих поддержки РпР. NVRAM может отображаться на область (верхней) памяти, как полностью, так и постранично. Способ доступа к ESCD определяется вызовом специальной функции РпР BIOS.
ESCD разрабатывалась на основе форматов описания уст- ройств шины EISA, в которой имеется специальная энерго- независимая память и утилиты конфигурирования ECU (EISA Configuration Utility). Все устройства описываются через слоты - специальные структуры данных. В стандарте EISA слот 0 используется для описаний устройств ISA, раз- мещенных на системной плате. Слоты 1-15 соответствуют физическим слотам расширения шины EISA, слоты 16-64 определены для виртуальных (не связанных с конкретным физическим слотом шины) устройств. В ESCD сохранено примерно то же назначение слотов. Так устройства шины PCI (включая мосты) описываются слотами 16-64.
С данными ESCD взаимодействует РпР BIOS, а также ОС, поддерживающая РпР. ACFG BIOS (Auto-Configuration BIOS) имеет поддержку РпР, в частности автоконфигурирование. Конфигурированием устройств DCD, которые не были скон- фигурированы ACFG BIOS во время POST, занимается ме- неджер конфигурирования, являющийся частью системного ПО. Каждая РпР-плата сообщает менеджеру конфигуриро- вания о потребностях и возможных диапазонах настройки ресурсов. Для обычных (Legacy) плат ISA информация в ESCD заносится с помощью диалоговой утилиты конфигу- рирования ICU (ISA Configuration Utility). Таким образом, конфигурирование плат РпР выполняется автоматически, а обычных карт - джамперами или утилитами.
А.7. Спецификация РпР для шины ISA
Для изоляции карт ISA, программного распределения сис- темных ресурсов, конфигурирования и передачи параметров ОС и прикладному ПО компаниями Intel и Microsoft была выработана спецификация "Plug and Play ISA Specification";
версия l.Oa была опубликована в мае 1994 года. Рассмотрим реализацию РпР с точки зрения аппаратных средств.
Конфигурирование в системе РпР состоит из следующих шагов:
^ Производится изоляция одной карты от всех остальных. ^ Карте назначается CSN (Card Select Number).
^ С карты считываются данные о сконфигурированных и поддерживаемых ресурсах.
Эти шаги повторяются для всех карт, после чего:
^ производится распределение системных ресурсов, выде- ляемых каждой карте;
^ каждая карта конфигурируется согласно выбранному рас- пределению ресурсов и переводится в рабочий режим.
Все шага конфигурирования выполняет POST, если BIOS име- ет поддержку РпР, или ОС при загрузке. РпР BIOS может ограничиться конфигурированием и активацией устройств, участвующих в загрузке. BIOS без поддержки РпР может ис- пользовать необходимые для загрузки устройства, сконфигу- рированные с параметрами по умолчанию, а всем остальным занимается ОС. Конфигурирование выполняется в специаль- ном состоянии плат, в которое их можно программно переве- сти специальным ключом инициализации, защищающим кон- фигурационную информацию от случайного разрушения.
Для конфигурирования карт РпР необходимы три 8-битных системных порта (табл. А.4), с которыми процессор обща- ется по инструкциям ввода/вывода с однобайтной передачей данных. Карты РпР должны использовать 12-битное декоди- рование адреса ввода/вывода, а не 10-битное, как в тради- ционных картах ISA.
Порт ADDRESS используется для адресации регистров РпР, запись в него производится перед обращением к портам WRITE_DATA и READ_DATA. Он же применяется для записи последовательности кодов ключа инициализации. Выбор ад- реса для него обусловлен тем, что "разумные" карты рас- ширения не будут использовать для записи адрес регистра состояния стандартного LPT-порта.
Порты WRITEJDATA и READ_DATA используются для обмена данными с регистрами РпР. Адрес порта WRITEJDATA тради- ционными картами с 10-битным декодированием будет вос- приниматься как адрес предыдущего порта, так что конф- ликт исключен. Перемещаемому адресу порта READJDATA ПО РпР во время протокола изоляции может легко найти бес- конфликтное положение. Адрес этого порта сообщается всем картам записью в их управляющий регистр РпР.
Имя порта
|
Адрес
|
Тип доступа
|
ADDRESS
|
0279h (Printer status port)
|
Только запись
|
WFIITEDATA
|
OA79h (Printer status port + 0800h)
|
Только запись
|
READDATA
|
Перемещаемый в диапазоне 0203h- 03FFh
|
Только чтение
|
В конфигурационный режим логика РпР переводится клю- чом инициализации {Initiation key). Ключ представляет со- бой предопределенную последовательность записей в порт ADDRESS. Аппаратная логика карты, проверяющая ключ, основана на сдвиговом регистре с обратными связями LFSR (Linear Feedback Shift Register), схема которого приведена на рис. А.3. Во время проверки ключа на вход С1 подается уро- вень логического 0, а на вход С2 - стробы записи в порт ADDRESS. Логика, не показанная на рис. А.3, сравнивает код в сдвиговом регистре с текущей записью и при несовпаде- нии сбрасывает LFSR в исходное состояние (код 6Ah). В это же состояние регистр переводится двумя последовательны- ми записями нулей в порт ADDRESS. Сдвиг в регистре про- исходит при каждой записи в порт ADDRESS. Если ключ (последовательность из 32 записей требуемых байт) будет приложен верно, после последней записи логика карты пе- рейдет в режим конфигурирования и подготовится к отра- ботке протокола изоляции. Точная последовательность байт ключа в hex-формате выглядит следующим образом:
6А. В5. DA, ED. F6. FB. 7D. BE. DF. 6F. 37. IB. OD. 86, СЗ. 61. ВО. 58. 2С, 16. 8В. 45. А2. Dl. E8. 74, ЗА. 9D. СЕ. Е7. 73. 39.
83.jpg
Рис. А.3. Сдвиговый регистр LFSR карты РпР
Протокол изоляции основан на идентификаторе Serial Identifier, хранящемся в памяти каждой карты РпР. Этот идентификатор представляет собой ненулевое 72-битное чис- ло, состоящее из двух 32-битных полей и 8-битного конт- рольного кода, вычисляемого с помощью регистра LFSR. Первое 32-битное поле представляет собой идентификатор производителя. Второе поле назначается производителем каждому экземпляру. Здесь может присутствовать серийный номер; для адаптера Ethernet это может быть частью МАС- адреса. Принцип построения идентификатора гарантирует, что в одной системе не могут встретиться две карты с сов- падающими идентификаторами. Доступ к идентификатору осуществляется последовательно, начиная с бита 0 нулевого байта идентификатора производителя и заканчивая битом 7 контрольной суммы. Во время передачи идентификатора на вход С1 схемы LFSR поступают текущие биты идентифика- тора, а на вход С2 - стробы чтения регистра SerialJsolation. В тактах передачи контрольной суммы ее биты берутся с выхода сдвигового регистра.
Протокол изоляции программно инициируется в любой мо- мент времени посылкой ключа инициализации, переводящего все карты в конфигурационный режим. В этом режиме каж- дая карта ожидает 72 пары операций чтения порта READ_DATA. Ответ каждой карты на эти операции опреде- ляется значением очередного бита ее идентификатора.
Если текущий бит идентификатора карты имеет единичное значение, ее буфер шины данных в первом чтении пары вы- водит на шину значение 55h. Если текущий бит нулевой, то
буфер работает на чтение шины и логика карты анализиру- ет ответ других карт - проверяет наличие комбинации 01 в битах D[1:0] (младшие биты 55h). В следующем цикле чте- ния пары карта с единичным битом выводит число AAh, a карта с нулевым текущим битом проверяет наличие комби- нации 10 в битах D[1:0] (младшие биты AAh). Если карта, просматривающая вывод данных другими картами, обнару- жила корректные коды в обоих циклах чтения пары, она в данной итерации изоляции исключается. Если карта в теку- щей паре управляла шиной или читала шину, но не обнару- жила корректных активных ответов других карт, она сдви- гает идентификатор на один бит и готовится к приему следующей пары циклов чтения. Эта последовательность выполняется для всех 72 бит идентификатора. В конце про- цесса останется лишь одна карта. Записью в управляющий регистр ей назначается номер CSN, по которому она будет использоваться в дальнейших операциях. Карта с назначен- ным CSN в следующих итерациях протокола изоляции не участвует (на пары чтений не отвечает).
Во время протокола изоляции карты не имеют права удли- нять шинные циклы с помощью сигнала IOCHRDY, посколь- ку это привело бы к неопределенности результатов наблю- дения за "соседями".
Программа конфигурирования проверяет данные, возвращае- мые во время пар циклов чтения, и побитно собирает про- читанный идентификатор. Если в паре приняты байты 55h и AAh, соответствующий бит считается единичным, в дру- гих случаях - нулевым. При приеме идентификатора про- грамма подсчитывает контрольную сумму и сравнивает ее с принятой. Несовпадение или отсутствие среди принятых байт 55h и AAh указывает на то, что выбранный адрес пор- та READ_DATA конфликтует с каким-либо устройством. Тог- да программа производит итерацию, переместив адрес пор- та READ_DATA в допустимом диапазоне адресов. Если при переборе адресов не удается считать корректного идентифи- катора, принимается решение об отсутствии карт РпР в си- стеме (вообще или с неназначенными CSN).
Программа должна обеспечить задержку 1 мс после подачи ключа перед первой парой чтений и 250 мкс между парами
чтений. Это дает карте время для доступа к информации, которая может храниться в медленных устройствах энерго- независимой памяти.
По завершении протокола изоляции ПО имеет список иден- тификаторов обнаруженных карт и присвоенных им номеров, сообщенных картам. Далее общение ПО с картой идет по ее номеру CSN, фигурирующему в командах РпР. Нулевой CSN присваивается картам по программному или аппаратному сбросу и используется как широковещательный адрес.
Обращения к регистрам РпР представляют собой операции записи/чтения портов ввода/вывода по адресам WRITE_DATA/ READ_DATA соответственно. При этом для указания конк- ретного регистра РпР используется индекс - номер регист- ра, предварительно записанный в регистр ADDRESS.
Каждая карта имеет стандартный набор регистров РпР; часть из них относится к карте в целом, а часть - к логическим устройствам (ЛУ), входящим в карту. В любой момент вре- мени в индексном пространстве регистров РпР отобража- ются общие регистры карты и регистры только одного ЛУ (рис. А.4). Выбор ЛУ, с которым производится общение, осу- ществляется записью в регистр Logical Device Number.
84.jpg
Рис. А.4. Конфигурационные регистры РпР (* - определяется разработчиком)
С точки зрения системы РпР карта пребывает в некотором состоянии. Состояние Isolate используется в протоколе изо- ляции, описанном выше.
Программирование карты начинается с команды WAKE[CSN] - записи байта CSN в регистр с индексом 3. Эта операция переводит карту с указанным CSN в состояние Config (конфигурирование), а остальные карты переходят в состояние Sleep. Для карты выполняются операции чтения ее конфигурационной информации (как карты в целом, так и Л У) и программирования используемых ресурсов. Про- граммирование каждого ЛУ завершается установкой его бита активации, после чего оно активизируется на шине ISA. Про- граммирование всей карты завершается переводом ее в со- стояние Wait/or key (ожидание ключа). По окончании кон- фигурирования все карты РпР должны быть переведены в это состояние - тогда их случайное реконфигурирование будет блокировано 32-байтным ключом.
Доступ к регистрам РпР через ключ возможен в любое вре- мя. Возможно переназначение CSN "на ходу" - это требует- ся в устройствах, допускающих динамическое включение/ выключение, док-станциях (Docking Stations) и при управ- лении энергопотреблением.
Все ЛУ карт РпР должны обеспечивать следующую мини- мальную функциональность:
^ Регистры ресурсов при чтении должны отражать факти- ческие текущие настройки.
^ Бит активации при чтении должен отражать правдивое состояние активности устройства на шине ISA.
ш Если программа пытается "навязать" карте неподдержи- ваемую конфигурацию, устройство не должно активиро- ваться; соответственно, при чтении его флаг активации должен быть сброшен.
Стандартные регистры управления картой (табл. А.5) исполь- зуются для адресации карты и ее ЛУ, а также для чтения кон- фигурационной информации (дескрипторов). Дескрипторы ресурсов могут быть считаны побайтно из регистра Resource Data. При этом могут использоваться данные в короткой или
длинной форме. Короткая форма (Small Resource Data Type) допускает дескрипторы до 7 байт, длинная форма (Large Resource Data Type) - до 64 Кбайт. Форма дескриптора и имя описываемого ресурса определяются первым байтом дескрип- тора. Его последующие байты описывают требуемые ресурсы и возможные варианты (диапазоны) конфигурирования.
Регистр
|
Индекс и тип
|
Назначение
|
SetRD DATA Port
|
OOh.WO
|
Установка адреса порта для чтения. Биты [7:0] задают значение бит [9:2] адреса порта READJDATA. Только для записи
|
Serial Isolation
|
01 h, RO
|
Чтение этого регистра в состоянии Isolation приводит к побитному ана- лизу идентификатора
|
Config Control
|
02h,WO
|
Бит [2]- сброс CSN в 0 Бит [1] - возврат в состояние Wait forKey Бит [0] - сброс всех ЛУ и перевод конфигурационных регистров в со- стояние включения питания, но CSN сохраняется. Эти биты не запоминаются, так что необходимости в их программном сбросе нет
|
Wake[CSNJ
|
03h,WO
|
Запись в этот регистр приведет карту с записываемым байтом CSN к переходу из состояния Sleep в со- стояние Config (если данные не ну- левые). Запись нулевого байта переводит все карты в состояние Isolation. Указатель последовательно считываемых байт сбрасывается
|
Resource Data
|
04h,RO
|
Чтение этого регистра возвращает очередной байт информации о ре- сурсах. Перед чтением должен опра- шиваться регистр Status
|
Status
|
05h, RO
|
Регистр состояния. Единичное значение бита [0] указывает на воз- можность чтения очередного байта ресурсов
|
Регистр
|
Индекс и тип
|
Назначение
|
Card Select Number
|
06h,RW
|
Регистр хранения селективного адре- са CSN, обеспечивающего выбор кон- кретной карты командой Wake[CSN]
|
Logical Device Number
|
07h, RW
|
Выбор текущего ЛУ, к которому отно- сятся вое операции обмена конфигу- рационной информацией, проверки диапазона адресов ввода/вывода и ак- тивации. Если карта имеет одно устройство, регистр допускает только чтение и всегда имеет нулевое значение
|
Card Level Reserved
|
08h-lFh
|
Зарезервированы
|
Card Level, Vendor Defined
|
20h-2Fh
|
Используются по усмотрению произ- водителя
|
Регистр
|
Индекс и тип
|
Назначение
|
Activate
|
30h,RW
|
Регистр активации: Бит [0] единичным значением раз- решает активность ЛУ на шине ISA. Биты [7:1] зарезервированы, при чтении должны возвращать нули. Перед активацией проверка диапа- зона адресов ввода/вывода должна быть запрещена
|
I/O Range Check
|
31 h, RW
|
Регистр проверки диапазона адресов ввода/вывода: Биты [7:2] зарезервированы, при чте- нии должны возвращать нули Бит [1] - разрешение проверки Бит [0] - управление диагностичес- ким ответом: О-ответААп, 1 - ответ 55h
|
Logical Device Control Reserved
|
32h-37h
|
Зарезервированы
|
Logical Device Control Vendor Defined
|
38h-3Fh
|
Используются по усмотрению произ- водителя
|
Стандартные регистры управления ЛУ (табл. А.6) исполь- зуются для активации карт и проверки отсутствия конф- ликтов на шине ISA в выбранном диапазоне адресов ввода/ вывода. Когда включен режим проверки конфликтов, на чте- ние по любому адресу установленного диапазона портов вво- да/вывода ЛУ отвечает байтом 55h или AAh в зависимости от состояния бита 0 регистра проверки диапазона адресов. В рабочем режиме этот "автоответчик" отключен.
Оперативные данные конфигурирования доступны через регистры ЛУ. Каждое логическое устройство имеет собствен- ные дескрипторы используемых системных ресурсов:
^ Обычные 24-битные (4) и 32-битные (4) дескрипторы памяти. Поля базового адреса и длины неиспользуемого дескриптора памяти должны быть нулевыми. Одна кар- та не может одновременно использовать 24-битные и 32-битные дескрипторы памяти.
^ Дескрипторы областей портов ввода/вывода (8). Поле базового адреса неиспользуемого дескриптора портов вво- да/вывода должно быть нулевым. Размер области адре- сов определяется в блоке данных описателя.
^ Дескрипторы запросов прерываний (2). Неиспользуемый селектор запроса прерывания должен быть нулевым (ну- левой номер запроса занят системным таймером). Для линии IRQ2/9 шины ISA применяют номер 2.
^ Дескрипторы каналов прямого доступа к памяти. Неис- пользуемый дескриптор канала должен иметь значение 4 (этот канал недоступен - используется для каскадирова- ния контроллеров).
Назначение регистров дескрипторов и их положение в ин- дексном пространстве РпР описано в табл. А.7.
Индекс и тип
|
Назначение
|
40h-5Fh - Обычные дескрипторы памяти
|
40h, RW
|
Дескриптор памяти ft базовый адрес памяти, биты [23:16]
|
Индекс и тип
|
Назначение
|
41h, RW
|
Дескриптор памяти 0: базовый адрес памяти, биты [15:8]
|
42h, RW
|
Дескриптор памяти О: управление. Бит [1] - режим обращения: 0-8 бит, 1 -16 бит. Бит [0] (RO) - способ задания диапазона: 0 - следующее поле воспринимается как размер области, 1 - как старший адрес
|
43h, RW
|
Дескриптор памяти 0: размер или старший адрес области, биты [23:16]
|
44h, RW
|
Дескриптор памяти 0: размер или старший адрес области, биты [15:8]
|
45h-47h
|
Заполнитель (зарезервировано)
|
48h-4Ch
|
Дескриптор памяти 1 (аналогично предыдущему)
|
4Dh-4Fh
|
Заполнитель (зарезервировано)
|
50h-54h
|
Дескриптор памяти 2 (аналогично предыдущему)
|
55h-57h
|
Заполнитель (зарезервировано)
|
58h-5Ch
|
Дескриптор памяти 3 (аналогично предыдущему)
|
5Dh-5Fh
|
Заполнитель (зарезервировано)
|
60h-6Fh -Дескрипторы пространства ввода/вывода
|
60h, RW
|
Дескриптор портов 0: базовый адрес, биты [15:8]. Если ЛУ использует только 10-битное декодирование адреса, биты [15:10] могут игнорироваться
|
61 h, RW
|
Дескриптор портов 0: базовый адрес, биты [7:0]
|
62h-63h, RW
|
Дескриптор портов 1 - аналогично
|
64h-65h, RW
|
Дескриптор портов 2 - аналогично
|
66h-67h, RW
|
Дескриптор портов 3 - аналогично
|
68h-69h, RW
|
Дескриптор портов 4 - аналогично
|
6Ah-6Bh, RW
|
Дескриптор портов 5 - аналогично
|
6Ch-6Dh, RW
|
Дескриптор портов 6 - аналогично
|
6Eh-6Fh, RW
|
Дескриптор портов 7 - аналогично
|
Индекс и тип
|
Назначение
|
70h-73h - Дескрипторы запросов прерываний
|
70h, RW
|
Селектор запроса прерывания 0: Биты [3:0] задают номер линии IRQ
|
71 h, RW
|
Тип сигнала запроса прерывания 0-. Бит[1] -активный уровень: 1 - высокий, 0 - низкий Бит[0] - тип: 1 - уровень, 0 - перепад Если карта поддерживает только один тип сигнала, регистр может быть типа RO
|
72h,RW
|
Селектор запроса прерывания 1
|
73h, RW
|
Тип сигнала запроса прерывания 1
|
74h-75h - Дескрипторы каналов прямого доступа
|
74h, RW
|
Селектор 0 канала DMA. Биты [2:0] задают номер используемого канала (001 -DMAO,... Ill -DMA7)
|
75h, RW
|
Селектор 1 канала DMA
|
76h-A8h - 32-битные дескрипторы памяти
|
76h, RW
|
32-битный дескриптор памяти 0: базовый адрес памяти, биты [31:24]
|
77h, RW
|
32-битный дескриптор памяти 0: базовый адрес памяти, биты [23:16]
|
78h, RW
|
32-битный дескриптор памяти 0'. базовый адрес памяти, биты [15:8]
|
79h, RW
|
32-битный дескриптор памяти 0: базовый адрес памяти, биты [7:0]
|
7Ah,RW
|
32-битный дескриптор памяти 0: управление Биты [7:3] - зарезервированы, при чтении должны возвращать нули Биты [2:1] - управление доступом: 00 - 8-битная память, 01 - 16-битная память, 10 - зарезервировано, 11 - 32-битная память Бит [0] (RO) - способ задания диапазона: 0 - следующее поле воспринимается как размер области, 1 - следующее поле воспринимается как старший адрес
|
Индекс и тип
|
Назначение
|
7Bh, RW
|
32-битный дескриптор памяти (h размер или старший адрес области, биты [31:24]
|
7Ch, RW
|
32-битный дескриптор памяти 0: размер или старший адрес области, биты [23:16]
|
7Dh, RW
|
32-битный дескриптор памяти 0-. размер или старший адрес области, биты [15:8]
|
7Eh, RW
|
32-битный дескриптор памяти 0'. размер или старший адрес области, биты [7:0]
|
7Fh
|
Заполнитель (зарезервировано)
|
80h-88h
|
32-битный дескриптор памяти 1
|
89h-8Fh
|
Заполнитель (зарезервировано)
|
90h-98h
|
32-битный дескриптор памяти 2
|
99h-9Fh
|
Заполнитель (зарезервировано)
|
AOh-A8h
|
32-битный дескриптор памяти 3
|
|