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

Пространство ввода-вывода





Пространство ввода-вывода в IBM PC, как и в процессорах х86, отделено от про­странства памяти. У всех этих процессоров, в том числе и 32-разрядных, в про­странстве ввода-вывода используется 16-разрядная адресация (диапазон адресов О-FFFFh). Для дешифрации адресов портов в оригинальном PC из 16 бит исполь­зовались только младшие 10 (А0-А9), что обеспечивает обращением портам в диа­пазоне адресов 0-3FFL Старшие биты адреса, хотя и поступают на шину, устройства­ми игнорируются. В результате обращения по адресам, к примеру 378h, 778h, B78h и F78h, будут восприниматься устройствами одинаково. Это упрощение, нацелен­ное на снижение стоимости как системной платы, так и схем плат адаптеров, для шины ISA никто не отменял. Традиционные адаптеры для шины ISA, называемые Legacy Card («наследие тяжелого прошлого»), для старших бит адреса не имеют

1 Для пока еще экзотических вариантов системных плат с памятью более 4 Гбайт и 36-разрядной физи­ческой адресацией последних моделей процессоров PCI может использовать двухадресные циклы об­ращения с 64-битным адресом.



Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера




1 даже печатных ламелей на своем краевом разъеме. Впоследствии перешли к 12-бит­ной адресации устройств шины ISA, но ее приходится применять £ оглядкой на возможное присутствие устройств с 10-битной адресацией. В адаптерах для шин МСА и PCI и во всех современных системных платах используются все 16 бит адреса. Карта распределения адресов ввода-вывода стандартных устройств PC при­ведена в табл. 12.1. Эта карта подразумевает 10-битную дешифрацию адреса. Есте­ственно, что в конкретном компьютере реально присутствуют не все перечисленные устройства, но в то же время там могут оказаться другие, не попавшие в таблицу.

Таблица 12.1.Стандартная карта портов ввода-вывода 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)
Диагностический регистр POST (только запись)
  060-063 Системный интерфейс 8255
060,064   Контроллер клавиатуры AT 8042
  Источники NMI и управление звуком
070-07F   Память CMOS и маска NMI
  Диагностический регистр-
080-08F 080-083 Регистры страниц DMA
090-097   PS/2 микроканал, арбитр
  ОАО Маска NMI
OAO-OBF   Контроллер прерываний #2 — 8259А
OCO-ODF   Контроллер DMA #2 8237А-5
OFO-OFF   Сопроцессор 80287
100-1EF   PS/2 управление микроканалом
170-177   Контроллер НЖМД #2 (IDE#2)
1FO-1F7   Контроллер НЖМД #1 (IDE#1)
200-207 200-20F Игровой адаптер
  210-217 Блок расширений
238-23F   COM4
278-27F 278-27F Параллельный порт LPT2 (LPT3 при наличии MDA)
  2А2-2АЗ 4acbiMSM48321RS
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)

12.3. Аппаратные прерывания





 


AT и PS/2 PC/XT


Назначение


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

Каждой шине назначается своя область адресов ввода, поэтому дешифратор адре­сов, расположенный на системной плате, при чтении открывает соответствующие буферы данных, так что реально считываться будут данные только с одной шины. При записи в порты данные (и сигнал записи) могут распространяться по всем шинам компьютера. В стандартном распределении адреса Oh-OFFh отведены для устройств системной платы. При наличии (и разрешении работы) периферийных устройств на системной плате чтение по этим адресам не распространяется на шины расширения. Для современных плат со встроенной периферией и несколь­кими шинами (ISA, PCI) распределением адресов управляет BIOS через регист­ры конфигурирования чипсета.



Аппаратные прерывания

