Сделай Сам Свою Работу на 5

Разрядность Разрядность Частота, данных адреса МГЦ







ISA-8
ISA-16 7 +
LPC 6,7 7 + 8/16/32
EISA 33,3 7 + + 32 8,33
MCA-16 + + 16
МСА-32 + + 32
VLB   32/64 33-50(66)
PCI 132/264 + + 32/64 33/66
PCI-X 532/1064 + + 32/64 32/64 33/66
AGP 266/532/1064 + + 32 32/64
1x/2x/4x          
PCMCIA 10/20 + + 8/16
Card Bus + + 32

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

2 Поддержка автоматического конфигурирования. Для ISA PnP является позднейшей надстройкой,
реализуемой адаптерами и ПО.

Шины ISA, EISA и PC/104

ISA Bus (Industry Standard Architecture) — шина расширения, применявшаяся с первых моделей PC и ставшая промышленным стандартом, В компьютере XT использовалась шина с разрядностью данных 8 бит и адреса — 20 бит. В ком­пьютерах AT ее расширили до 16 бит данных и 24 бит адреса. Конструктивно, как показано на рис. 6.1, шина выполнена в виде двух щелевых разъемов с шагом вы­водов 2,54 мм (0,1 дюйма). В подмножестве ISA-8 используется только 62-контакт­ный слот (ряды А, В), в ISА-16 применяется дополнительный 36-контактный слот (ряды С, D). Шина РС/104, разработанная для встраиваемых контроллеров на базе PC, отличается от обычной ISA только конструктивно. В шине EISA — доро­гом 32-разрядном расширении ISA — используется «двухэтажный» слот, позво­ляющий устанавливать и обычные карты ISA.



Для шины ISA выпущено (и продолжает выпускаться) огромное количество разно­образных карт расширения. Ряд фирм выпускает карты-прототипы (Prototype Card), представляющие собой печатные платы полного или уменьшенного формата с кре­пежной скобой. На платах установлены обязательные интерфейсные цепи — буфер данных, дешифратор адреса и некоторые другие. Остальная часть платы свободна, и здесь разработчик может разместить макетный вариант своего устройства. Эти платы удобны для проверки нового изделия, а также для монтажа единичных экзем­пляров устройства, когда разработка и изготовление печатной платы нерентабельно.


6.1. Шины ISA, EISA и PC/104 147

Рис. 6.1. Слот ISA

В каждый момент времени шиной может управлять только одно устройство-задати-чик, обращающееся к ресурсам (портам или ячейкам памяти) устройств-исполните­лей. Шина ISA обеспечивает возможность обращения к 8- или 16-битным регист­рам устройств, отображенным на пространства ввода-вывода и памяти. Диапазон адресов памяти для устройств ограничен областью верхней памяти UM А (АОООО-FFFFFh). Для шины ISA-16 настройками CMOS Setup может быть разрешено пространство между 15-м и 16-м мегабайтом памяти (при этом компьютер не сможет использовать более 15 Мбайт ОЗУ). Для шины ISA диапазон адресов ввода-вывода сверху ограничен количеством задействованных для дешифрации бит адреса, ниж­няя областью адресов О-FFh недоступна (зарезервирована под устройства системной платы). В PC была принята 10-битная адресация ввода-вывода, при которой линии адреса А[15:10] устройствами игнорировались. Таким образом, диапазон адресов устройств шины ISА ограничивается областью lOOh—3FFh. Впоследствии стали при­менять 12-битную адресацию (диапазон lOOh-FFFh). При этом приходится учи­тывать возможность присутствия на шине старых 10-битных адаптеров, которые «отзовутся» на адрес с подходящими ему битами А[9:0] во всей допустимой области 12-битного адреса четыре раза (у каждого 10-битного адреса будет еще по три 12-битных псевдонима). Полный 16-битный адрес используется только в шинах EISA и PCI.



Шина ISA-8 может предоставить до 6 линий запросов прерываний, ISА-16 — 11. Часть из них могут «отобрать» устройства системной платы или шина PCI.

Шина ISA-8 позволяет использовать до трех 8-битных каналов DMA. На 16-бит­ной шине доступны еще три 16-битных и один 8-битный канал.

