Контроллер прерываний

Скачать доклад: Контроллер прерываний

Программируемый контроллер прерываний 8259 предназначен для обработки до 8 приоритетных уровней прерываний. Возможно каскадирование микросхем, при этом общее число уровней прерывания будет достигать 64.

Контроллер 8259 имеет несколько режимов работы, которые устанавливаются программным путем. В ПЭВМ IBM используется только один из этих режимов, который устанавливается программами начальной загрузки BIOS при запуске машины. Без крайней необходимости не желательно перепрограммировать контроллер, так как неправильное программирование нарушает логику работы всей системы.

Условное графическое изображение микросхемы:

                       -------T-----T------¬
¦ 56 ¦ PIC ¦ ¦
11 ---+ D0 ¦ ¦ ¦
10 ---+ D1 ¦ ¦ ¦
9 ---+ D2 ¦ ¦ ¦
8 ---+ D3 ¦ ¦ ¦
7 ---+ D4 ¦ ¦ ¦
6 ---+ D5 ¦ ¦ ¦
5 ---+ D6 ¦ ¦ ¦
4 ---+ D7 ¦ ¦ ¦
+------+ ¦ ¦
27 ---+ A0 ¦ ¦ INT +--- 17
+------+ ¦ ¦
18 ---+ IRQ0 ¦ ¦ ¦
19 ---+ IRQ1 ¦ ¦ ¦
20 ---+ IRQ2 ¦ ¦ CAS0 +--- 12
21 ---+ IRQ3 ¦ ¦ ¦
22 ---+ IRQ4 ¦ ¦ CAS1 +--- 13
23 ---+ IRQ5 ¦ ¦ ¦
24 ---+ IRQ6 ¦ ¦ CAS2 +--- 15
25 ---+ IRQ7 ¦ ¦ ¦
+------+ +------+
1 ---  CS ¦ ¦ ¦
2 ---  WR ¦ ¦ GND +--- 14
3 ---  RD ¦ ¦ ¦
26 ---  INTA ¦ ¦ Ucc +--- 28
16 ---  MS/SW¦ ¦ ¦
L------+-----+-------
D0-D7 - канал данных;
A0 - адресная линия нулевого разряда;
IRQ0-IRQ7 - входы запросов прерываний;
 4__
CS - сигнал "выбор микросхемы";
 4__
WR - сигнал "запись информации";
 4__
RD - сигнал "чтение информации";
 4____
INTA - сигнал "подтверждение прерывания";
 4__ __
MS/SW - выбор ведомой микросхемы;
INT - сигнал прерывания;
CAS0-CAS2 - шина каскадирования;
GND - "земля";
U 4cc 0 - напряжение питания.
____
INTA INT
¦ ^
-----------¬ ---¬ v ¦
¦ Буферные ¦ ¦ ¦ -------------------+------¬
D0-D7 <==>¦ регистры ¦<=>¦ ¦ ¦ Устройство управления ¦
¦ данных ¦ ¦ ¦ L---------T----------------
L----------- ¦ ¦ ^ ¦ ^
г¦ ¦=======- ¦ ¦
__ -----------¬ ¦¦ L-------------+-----------+-----¬
RD --->¦Логическая¦ ¦¦Внутренняя 8-разрядная шина дпнных¦
__ ¦ схема ¦ ¦¦ --------------T------------------
WR --->¦ чтения- ¦<=¦¦ ¦ ^ ¦ ^ ^
¦ записи ¦ ¦¦ ¦ ¦ ¦ ¦ ¦
A0 --->¦ ¦ ¦¦ ¦ ¦ ¦ v ¦
L----------- ¦¦ ¦ v v ---------+-¬<- IRQ0
__ ^ ¦¦ ¦ ------------¬¦ ¦<- IRQ1
CS ---------- ¦¦ ¦ ¦ Регист𠦦 Регистр ¦<- IRQ2
¦¦ ¦ ¦обслуженных¦¦ запросов ¦<- IRQ3
-----------¬ ¦¦ ¦ ¦ запросов ¦¦прерывания¦<- IRQ4
CAS0 <-->¦ Буферная ¦ ¦¦ ¦ L------------¦ ¦<- IRQ5
¦ схема ¦ ¦¦ ¦ ^ ¦ ¦<- IRQ6
CAS1 <-->¦ каскади- ¦<=-¦ ¦ ¦ L-----------<- IRQ7
¦ рования ¦ ¦ ¦ ¦ ^
CAS2 <-->¦ ¦ ¦ ¦ ------¦------------¦--------¬
L----------- ¦ ¦ ¦Схема маскирования запросов¦
__ __ ^ ¦ ¦<=>¦ прерывания и анализа их ¦
MS/SW ---------- ¦ ¦ ¦ по приоритету ¦
L--- L----------------------------