Аппаратные прерывания обеспечивают реакцию процессора на события, проис­ходящие асинхронно по отношению к исполняемому программному коду. Преры­вания в процессорах х86 подробно рассмотрены в литературе [6,7]. Здесь напом­ним, что аппаратные прерывания делятся на маскируемые и немаскируемые. На немаскируемое прерывание (NMI) процессор реагирует всегда (если обслужива­ние предыдущего NMI завершено); этому прерыванию соответствует фиксирован­ный вектор 2. Немаскируемые прерывания в PC используются для сигнализации о фатальных аппаратных ошибках. Сигнал на линию NMI приходит от схем контроля паритета памяти, от линий контроля шины ISA (IOCHK) или шины PCI (SERR#). Сигнал NMI блокируется до входа процессора установкой в 1 бита 7 порта 070h, отдельные источники разрешаются и идентифицируются битами порта 061h:

♦ бит 2 R/W — ERP — разрешение контроля ОЗУ и сигнала SERR# шины PCI;

♦ бит 3 R/W — EIC — разрешение контроля шины ISA;

♦ бит 6 R — IOCHK — ошибка контроля на шине ISA (сигнал ЮСНК#);

♦ бит 7 R — РСК — ошибка четности ОЗУ или сигнал SERR* на шине PCI.


458 Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера

Реакция процессора на маскируемые прерывания может быть задержана сбросом его внутреннего флага IF (инструкции СLI — запретить прерывания, STI — разре­шить). По возникновении события, требующего реакции, адаптер (контроллер) устройства формирует запрос прерывания, который поступает на вход контрол­лера прерываний. Контроллер прерываний формирует общий запрос маскиру­емого прерывания для процессора, а когда процессор подтверждает этот запрос, контроллер сообщает процессору вектор прерывания, по которому выбирается программная процедура обработки прерываний. Процедура должна выполнить действия по обслуживанию данного устройства, включая сброс его запроса для обеспечения возможности реакции на следующие события и посылку команды завершения в контроллер прерываний. Вызывая процедуру обработки, процессор автоматически сохраняет в стеке значение всех флагов и сбрасывает флаг IF, что запрещает маскируемые прерывания. При возврате из процедуры (по инструкции I RET) процессор восстанавливает сохраненные флаги, в том числе и установленный IF, что снова разрешает прерывания. Если во время работы обработчика прерыва­ний требуется реакция на иные прерывания (более приоритетные), то в обработ­чике должна присутствовать инструкция STI. Особенно это касается длинных об­работчиков; здесь инструкция STI должна вводиться как можно раньше, сразу после критической (не допускающей прерываний) секции. Следующие прерывания того же или более низкого уровня приоритета контроллер прерываний будет обслужи­вать только после получения команды завершения прерывания EOI (End Of Interrupt).

Маскируемые прерывания используются для сигнализации о событиях в устрой­ствах. Обработка сигналов запросов прерывания выполняется контроллером пре­рываний, программно совместимым с 8259А. Контроллер прерываний позволяет маскировать отдельные входы запросов и организовывать систему приоритетов запросов от различных входов. В машинах класса AT применяется каскадное со­единение двух контроллеров. Ведущий контроллер 8259А#1 обслуживает запро­сы О, 1, 3-7; его выход подключается к входу запроса прерываний процессора. К его входу 2 подключен ведомый контроллер 8259А#2, который обслуживает за­просы 8-15. При этом поддерживается вложенность приоритетов — запросы 8-15 со своим рядом убывающих приоритетов вклиниваются между запросами 1 и 3 ведущего контроллера, приоритеты запросов которого также убывают с ростом номера. В XT каскадирование не применялось, и один контроллер 8259А обслу­живал все 8 линий запросов.

Контроллер прерываний 18259А подробно описан в литературе [1, 7]; здесь приве­дем лишь необходимые сведения, в большинстве случаев достаточные для работы. Контроллеры расположены по адресам 20-21h (8259A#1) и AO-Alh (8259A#2), обращаться к ним следует как к однобайтным портам ввода-вывода. После ини­циализации (процедурой POST и при загрузке ОС) все неиспользуемые входы контроллеров замаскированы (на запросы прерываний реагировать не будут), а их векторы прерываний указывают на «заглушку» — процедуру с единственной инструкцией IRET. Первым делом программа должна загрузить в память свой об­работчик и подставить указатель на его начало в соответствующее место таблицы прерываний. Далее следует размаскировать вход, для чего выполняется чтение регистра маски (адрес 21h для 8259А#1, Alh для 8259А#2), обнуление соответ-


12.3. Аппаратные прерывания



ствующего бита (см. табл. 12.2) и запись в регистр нового значения маски. При работе с контроллером прерываний от программы требуется лишь управление маской своего запроса (при инициализации программы нужно обнулить маску требуемого запроса) и корректное завершение обработки прерываний. Каждая процедура обработки аппаратного прерывания должна завершаться командой ЕОI (End Of Interruption), посылаемой контроллеру:

♦ для 1-го контроллера — посылка байта 20h по адресу 20h;

♦ для 2-го контроллера — посылка байта 2Oh по адресу AOh (EOI для ведомого
контроллера), затем посылка байта 20h по адресу 20h (EOI для ведущего кон­
троллера).

Некорректно завершенная процедура не позволит повторно использовать данный или другие запросы прерываний. Если обработчик прерывания удаляется из памя­ти, предварительно должен быть замаскирован соответствующий ему вход контрол­лера. Все изменения в таблице прерываний должны выполняться при замаскиро­ванных прерываниях, чтобы избежать попытки использования вектора в процессе его модификации (это приведет к «вылету» программы).

На входы контроллеров прерываний поступают запросы от системных устройств (клавиатура, системный таймер, CMOS-таймер, сопроцессор), периферийных контроллеров системной платы и от карт расширения. Традиционно все линии запросов, не занятые перечисленными устройствами, присутствуют на всех сло­тах шины ISA/EISA. Эти линии обозначаются как IRQx и имеют общепринятое назначение (табл. 12.2). Часть этих линий отдается в распоряжение шины PCI. В таблице отражены и приоритеты прерываний — запросы расположены в поряд­ке их убывания. Номера векторов, соответствующих линиям запросов контролле­ров, система приоритетов и некоторые другие параметры задаются программно при инициализации контроллеров. Эти основные настройки остаются традици­онными для обеспечения совместимости с программным обеспечением.

Таблица 12.2.Аппаратные прерывания (в порядке убывания приоритета)

 

Имя (номер1) Вектор Контроллер/маска Описание
NMI 02h   Контроль канала, паритет
      (в XT — сопроцессор)
IRQO 08h #1/1h Таймер (канал £8253/8254)
IRQ1 09h #1/2h Клавиатура
IRQ2 OAh #1/4h XT — резерв, AT — недоступно
      (подключается каскад IRQ8-IRQ15)
IRQ8 70h #2/1 h CMOS RTC — часы реального времени
IRQ9 71h #2/2h Резерв
IRQ10 72h #2/4h Резерв
IRQ11 73h #2/8h Резерв
IRQ12 74h #2/10h PS/2-Mouse (резерв)
IRQ 13 75h #2/20h Математический сопроцессор

продолжение^



460______ Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера

Таблица 12.2(продолжение)

Имя (номер1) Вектор Контроллер/маска Описание

 

IRQ14 76h #2/40h HOC — контроллер НЖМД
IRQ15 77h #2/80h Резерв
IRQ3 OBh #1/4h COM2, COM4
IRQ4 OCh #1/10h COM1,COM3
IRQ5 ODh #1/20h XT — HOC, AT — LPT2, Sound (резерв)
IRQ6 OEh #1/40h FDC — контроллер НГМД
IRQ7 OFh #1/80h LPT1 — принтер

1 Запросы прерываний 0,1,8 и 13 на шины расширения не выводятся.

Для запросов прерывания с шины PCI используются 4 линии запросов прерыва­ния, которые обозначают как INTR А, В, С, D. Эти линии работают по низкому уров­ню, что дает возможность их разделения (совместного использования). Линии циклически сдвигаются в слотах и независимо коммутируются на доступные линии IRQx с помощью конфигурационных регистров чипсета. Линии IRQx, используемые шиной PCI, становятся недоступными для шины ISA. «Дележку» линий между шинами, а также управление чувствительностью отдельных линий обеспечивают параметры CMOS Setup, а также система PnP.В параметрах ISA или Legacy под­разумевают использование линий IRQx традиционными адаптерами шины ISA (статическое распределение), a PCI/PnP — использование адаптерами шины PCI или адаптерами PnP для шины ISA (динамическое распределение). Общая схема формирования запросов прерываний изображена на рис. 12.1.

Рис. 12.1.Коммутация запросов прерываний

Каждому устройству, для поддержки работы которого требуются прерывания, должен быть назначен свой номер прерывания. Назначения номеров прерываний выполняются с двух сторон: во-первых, адаптер, нуждающийся в прерываниях,


12.3. Аппаратные прерывания_________________________________________ 461

должен быть сконфигурирован на использование конкретной линии шины (джам-перами или программно). Во-вторых, программное обеспечение, поддерживающее данный адаптер, должно быть проинформировано о номере используемого векто­ра. В процессе назначения прерываний может участвовать система PnP для шин ISA и PCI, для распределения линий запросов между шинами служат специаль­ные параметры CMOS Setup.

Контроллер прерываний позволяет программировать свои входы на чувствитель­ность к уровню или перепаду сигнала.

Чувствительность к уровню (level sensitive) означает, что контроллер преры­ваний вырабатывает запрос прерывания процессора по факту обнаружения определенного уровня (на ISA — высокого) на входе DRQx. Если к моменту за­вершения обработки этого запроса (после записи команды EOI в регистр кон­троллера прерываний) контроллер снова обнаруживает активный уровень на том же входе DRQx, то он снова сформирует запрос на прерывание процессора.

Чувствительность к перепаду (edge sensitive) означает, что контроллер преры­ваний вырабатывает запрос прерывания процессора только по факту обнару­жения перепада (на ISA — положительного) на входе DRQx. Повторно запрос по этому входу возможен только по следующему такому же перепаду, то есть сигнал предварительно должен вернуться в исходное состояние.

В любом случае сигнал запроса аппаратного прерывания IRQx должен удерживать­ся генерирующей его схемой, по крайней мере, до цикла подтверждения прерыва­ния процессором. В противном случае источник прерывания корректно иденти­фицирован не будет, и контроллер сообщит ложный вектор прерывания (spurious interrupt), соответствующий его входу с максимальным номером (IRQ7 для перво­го контроллера и IRQ 15 для второго). Обычно адаптеры строят так, что сигнал за­проса сбрасывается при обращении программы обслуживания прерывания к со­ответствующим регистрам адаптера.

В шине ISA прерывание вырабатывается по положительному перепаду сигнала на линии запроса. Это плохо по двум причинам: такой способ подачи сигнала, во-первых, имеет меньшую помехозащищенность, чем срабатывание по отрицатель­ному перепаду, во-вторых, отрезает путь к нормальному разделению линий за­просов (см. ниже), для которого полностью пригоден способ подачи сигнала по низкому уровню. Поскольку традиционный контроллер позволяет задавать чув­ствительность — уровень (Level) или перепад (Edge) — только для всех входов одновременно, в общем случае разделяемые прерывания на шине ISA вместе с кор­ректной работой системных устройств использоваться не могут.

На современных системных платах функции контроллеров прерываний возла­гаются на чипсет, который может иметь и более гибкие возможности управле­ния, чем пара контроллеров 8259А. В операционном режиме всегда сохраняется программная совместимость с 8259А. Процедура инициализации контроллеров может и отличаться от традиционной, но ею занимается тест POST, который «знает» особенности системной платы. В симметричных мультипроцессорных системах аппаратные прерывания работают сложнее, поскольку их могут обслуживать различные процессоры. Для реализаций системы прерываний процессоры Pentium и выше имеют встроенный контроллер прерываний APIC (Advanced Programmable


462 Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера

Interruption Controller). Внутренние контроллеры процессоров связаны между собой по шине APIC, к которой подключена и «ответная часть» чипсета, преобра­зующая запросы аппаратных прерываний в сигналы протокола APIC. В операци­онном режиме такая связка также совместима с 8259 А.

 








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



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