Все перечисленные ресурсы шины должны быть бесконфликтно распределены. Бесконфликтность подразумевает выполнение перечисленных ниже условий.



♦ Каждое устройство-исполнитель должно управлять шиной данных только при чтении по его адресам или по используемому им каналу DMA. Области адре­сов, по которым выполняется чтение регистров различных устройств, не долж­ны пересекаться. Поскольку при записи шиной данных управляет лишь теку­щий задатчик, возможность конфликтов, приводящих к искажениям данных, исключена. «Подсматривать» операции записи, адресованные не данному устройству, не возбраняется.

♦ Назначенную линию IRQx или DRQx устройство должно держать на низком уров­не в пассивном состоянии и переводить в высокий уровень для активации запро­са. Неиспользуемыми линиями запросов устройство управлять не имеет права, они должны электрически отсоединяться или подключаться к буферу, находя­щемуся в третьем состоянии. Одной линией запроса может пользоваться только одно устройство. Такая нелепость (с точки зрения схемотехники ТТЛ) была до­пущена в первых PC и из требований совместимости тиражируется до сих пор.



Глава 6. Шины и карты расширения


Задача распределения ресурсов для старых адаптеров решалась с помощью джам-перов, затем появились программно конфигурируемые устройства, которые вы­тесняются автоматически конфигурируемыми платами PnP.

Назначение контактов слотов шин ISA и EISA приведено в табл. 6.2 и 6.3. Таблица 6.2. Основной разъем шин ISA-8, ISA-16 и EISA


Ряд В


РЯДА



GND IOCHK#
Reset SD7
+5 В SD6
IRQ2/9' SD5
-5 В SD4
DRQ2 SD3
-12В SD2
OWS#2 SD1
+12В g SDO
GND IOCHDRY
SMEMW# и AEN
SMEMR# SA19
IOWR# SA18
IORD# SA17
DACK3# SA16
DRQ3 SA15
DACK1# SA14
DRQ1 SA13
REFRESH» SA12
BCLK SA11
IRO7 SA10
IRQ6 SA9
IRQ5 SA8
IRQ4 SA7
IRQ3 SA6
DACK2# SA5
TC SA4
BALE SA3
+5 В SA2
Osc SA1
GND SAO

1 В4: XT=IRQ2, AT=IRQ9.

2 В8: XT-Card Selected.


6.1. Шины ISA, EISA и PC/104___________________________________________________ 149

Таблица 6.3.Дополнительный разъем шин ISA-16 и EISA
РядОРядС

 

MEMCS16# SBHE#
IOCS16# LA23
IRQ10 LA22
IRQ 11 LA21
IRQ12 LA20
IRQ 15 LA19
IRQ14 LA18
DACKO# LA17
DRQO MEMR#
DACK5# MEMW#
DRQ5 SD8
DACK6# SD9
DRQ6 SD10
DACK7# SD11
DRQ7 SD12
+5B SD13
MASTER* SD14
GND SD15

Сигналы шины ISA естественны для периферийных микросхем фирмы Intel (в стиле семейства 8080). Набор сигналов ISA-8 предельно прост. Программное обращение к ячейкам памяти и пространства ввода-вывода обеспечивают следующие сигналы.

♦ SD[7:0] — шина данных. Иное название сигналов — Data или D.

♦ SA[19:0] (Addr[19:0], A[19:0]) - шина адреса.

♦ AEN — разрешение адресации портов (запрещает ложную дешифрацию адреса в цикле DMA).

♦ IOW# (IOWC#, IOWR#) - запись в порт.

♦ IOR# (IORC#, IORD#) - чтение порта.