Регистр запросов прерывания IRR предназначен для записи и хранения запросов прерывания (IRQ). Регистр обслуженных запросов ISR предназначен для хранения сигнала, обслуживаемого в данный момент.

Схема маскирования IMR разрешает или запрещает прохождение сигналов с выхода регистра запросов прерывния на входы схемы анализа по уровню приоритета. Сигналы, прошедшие через схему маскирования, анализируются по уровню приоритета. Запросы с более высоким приоритетом, занесенные в регистр обслуженных запросов, запрещают прохождение через схему маскирования равных или низших по уровню приоритета запросов. Для разрешения прохождения этих запросов необходимо подать на микросхему команду "Конец прерывания" либо команду специального маскирования.

Различные сочетания сигналов, подаваемых на вход логической схемы чтения/записи, позволяют записывать команды в регистры микросхемы, а также считывать содержимое этих регистров на шину данных.

Устройство управления предназначено для выдачи сигнала INT после поступления одного или нескольких запросов на входы IRQ0 IRQ7, а также для формирования команды CALL.

Если необходимо обслуживать более 8 линий запросов прерывания, используется метод каскадирования: один контроллер включается как ведущая микросхема (на входе MS/SV напряжение высокого уровня), а остальные - как ведомые (на входах MS/SV напряжение низкого уровня), причем каждой ведомой микросхеме присваивается номер, который устанавливается программным путем перед началом работы.

В машинах IBM AT имеется 15 линий сигналов прерывания, для обслуживания которых используются ведущая и одна ведомая микросхемы. Для каскадирования используется линия IRQ2 ведущей микросхемы (в результате ошибок проектирования линии прерываний были распределены достаточно произвольным образом).

Каждому приоритетному уровню прерывания контроллер 8259 ставит в соответствие определенный, задаваемый программно, номер прерывания. Ведомой микросхеме программным методом присваивается код, равный номеру входа IRQ ведущей микросхемы, с которым соединен выход запроса прерывания INT ведомой микросхемы. Внутри микросхемы приоритет зависит от номера IRQ и задается программно.

                           ------------------¬
IRQ0 (таймер) ----+ ¦
IRQ1 (клавиатура) ----+ ¦
IRQ2 (каскадирование) --+ ¦ К шине
IRQ3 (порт COM2) --+-+ Ведущий ¦ INT управления
IRQ4 (порт COM1) --+-+ контроллер +----------------->
IRQ5 (резерв) --+-+ ¦ процессора
IRQ6 (кондроллер НГМД) --+-+ ¦
IRQ7 (принтер) --+-+ ¦
¦ L-T------T------T--
¦ ¦CAS0 ¦CAS1 ¦CAS2
L---+------+------+---------¬
¦ ¦ ¦ ¦
v v v ¦
------------------¬ ¦ ----+ ¦ ¦
IRQ9 (контроллер EGA) ----+ ¦ ¦
IRQ10 (резерв) ----+ ¦ ¦
IRQ11 (резерв) ----+ Ведомый ¦ INT ¦
IRQ12 (резерв) ----+ контроллер +--------
IRQ13 (сопроцессор) ----+ ¦
IRQ14 (НЖМД) ----+ ¦
IRQ15 (резерв) ----+ ¦
L------------------

Приоритеты прерываний распределены в следующем порядке (по убыванию приоритета):

