Чтение онлайн

на главную

Жанры

Аппаратные интерфейсы ПК. Энциклопедия

Гук Михаил Юрьевич

Шрифт:

Таблица 12.1. Стандартная карта портов ввода-вывода

AT и PS/2 PC/XT Назначение
000-00F 000-00F Контроллер DMA #1 8237
010-01F   PS/2 — расширение DMA#1
020-021 020-021 Контроллер прерываний #1 — 8259A
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 микроканал, арбитр
  0А0 Маска NMI
0A0-0BF   Контроллер прерываний #2 — 8259A
0C0-0DF   Контроллер DMA #2 8237A-5
0F0-0FF   Сопроцессор 80287
100-1EF   PS/2 управление микроканалом
170-177   Контроллер НЖМД #2 (IDE#2)
1F0-1F7   Контроллер НЖМД #1 (IDE#1)
200-207 200-20F Игровой адаптер
  210-217 Блок расширений
238-23F   COM4
278-27F 278-27F Параллельный порт LPT2 (LPT3 при наличии MDA)
  2A2-2A3 часы MSM48321RS
2C0-2DF 2C0-2DF EGA #2
2E0-2E7   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
3A0-3AF 3A0-3A9 Синхронный адаптер BSC#1
3B0-3BB 3B0-3BB Монохромный адаптер (MDA)
3B4-3C9   PS/2 видеосистема
3BC-3BF 3BC-3BF Параллельный порт LPT1 платы MDA
3C0-3CF 3C0-3CF EGA#1
3C0-3DF 3C0-3DF VGA
3D0-3DF 3D0-3DF CGA/EGA
3E0-3E7   COM3
3E8-3EF   COM3
3F0-3F7 3F0-3F7 Контроллер НГМД #1
3F6-3F7   Порты команд IDE#1
3F8-3FF 3F8-3FF COM1

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

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

Аппаратные прерывания обеспечивают реакцию процессора на события, происходящие асинхронно по отношению к исполняемому программному коду. Прерывания в процессорах х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 (сигнал
IOCHK#
);

♦ бит 7 R —

PCK
— ошибка четности ОЗУ или сигнал
SERR#
на шине PCI.

Реакция процессора на маскируемые прерывания может быть задержана сбросом его внутреннего флага

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

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

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

IRET
. Первым делом программа должна загрузить в память свой обработчик и подставить указатель на его начало в соответствующее место таблицы прерываний. Далее следует размаскировать вход, для чего выполняется чтение регистра маски (адрес 21h для 8259А#1, A1h для 8259А#2), обнуление соответствующего бита (см. табл. 12.2) и запись в регистр нового значения маски. При работе с контроллером прерываний от программы требуется лишь управление маской своего запроса (при инициализации программы нужно обнулить маску требуемого запроса) и корректное завершение обработки прерываний. Каждая процедура обработки аппаратного прерывания должна завершаться командой
EOI
(End Of Interruption), посылаемой контроллеру:

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

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

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

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

Имя (номер¹) Вектор Контроллер/маска Описание
NMI 02h   Контроль канала, паритет (в XT — сопроцессор)
IRQ0 08h #1/1h Таймер (канал 0 8253/8254)
IRQ1 09h #1/2h Клавиатура
IRQ2 0Ah #1/4h XT — резерв, AT — недоступно (подключается каскад IRQ8-IRQ15)
IRQ8 70h #2/1h 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 Математический сопроцессор
IRQ14 76h #2/40h HDC — контроллер НЖМД
IRQ15 77h #2/80h Резерв
IRQ3 0Bh #1/4h COM2, COM4
IRQ4 0Ch #1/10h COM1, COM3
IRQ5 0Dh #1/20h XT — HDC, AT — LPT2, Sound (резерв)
IRQ6 0Eh #1/40h FDC — контроллер НГМД
IRQ7 0Fh #1/80h LPT1 — принтер

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

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

На входы контроллеров прерываний поступают запросы от системных устройств (клавиатура, системный таймер, CMOS-таймер, сопроцессор), периферийных контроллеров системной платы и от карт расширения. Традиционно все линии запросов, не занятые перечисленными устройствами, присутствуют на всех слотах шины ISA/EISA. Эти линии обозначаются как

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

Для запросов прерывания с шины PCI используются 4 линии запросов прерывания, которые обозначают как

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

Поделиться:
Популярные книги

Назад в СССР: 1986 Книга 5

Гаусс Максим
5. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Назад в СССР: 1986 Книга 5

Неудержимый. Книга III

Боярский Андрей
3. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга III

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Конструктор

Семин Никита
1. Переломный век
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Конструктор

Наследник Четырех

Вяч Павел
5. Игра топа
Фантастика:
героическая фантастика
рпг
6.75
рейтинг книги
Наследник Четырех

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Легат

Прокофьев Роман Юрьевич
6. Стеллар
Фантастика:
боевая фантастика
рпг
6.73
рейтинг книги
Легат

Земная жена на экспорт

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Земная жена на экспорт

Идеальный мир для Лекаря 11

Сапфир Олег
11. Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 11

Столичный доктор. Том II

Вязовский Алексей
2. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Столичный доктор. Том II

Столичный доктор. Том III

Вязовский Алексей
3. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Столичный доктор. Том III

Пропала, или Как влюбить в себя жену

Юнина Наталья
2. Исцели меня
Любовные романы:
современные любовные романы
6.70
рейтинг книги
Пропала, или Как влюбить в себя жену

Нефилим

Демиров Леонид
4. Мания крафта
Фантастика:
фэнтези
боевая фантастика
рпг
7.64
рейтинг книги
Нефилим

Бывший муж

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Бывший муж