♦ SMEMW* (SMEMWR#, SMWTC#) — запись в системную память (в диапазоне ад­ресов 0-FFFFFh).

♦ SMEMR* (SMEMRD#, SMRDC#) — чтение системной памяти (в диапазоне адре­сов 0-FFFFFh).

Ниже перечислены сигналы, относящиеся к сигналам запросов прерывания и ка­налам прямого доступа к памяти.

♦ IRQ2/9, IRQ[3:7] — запросы прерываний. Положительный перепад сигнала
вызывает запрос аппаратного прерывания. Для идентификации источника
высокий уровень должен сохраняться до подтверждения прерывания про­
цессором, что затрудняет разделение (совместное использование) прерыва-


150_____________________________________ Глава 6. Шины и карты расширений

ний. Линия IRQ2/9 в шинах XT вызывает аппаратное прерывание с номером 2, а в AT — с номером 9.

♦ DRQ[1:3] — запросы 8-битных каналов DMA (положительным перепадом).

♦ DACK[1:3]# — подтверждение запросов 8-битных каналов DMA.

♦ ТС — признак завершения счетчика циклов DMA.

Шина имеет и несколько служебных сигналов синхронизации, сброса и регенера­ции памяти, установленной на адаптерах.

♦ IOCHRDY (CHRDY, I/OCHRDY) — готовность устройства, низкий уровень удли­няет текущий цикл (не более 15 икс).

♦ BALE (ALE) — разрешение защелки адреса. После его спада в каждом цикле про­цессора линии SA[0:19] гарантированно содержат действительный адрес.

♦ REFRESH* (REF#) — цикл регенерации памяти (в XT называется DACKO#).
Сигнал появляется каждые 15 мкс, при этом шина адреса указывает на очеред­ную регенерируемую строку памяти.

♦ ЮСНК# — контроль канала, низкий уровень вызывает NMI CPU (разрешение и индикация в системных портах 061h, 062h).

♦ RESET (RESDRV, RESETDRV) — сигнал аппаратного сброса (активный уровень —высокий).

♦ BCLK (CLK) — синхронизация шины с частотой около 8 МГц. ПУ могут не использовать этот сигнал, работая только по управляющим сигналам записи и чтения.

♦ OSC — несинхронизированная с шиной частота 14,431818 МГц (использова­лась старыми дисплейными адаптерами).

Кроме логических сигналов шина имеет контакты для разводки питания +5, -5, +12 и-12 В.

Дополнительный разъем, расширяющий шину до 16-битной, содержит линии дан­ных, адреса, запросов прерываний и каналов прямого доступа.

♦ SD[15:8] — шина данных.

♦ SBHE# — признак наличия данных на линиях SD[15:8].

♦ LA[23:17] — нефиксированные сигналы адреса, требующие защелкивания по спаду сигнала BALE. Такой способ подачи адреса позволяет сократить задержку. Кроме того, схемы дешифратора адреса памяти плат расширения начинают декодирование несколько раньше спада BALE.

♦ IRQ[10:12], IRQ[14:15] — дополнительные запросы прерываний.

♦ DRQ[5:7] — запросы 16-битных каналов DMA (положительным перепадом).

♦ DACK[5:7]# — подтверждение запросов 16-битных каналов DMA.

♦ DRQO и DACKO* — запрос и подтверждение 8-битного канала DMA, освободившегося от регенерации памяти.


6.1. Шины ISA, EISA и PC/104 151

Перечисленные ниже сигналы связаны с переключением разрядности данных.

♦ МEMCS16#(М16#)— адресуемое устройство поддерживает 16-битные обраще­ния к памяти.

♦ IOCS16* (I/OCS16*, Ю16#) — адресуемое устройство поддерживает 16-битные обращения к портам.

К новым управляющим сигналам относятся следующие.

♦ MEMW# (MWTC#) — запись в память в любой области до 16 Мбайт.

♦ MEMR# (MRDC#) — чтение памяти в любой области до 16 Мбайт.

♦ OWS# (SRDY#, NOWS#, ENDXFR) — укорочение текущего цикла по инициативе адресованного устройства.

♦ MASTER* (MASTER 16#) — запрос от устройства, использующего 16-битный канал DMA на управление шиной. При получении подтверждения DACK [5:7] Bus-Master может захватить шину.

В шине EISA на дополнительных контактах слотов (недоступных картам ISA) располагается расширение шин данных и адреса до 32 бит, а также набор сигна­лов, обеспечивающих передачу данных в синхронном режиме с возможностью пакетных циклов.

Обычная передача данных

Для передачи данных от исполнителя к задатчику предназначены циклы чте­ния ячейки памяти или порта ввода-вывода, для передачи данных от задатчика к исполнителю — циклы записи ячейки памяти или порта ввода-вывода. В каждом цикле текущий (на время данного цикла) задатчик формирует адрес обращения и управляющие сигналы, а в циклах записи еще и данные на шине. Адресуемое устройство-исполнитель в соответствии с полученными управляющими сигнала­ми принимает (в цикле записи) или формирует (в цикле чтения) данные. Также оно может, при необходимости, управлять длительностью цикла и разрядностью передачи. Обобщенные временные диаграммы циклов чтения или записи памяти или ввода-вывода приведены на рис. 6.2. Здесь условный сигнал CMD* изобра­жает один из следующих сигналов:

♦ SMEMR#, MEMR# — в цикле чтения памяти;

♦ SMEMW#, MEMW# — в цикле записи памяти;

♦ IOR# — в цикле чтения порта ввода-вывода;

♦ IOW# — в цикле записи порта ввода-вывода.

В каждом из рассматриваемых циклов активными (с низким уровнем) могут быть только сигналы лишь из одной строки данного списка, и во время всего цикла сиг­нал AEN имеет низкий уровень. Цикл прямого доступа к памяти, в котором это пра­вило не соблюдается, рассмотрен ниже, и в таком цикле сигнал AEN будет иметь высо­кий уровень. Сигналы SMEMR* и SMEMW* вырабатываются из сигналов MEMR# и MEMW# соответственно, когда адрес принадлежит диапазону О-FFFFFh. Поэтому сигналы SMEMR* и SMEMW* задержаны относительно MEMR# и MEMW* на 5-10 не.



Глава 6. Шины и карты расширения


 

Рис. 6.2. Временные диаграммы циклов чтения или записи на шине ISA

В начале каждого цикла контроллер шины устанавливает адрес обращения: на линиях SA[19:0] и SBHE# действительный адрес сохраняется на время всего теку­щего цикла; на линиях 1_А[23:17] адрес действителен только в начале цикла, так что требуется его «защелкивание». Каждое устройство имеет дешифратор адре­са — комбинационную схему, срабатывающую только тогда, когда на шине при­сутствует адрес, относящийся к данному устройству. В фазе адресации устройства еще «не знают», к какому из пространств (памяти или ввода-вывода) относится выставленный адрес. Но дешифраторы адресов уже срабатывают, и, когда в сле­дующей фазе шина управления сообщает тип операции, адресуемое устройство уже оказывается готовым к ее исполнению. Если устройство использует линии LA[23:17] (они нужны лишь для обращений к памяти выше границы FFFFFh), то они на дешифратор адреса должны проходить через регистр-защелку, «прозрач­ный» во время действия сигнала BALE и фиксирующий состояние выходов по его спаду. Это позволяет дешифратору, всегда вносящему некоторую задержку, начи­нать работу раньше, чем поступит управляющий сигнал чтения или записи. При обращении к портам ввода-вывода сигналы 1_А[32:17] не используются.

Если устройство имеет более одного регистра (ячейки), то для выбора конкретно­го регистра (ячейки) ему требуется несколько линий адреса. Как правило, стар­шие биты шины адреса поступают на вход дешифраторов адреса, формирующих сигналы выборки устройств, а младшие биты — на адресные входы самих устройств. Тогда каждое устройство в пространстве будет занимать наиболее компактную область смежных адресов размером в 2П байт, где п — номер младшей линии адре­са, поступающей на дешифратор. Из них реально необходимы 2Ш адресов, где m — номер самой старшей линии адреса, участвующей в выборе регистра устройства. В идеале должно быть n=m+l: при большем значении п отведенное (по дешиф-


6.1. Шины ISA, EISA и PC/104_______________________________ 153

ратору) пространство адресов не будет использовано полностью и регистры уст­ройства будут повторяться в отведенной области 2n"m"1 раз, то есть у них появятся адреса-псевдонимы (alias). Адреса-псевдонимы будут отличаться от истинного адреса (минимального из всех псевдонимов) на Kx2m+1, где К — целое число. Мень­шее значение п недопустимо, поскольку тогда не все регистры устройства будут доступны задатчику. В принципе можно использовать дешифратор адреса, сра­батывающий только на какой-то части адресов из области 2П (не кратной степени двойки), если устройству требуется «неудобное» количество регистров. Однако на практике «фигурное выпиливание» областей из пространства адресов обычно не делают, так что часть адресов может пропадать бесполезно.

Разрядность данных в каждом цикле обращения определяется потребностями текущего задатчика и возможностями исполнителя. В IBM PC/XT и системная шина, и шина ISA были 8-разрядными, так что вопросов согласования разрядно­сти не возникало. В IBM PC/AT286 (и 386-SX) системная шина уже 16-разряд­ная, и в современных ПК с 32- и 64-разрядными системными шинами контроллер шины ISA является ее 16-разрядным задатчиком. На системной плате имеется «косой буфер», он же перестановщик байтов, который при необходимости транс­лирует данные с младшего байта шины на старшую или обратно. Логика управле­ния этим буфером использует сигналы SBHE#, SAO, IOCS16* и MEMCS16*. Под­держка 16-разрядных передач сообщается адресуемым исполнителем сигналами IOCS16* и MEMCS16* при срабатывании его дешифратора адреса. Сигнал IOCS16# влияет только на разрядность обращений к портам, MEMCS16* — к памяти. Все операции обмена (транзакции) начинаются задатчиком единообразно, поскольку он еще не «знает» возможностей исполнителя. Развитие событий зависит от наме­рений задатчика и полученных сигналов разрешения 16-битных передач. В чисто 16-разрядных машинах начальный адрес однозначно соответствует передаваемо­му байту или младшему байту передаваемого слова1. В машинах с 32-разрядными процессорами начальный адрес, выставляемый на шине в начале транзакции, за­висит от разрядности данных, запланированной задатчиком, и может зависеть от положения адресуемых данных относительно границы двойного слова (32 битно­го). 16-разрядные передачи выполняются за 1 цикл только при условии передачи по четному адресу (АСНО) и при ответе исполнителя сигналом IOCS16* или MEMCS16*, в иных случаях они разбиваются на два цикла. 32-разрядные пере­дачи будут разбиваться на 2 (16+16), 3 (8+16+8) или 4 (8+8+8+8) цикла, в за­висимости от возможностей исполнителя и четности адреса. Порядок, в котором передаются байты (во времени), неоднозначен (возможен как инкремент, так и дек­ремент адреса), но в адресном пространстве они раскладываются по своим местам однозначно.

В табл. 6.4 приводятся состояния сигналов шины ISA для различных вариантов записи в порты ввода-вывода, проверенные экспериментальным путем. Вывод

1 То есть адрес слова в L-H порядке, принятом для изделий Intel.


154_____________________________________ Глава 6. Шины и карты расширения

16-разрядных данных выполнялся командой OUT DX,AX (в DX — адрес порта, в АХ —
данные; AL содержит младший байт, АН — старший), вывод 8-разрядных — коман­
дой OUT DX,AL. Несколько неожиданные (для автора) варианты 3 и 6 с декремен­
том адреса, возможно, будут иметь место не на всех системных платах, но их сле­
дует иметь в виду при проектировании устройств, претендующих на глобальную
совместимость. Правда на практике 16-битных передач по нечетным адресам
обычно избегают (даже чисто подсознательно), и побочные эффекты от такого
порядка маловероятны. /

Таблица 6.4.Состояние сигналов при 8- и 16-битных обращениях к устройству ISA
Сигнал (шина) 1 цикл 2 цикл

1. Вывод 16-разрядных данных в 16-битное устройство по четному адресу
SBHE# L

SA DX(AO=0)

D[15:8] АН

D[7:0] AL -

IOCS16# L

2. Вывод 16-разрядных данных в 16-битное устройство по нечетному адресу ххх1,ххх5, xxx9,xxxD
SBHE# L H

SA DX(AO=1) DX+1 (A0=0)

D[15:8] AL 0

D[7:0] AL AH

IOCS16# L L

3. Вывод 16-разрядных данных в 16-битное устройство по нечетному адресу хххЗ,ххх7, xxxB.xxxF
SBHE# H L

SA DX+1 (A0=0) DX (A0= 1)

D[15:8] 0 AL

D[7:0] AH 0

IOCS16* L L

4. Вывод 16-разрядных данных в 8-битное устройство по четному адресу
SBHE# L L

SA[1:0] DX(AO=0) DX+1(AO=1)

D[15:8] AH AH

D[7:0] AL AH

IOCS16* H H

5. Вывод 16-разрядных данных в 8-битное устройство по нечетному адресу ххх1,ххх5, xxx9,xxxD
SBHE# L H

SA[ 1:0] DX (A0= 1) DX+1 (A0=0)

D[15:8] AL 0

D[7:0] AL AH

IOCS16# H H


6.1. Шины ISA, EISA и PC/104________________________________________ 155

Сигнал (шина)____________ 1 цикл______________________ 2 цикл______________________

6. Вывод 16-разрядных данных в 8-битное устройство по нечетному адресу хххЗ,ххх7, xxxB,xxxF
SBHE# H L

SA[1:OJ DX+1(AO=0) DX(AO=1)

D[15:8] 0 AL

D[7:0] AH AL

IOCS16# H H

7. Вывод 8-разрядных данных в 16-битное устройство по четному адресу
SBHE# H

SA[1:0] DX(AO=0)

D[15:8] 0

D[7:0] AL

IOCS16* L

8. Вывод 8-разрядных данных в 16-битное устройство по нечетному адресу
SBHE# L

SA[1:0] DX(AO=1)

D[15:8] AL

D[7:0] 0(AL?)

IOCS16* L

Момент помещения действительных данных на линии SD[15:0] определяется управляющими сигналами чтения/записи, так что исполнителю не требуется син­хронизация с тактовым сигналом шины. В циклах чтения адресованный исполни­тель должен выдать данные на шину по началу (спаду) соответствующего сигнала чтения (IOR#, MEMR#, SMEMR#) и удерживать их до конца действия сигнала (пока не произойдет подъем сигнала). В циклах записи задатчик выставляет действи­тельные данные несколько позже начала (спада) сигнала записи (IOW#, MEMW#, SMEMW#). Устройство-исполнитель должно фиксировать для себя эти данные в конце цикла по подъему сигнала записи. От устройства-исполнителя не преду­сматривается никаких подтверждений исполнения циклов; длительность цикла устанавливает задатчик, но исполнитель может потребовать удлинения или уко­рочения циклов. С помощью сигнала IOCHRDY исполнитель может удлинить цикл на произвольное число тактов, при этом задатчик будет вводить дополнительные такты ожидания (wait states). Обычно контроллер шины следит за длительностью цикла и по достижении критического времени принудительно его завершает (по тайм-ауту, возможно, и не сообщая об этом событии). Слишком длинные циклы тормозят работу компьютера, а превышение длительности 15 мкс может привести к сбою регенерации и потере данных в ОЗУ. С помощью сигнала OWS# исполни­тель предлагает задатчику укоротить цикл, исключив такты ожидания. Реакция задатчика на одновременное использование сигналов IOCHRDY и OWS# непред­сказуема, этой ситуации следует избегать.

ВНИМАНИЕ

Некорректное управление сигналом IOCHRDY (его «залипание» на низком уровне) тормозит работу компьютера.


156_______________________________ Глава 6. Шины и карты расширения

Номинальная длительность цикла определяется чипсетом и может программиро­ваться в BIOS Setup заданием числа тактов ожидания (wait states). При этом цик­лы обращения к памяти, как правило, короче циклов обращения к портам ввода-вывода. Для управления длительностью цикла используются также сигналы управления разрядностью передачи: если устройство поддерживает 16-битные передачи, предполагается, что оно может работать с меньшим количеством тактов ожидания. Этим объясняется, что в BIOS Setup длительности циклов ISA задают­ся раздельно как для памяти и ввода-вывода, так и для 8- и 16-битных операций. Кроме длительности цикла, устройства могут быть критичны к времени восста­новления (recovery time) — длительности пассивного состояния управляющих сигналов чтения-записи между циклами. Этот параметр также может программи­роваться в BIOS Setup и тоже раздельно для 8- и 16-разрядных операций.

Карты расширения для подключения к шине данных, как правило, используют буферные микросхемы, раздельные для линий SD[7:0] и SD[15:8]. Здесь широко применяются микросхемы 74ALS245 (1533АП6) — 8-разрядные двунаправленные приемопередатчики. Буфер должен открываться сигналом ОЕ# (Output Enable — разрешение выхода), когда на шине адреса присутствует адрес, относящийся к ди­апазону адресов подключаемого устройства. «Дежурным» является направле­ние передачи «от шины — к устройству»; переключение в обратную сторону про­изводится по сигналу IOR#, если устройство представляет порты ввода-вывода, или MEMRD*, если устройство приписано к пространству памяти. Таким образом, буферы имеют право передавать данные на шину (управлять шиной данных) толь­ко во время действия сигнала чтения, относящегося к зоне адресов данного устрой­ства. Карта расширения может являться комбинацией 8- и 16-битных устройств; например, некогда популярные мультикарты содержали 16-битный адаптер AT A и набор 8-битных контроллеров портов COM, LPT, GAME и контроллера НГМД. В таких картах логика управления буферами и сигналами IOCS16* и MSC16* управляется сигналами от дешифратора адреса. Если устройство по данному адре­су является 8-разрядным (не формирует сигналы IOCS16* или MSC16*), то оно имеет право разрешать чтение только через буфер линий SD[7:0], а буфер старших линий SD[15:8] (если он имеется на карте) должен быть переведен в третье состо­яние. Если устройство по данному адресу является 16-разрядным, то оно форми­рует сигнал IOCS16* или MSC16*, а разрешением буферов управляют сигналы SBHE* и SAO. В этом случае буфер линий SD[7:0] разрешается только при SAO=0, а буфер линий SD[15:8] разрешается только при SBHE#=L. Некорректное раз­решение буферов может приводить к их конфликту с перестановщиком байтов системной платы и искажениям данных.

Восьмиразрядные устройства (например, микросхемы 8255, 8250, 8253 и т. п.) следует подключать только к линиям SD[7:0] и при обращении к ним не формиро­вать сигналы IOCS16* или MSC16*. Никакие «косые» буферы (перестановщики байтов) на интерфейсных картах не нужны.

В одном из источников описывается эффект перестановки байтов при обращении к порту ввода-вывода: «Если прочитать слово из порта по четному адресу, значе­ние одно, а если по нечетному — старшие 8 бит предыдущего значения становятся


6.1. Шины ISA, EISA и PC/104_________________________________________ 157

младшими, а старшие нового = FFh». Первые подозрения падают на ошибку в логи­ке управления буферами. На самом деле все объясняется гораздо проще. Пусть имеется устройство с двухбайтным регистром, младший байт которого имеет ад­рес RO (четный), старший — RO+1, а по адресу R+2 устройство (и никакие другие) не откликается. Пусть в данный момент в нем записано число AA55h, тогда чтени­ем порта по команде IN AX, R0 получим в регистрах процессора AL=55h, AH=AAh. Теперь если попытаться его «прочитать по нечетному адресу», то есть командой IN АХ, R0+1, то получим AL=AAh (содержимое RO+1, к которому мы на самом деле и адресовались!), a AH=FFh (результат чтения «пустоты»). Так что это не «эффект перестановки», а просто незнание общего правила «интеловской» адресации: ад­ресом слова (двойного, учетверенного...) является адрес его младшего байта. Если в нашем устройстве применяется неполная дешифрация адреса (линия SA1 не ис­пользуется ни для дешифрации адреса, ни для выбора регистра), то мы увидим полную перестановку байт — в AH=55h, результат чтения RO по адресу-псевдони­му RO+2. Логика работы контроллера шины вместе со всеми буферами делает обращение к любой ячейке памяти или порту инвариантным к способу программ­ной адресации — что закажешь, то и получишь, но требуется учитывать особенно­сти периферийных устройств, у которых в адресации портов нередко встречаются псевдонимы. Адреса-псевдонимы встречаются и в пространстве памяти (напри­мер, копии образов BIOS под границей 1^го и 16-го мегабайтами памяти в «клас­сических» PC/AT).

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.