IRQ0  - прерывание таймера;
IRQ1 - прерывание от клавиатуры;
IRQ8 - прерывание от часов реального времени;
IRQ9 - прерывание от контроллер EGA;
IRQ10 - зарезервированная линия;
IRQ11 - зарезервированная линия;
IRQ12 - зарезервированная линия;
IRQ13 - прерывание от математического сопроцессора;
IRQ14 - прерывание от контроллера жестких дисков;
IRQ15 - зарезервированная линия;
IRQ3 - прерывание от последовательного порта COM2;
IRQ4 - прерывание от последовательного порта COM1;
IRQ5 - зарезервированная линия;
IRQ6 - прерывание от контроллера гибких дисков;
IRQ7 - прерывание от параллельного порта (от принтера).

Часть линий прерываний жестко закреплена за устройствами определенных типов, а другая часть находится в полном распоряжении пользователя. Возможность свободного использования зарезервированных линий создает определенные проблемы, называемые конфликтами прерываний. Такой конфликт может возникнуть в результате ошибки пользователя в процессе установки контроллера какого-либо нового устройства: может возникнуть ситуация, когда два контроллера посылают запросы прерываний на одну и ту же линию, и процессор не знает, какое из устройств послало сигнал. Для предотвращения конфликта перед установкой нового устройства необходимо использовать специальную программу, которая определяет, какие из линий прерываний в системе свободны, а затем настроить новый контроллер на одну из свободных линий путем соответствующей установки переключателей на контроллере.

Имеется два типа команд, посылаемых программой в контроллер 8259 - команды инициализации и команды операции. Возможны следующие операции:

- индивидуальное маскирование запросов прерывания;

- специальное маскирование обслуженных запросов;

- установка статуса уровней приоритета (по установке исходного состояния, по обслуженному запросу, по указанию);

- операции конца прерывания (обычный конец, специальный конец, автоматический конец);

- чтение регистров IRR, ISR, IMR.

Команды операций бывают трех типов:

- маскирование запросов прерывания;
- команды обработки конца прерывания;
- опрос регистров и специальное маскирование.

Байты команды маскирования запросов прерывания выводятся соответственно в порты 21h и A1h для ведущего и ведомого контроллеров. Команды операций второго и третьего типа используют порты с адресами 20h (ведущий) и A0h (ведомый).

Разряды регистра маски прерываний соответствуют номерам IRQ.

Для того, чтобы замаскировать (запретить) аппаратное прерывание какого-либо уровня, надо заслать в регистр маски байт, в котором бит, соответствующий этому уровню, установлен в 1. Например, для маскирования НГМД в порт 21h надо заслать двоичное число 01000000b.

Из всего списка команд контроллера 8259 программисту обычно необходима только команда "Обычный конец прерывания" с кодом 20h.

Если написанная вами программа содержит обработчик аппаратного прерывания, полностью заменяющий собой стандартный обработчик BIOS, этот обработчик (после завершения обработки прерывания) должен выдавать команду "Обычный конец прерывания" 20h в порт 20h, и при необходимости, такую же команду в порт A0h (если номер прерывания больше 7). Если же ваша программа просто перехватывает прерывание, а затем передает управление стандартному обработчику BIOS, то команды завершения прерывания будет посылать этот обработчик.

ПОРТ ПОСЛЕДОВАТЕЛЬНОЙ ПЕРЕДАЧИ ДАННЫХХ

Порт последовательной передачи данных RS-232-C (асинхронный адаптер) предназначен для подключения к ПЭВМ IBM PC/AT низкоскоростных периферийных устройств, работающих со скоростями передачи данных не выше 115200 бит/с (14400 байт/с), к которым относятся:

- манипуляторы типа "мышь";
- графопостроители;
- ручные сканеры;
- принтеры;
- модедемы.

При использовании метода последовательной передачи данных данные и синхронизирующая информация передаются по одной линии последовательно во времени (по одному биту). Синхронизация необходима, так как частоты задающих генераторов приемника и передатчика не совпадают даже при использовании кварцевых резонаторов (расхождение может составлять доли процента).

Для синхрониза группе информационных битов обычно предшествует специальный "стартовый" бит. Для контроля правильности передачи данных после группы информационных битов передается бит проверки на четность (P). Завершают посылку один или два стоповых бита.

           START
¦ 0 1 2 3 4 5 6 7 -
L---+---+---+---+---+---+---+---+---+---+---+----

Использование (или неиспользование) бита четности, число информационных, стартовых и стоповых битов определяет протокол передачи данных.

РЕГИСТРЫ ПОРТА ПОСЛЕДОВАТЕЛЬНОЙ ПЕРЕДАЧИ ДАННЫХ

ПЭВМ IBM AT в стандартной конфигурации имеет один или два порта последовательной передачи данных. Порт N1 имеет кодовое обозначение COM1 и базовый адрес 3F8h (занимает пространство адресов от 3F8h до 3FFh). Порт COM1 вырабатывает прерывание IRQ4 (INT 0Ch). Порт N2 обозначается COM2, занимает пространство адресов от 2F8h до 2FFh и вырабатывает прерывание IRQ3 (INT 0Bh).

Порт 3F8h (2F8h) - этот адрес разделяют два регистра:

1) регистр данных (при передаче в него записываются, а при приеме из него считываются байты данных).

2) регистр младшего байта делителя частоты.

Порт 3F9h (2F9h) - этот адрес разделяют два регистра:

1) регистр управления прерываниями:

- если бит 0 установлен в 1, разрешено прерывание при поступлении байта данных;

- если бит 1 установлен в 1, разрешено прерывание при завершении передачи байта данных;

- если бит 2 установлен в 1, разрешено прерывание по ошибке;

- если бит 3 установлен в 1, разрешено прерывание по сигналу от модема;

- биты 4-7 не используются и должны быть установлены в 0.

2) регистр старшего байта делителя частоты.

Порт 3FAh (2FAh) - регистр идентификации прерывания:

- если бит 0 установлен в 1, то это означает наличие сигнала прерывания;

- биты 1 и 2 идентифицируют источник сигнала прерывания:

00 - изменилось состояние модема;

01 - завершилась передача байта;

10 - завершен прием байта;

11 - ошибка при приеме данных.

- биты 3 - 7 не используются (установлены в 0).

Порт 3FBh (2FBh) - регистр управления:

- биты 0 и 1 задают длину передаваемого слова в битах: (00 5 бит, 01 - 6 бит, 10 - 7 бит, 11 - 8 бит);

- бит 2 определяет число стоповых битов (0 - 1 бит, 1 - 2 бита);

- биты 3 определяет наличие контроля по четности (0 - нет контроля, 1 - есть контроль);

- бит 4 определяет тип контроля (0 - контроль на нечетность, 1 - на четность);

- бит 5 при установке в 1 блокирует контроль по четности;

- бит 6 - выдает на линию передачи сигнал "Обрыв линии";

- бит 7 управляет регистрами 3F8h и 3F9h: при установке в 1 этого бита данные регистры используются для загрузки делителя частоты тактового генератора, а при 0 - как регистр данных и регистр управления прерываниями соответственно.

Порт 3FCh (2FCh) - регистр управления модемом:

- бит 0 - готовность выходных данных (при 1 данные готовы);

- бит 1 - готовность к приему данных;

- биты 2 и 3 - сигналы OUT1 и OUT2 для модема;

- бит 4 - запуск самотестирования контроллера последовательного порта;

- биты 5-7 не используются и должны быть установлены в 0.

Порт 3FDh (2FDh) - регистр состояния линии связи:

- бит 0 устанавливается в 1, когда данные получены и готовы для считывания, и сбрасывается при чтении данных из регистра 3F8h;

- бит 1 устанавливается при ошибке переполнения приемника (в приемник поступил новый байт, когда предыдущий еще не был считан);

- бит 2 устанавливается при обнаружении ошибки по четности;

- бит 3 устанавливается при обнаружении ошибки синхронизации;

- бит 4 устанавливается при обнаружении сигнала "Разрыв линии";

- бит 5 устанавливается в 1, когда завершена передача байта данных и в передатчик можно записывать новый байт;

- бит 6 устанавливается в 1, когда регистр сдвига передатчика пуст;

- бит 7 устанавливается при обнаружении сигнала "Тайм-аут".

Порт 3FEh (2FEh) - регистр состояния модема.