Letysite.ru

IT Новости с интернет пространства
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программируемый контроллер прерываний

Компьютерная Энциклопедия

Архитектура ЭВМ

Компоненты ПК

Интерфейсы

Мини блог

Самое читаемое

Ввод-вывод

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

На наш взгляд, знакомство с системой прерываний микропроцессора Intel следует начать с обсуждения организации обработки аппаратных прерываний. Как видно из рис. 15.1, центральное место в схеме обработки аппаратных прерываний занимает программируемый контроллер прерываний (ПКП), выполненный в виде специальной микросхемы i8259А. Как мы уже говорили, эта микросхема может обрабатывать запросы от восьми источников внешних прерываний. Этого явно мало, поэтому в стандартной конфигурации вычислительной системы обычно используют две последовательно соединенные микросхемы i8259A. В результате такого соединения количество возможных источников внешних прерываний возрастает до 15.
Для того чтобы разобраться с обработкой аппаратных прерываний, нам придется проникнуть внутрь микросхемы i8259A. Перечислим функции, выполняемые микросхемой контроллера прерываний:

  • фиксирование запросов на обработку прерывания от восьми источников, формирование единого запроса на прерывание и подача его на вход INTR микропроцессора;
  • формирование номера вектора прерывания и выдача его на шину данных;
  • организация приоритетной обработки прерываний;
  • запрещение (маскирование) прерываний с определенными номерами.

На рисунке ниже показано схематическое представление внутренней структуры и физических выводов микросхемы i8259А.

Рассмотрим назначение представляющих для нас интерес выводов i8259А:

  • d0. d7 — выводы i8259A, замыкающиеся на системную шину данных. По ним передается номер вектора прерывания и принимается управляющая информация;
  • INT — вывод выходного сигнала запроса на прерывание, который подается на вход микропроцессора INTR;
  • INTA — вывод для сигнала от микропроцессора, подтверждающего факт принятия им прерывания на обслуживание;
  • irq0. irq7 — выводы для входных сигналов запросов на прерывания от внешних устройств.

Важное свойство данного контроллера — возможность его программирования, что позволяет достаточно гибко изменять алгоритмы обработки аппаратных прерываний. Исходя из этого, микросхема i8259А имеет два состояния:

  • состояние настройки параметров обслуживания прерываний, во время которого путем посылки в определенном порядке так называемых управляющих слов производится инициализация контроллера;
  • состояние работы — это обычное состояние контроллера, в котором производится фиксация запросов на прерывание и формирование управляющей информации для микропроцессора в соответствии с параметрами настройки.

Рассмотрим назначение основных структурных компонентов контроллера прерываний (см. рис. 15.2):

  • регистр запросов на прерыванияIRR (Interrupt Request Register) — восьмиразрядный регистр, фиксирующий поступление сигнала на один из входов i8259А — irq0. irq7. Фиксация выражается в установке соответствующего бита в единичное состояние;
  • регистр маскирования прерыванийIMR (Interrupt Mask Register) — восьмиразрядный регистр, с помощью которого можно запретить обработку запросов на прерывания, поступающих на соответствующие входы (уровни) irq0. irq_7. Для запрещения (маскирования) определенных уровней прерываний необходимо установить соответствующие биты регистра IMR. Эта операция осуществляется путем программирования порта 21h;
  • регистр обслуживаемых прерыванийISR (Interrupt Service Register) — восьмиразрядный регистр, единичное состояние разрядов которого показывает, прерывания каких уровней обрабатываются в данный момент в микропроцессоре;
  • арбитр приоритетовPR (Priority Resolver) — функцией данного блока является разрешение конфликта при одновременном поступлении запросов на входы irq0. irq7;
  • блок управления — основной функцией данного блока является организация информационного обмена контроллера прерываний и микропроцессора через шину данных. На этот блок замыкаются как выводы d0. d7, так и некоторые другие (см. рис. 15.2).

Рассмотрим возможные прохождение и обработку сигнала прерывания от некоторого внешнего устройства. При этом воспользуемся структурной схемой контроллера прерываний и обозначениями на ней (см. рис. 15.2).
Допустим, на вход irq0 поступает сигнал прерывания, что приводит к установке нулевого бита регистра IRR. Этот регистр связан с регистром маски IMR, состояние битов которого определяет, какие уровни прерываний запрещены (единичные биты) или разрешены к обработке (нулевые биты). Управление данным регистром осуществляется через порт 21h. Таким образом, если бит 0 в IMR равен нулю, то прерывание уровня 0 разрешено. Далее сигнал поступает к арбитру приоритетов. Как мы уже отметили, функция этого блока — разрешение конфликтов при одновременном поступлении запросов на несколько уровней. Обычно самый высокий приоритет у уровня irq_0, и далее приоритет уменьшается с возрастанием номера уровня. Если конфликта нет, то сигнал поступает на схему управления контроллером прерываний, которая формирует сигнал на выводе int. Этот вывод связан со входом микропроцессора INTR. Таким образом, сигнал на входе i8259A достиг микропроцессора. Что происходит далее в микропроцессоре, мы рассмотрим ниже. Сейчас отметим только значимые для данного обсуждения моменты. Итак, при поступлении сигнала на вход INTR в микропроцессоре происходят следующие процессы:

  1. Анализируется флаг IF. Если вы помните, единичное состояние этого флага говорит о том, что аппаратные прерывания разрешены, нулевое — запрещены.
  2. Если прерывания запрещены, то запрос на прерывание «повисает» до момента установки IF в единицу.
  3. Если прерывания разрешены, микропроцессор выполняет следующие действия:
    • сбрасывает флаг IF в ноль;
    • формирует сигнал подтверждения прерывания на выводе микропроцессора INTA. Этот вывод микропроцессора замкнут на одноименный вывод микросхемы i8259A.

Таким образом, сигнал о прерывании прошел через микропроцессор и вернулся обратно в контроллер прерываний i8259A через вывод INTA. Данный вывод внутри контроллера прерываний замкнут на его схему управления, которая выполняет сразу несколько действий при поступлении этого сигнала:

  1. Сбрасывает бит в регистре IRR, соответствующий уровню прерывания irq_0.
  2. Устанавливает в 1 бит 0 регистра ISR, тем самым фиксируя факт обработки прерывания уровня 0 в микропроцессоре.
  3. Формирует с помощью блока управления номер вектора прерывания, значение которого формируется в буфере данных и далее поступает на выводы i8259A d0. d7. Выводы d0. d7 замкнуты на шину данных, по которой номер вектора поступает в микропроцессор. В микропроцессоре этот номер используется для вызова соответствующей процедуры обработки прерывания.

На данном этапе обработки прерывания, после того как номер прерывания по шине данных поступил в микропроцессор, последнему стало известно все об источнике прерывания. Далее микропроцессор осуществляет процедуру обработки прерывания. Если в это время придет другой сигнал о прерывании того же уровня, то он будет запомнен установкой бита в IRR, и обслуживание этого прерывания будет отложено. Если приходит прерывание другого уровня, то его дальнейшая обработка зависит от приоритета, который оно имеет по отношению к уже обрабатываемым прерываниям. Если приоритет выше, то текущая процедура обработки прерывания останавливается, и вызывается процедура обработки более приоритетного прерывания.
Очень важный момент связан с процессом завершения обработки прерывания. Проблема здесь состоит в следующем. После принятия микропроцессором запроса на обслуживание прерывания в контроллере устанавливается бит в регистре ISR, номер этого бита соответствует уровню прерывания. Установка бита с данным номером блокирует все прерывания уровня, начиная с текущего, и менее приоритетные в блоке-арбитре приоритетов. Если процедура прерывания закончит свою работу, то она сама должна этот бит сбросить, иначе все прерывания этого уровня и менее приоритетные будут игнорироваться. Для осуществления такого сброса необходимо послать код 20h в порт 20h. Есть и другая возможность — установить такой режим работы микросхемы i8259A, когда сброс этого бита будет производиться автоматически. Тонкий момент заключается в том, что происходить такой автоматический сброс будет одновременно с приходом сигнала INTA (то есть извещения о том, что запрос на обработку прерывания принят к обработке микропроцессором). Недостаток автоматического сброса в том, что существует вероятность прихода прерывания того же уровня, который уже обрабатывается в данный момент микропроцессором. В этом случае процедура обработки прерывания должна обладать свойством реентерабельности, то есть допускать повторное обращение к себе до завершения обработки предыдущего обращения. Для того чтобы процедура была реентерабельной, она должна иметь специфическую структуру, в частности, для каждого сеанса обращения к ней создается своя область для хранения переменных и значений регистров, а исполняемая часть процедуры находится в оперативной памяти только в одном экземпляре. Иногда может потребоваться подобный автоматический сброс, но надежнее и проще, конечно, контролировать этот процесс и самостоятельно сбрасывать бит в ISR. Это можно сделать либо в конце работы процедуры, либо в том месте процедуры, начиная с которого можно разрешить рекурсивный вызов данной процедуры, будучи уверенным в том, что она не разрушит никаких данных и работу программы в целом.
Другой не менее интересный момент заключается в том, что микропроцессор при принятии к обработке запроса на прерывание сбросил флаг IF в ноль, тем самым запретив все последующие аппаратные прерывания. Этим обстоятельством программист может пользоваться по своему усмотрению. Вы, конечно, помните, что все запросы на прерывания с приоритетом, равным текущему или меньшим, будут запрещены в любом случае, — это обусловлено логикой работы контроллера i8259A. Поэтому программист должен решить, насколько его замыслам могут помешать запросы на более приоритетные прерывания. Если это некритично, то лучше сразу, в начале процедуры обработки прерывания установить флаг IF в единицу. В большинстве случаев эту операцию нужно делать как можно раньше. Для установки флага IF в единицу в системе команд микропроцессора есть специальная команда, не имеющая операндов:

Читать еще:  Машинно ориентированный язык программирования

sti — разрешить аппаратные прерывания.

Наиболее наглядный пример, показывающий важность своевременной установки IF, связан с отсчетом времени. Если вы не знакомы с тем, как ведется учет времени в компьютере, то уделим этому немного внимания. Как после включения компьютер определяет текущее время суток или как он запоминает информацию о своей конфигурации после выключения? Все дело в том, что компьютер имеет небольшую энергонезависимую память, которая питается от аккумулятора и не зависит от подключения к электросети. Конструктивно эта память выполнена на специальном типе полупроводниковых элементов с так называемой CMOS-структурой (Complementar Metal Oxide Semiconductor — комплиментарная МОП-структура). Особенность таких элементов памяти — в их пониженной по сравнению с обычными микросхемами потребляемой мощности (при этом они являются и более медленными, что в данном случае непринципиально). Аккумулятор кроме CMOS-памяти питает еще и микросхему системных часов, в функции которой входит отсчет текущих даты и времени суток. Таким образом, текущие значения даты и времени постоянно хранятся в CMOS-памяти и поддерживаются в актуальном состоянии даже после выключения компьютера. Кроме того, в CMOS-памяти хранится некоторая другая информация, в частности, о конфигурации компьютера. Во время загрузки компьютера дата и время считываются в область данных BIOS. Дальнейший отсчет времени, после загрузки системы, ведется уже с помощью системного таймера — другой микросхемы на системной плате, в функции которой входит регулярно, примерно 18,2 раза в секунду, генерировать сигнал, который в качестве прерывания подается на уровень irq0 контроллера прерываний i8259A. Во время работы компьютера соответствующая программа BIOS обрабатывает прерывание данного уровня и ведет счет времени. Если терять такты по этому входу, то фактическое время на часах будет отставать, и поэтому в большинстве случаев в обработчиках прерываний есть смысл как можно раньше выдавать команду sti.

Методика программирования контроллера прерываний

Технические характеристики БИС Intel 8259A.

Реализация многоуровневых ВП в ЭВМ семейства IBM.

Для Реализация многоуровневых ВП в ЭВМ семейства IBM применена БИС Intel 8259A.

1. Число уровней ЗП = 8.

2. Количество уровней можно расширить до 64 за счет каскадного включения микросхем

3. Режим обслуживания ЗП, уровни приоритетов, АВП устанавливаются программным путем.

6.7 Программируемые режимы обслуживания ВУ.

1. Режим вложенные прерывания.

Входы для ЗП: IRi,. Каждому из входов присваивается приоритет IR0, IR1, …IR7 в порядке убывания ЗП с большим приоритетом могут прерывать обслуживание ЗП с меньшим приоритетом.

2. Круговые циклические приоритеты.

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

3. Адресуемые приоритеты.

Аналогично п. 2, но допускает программное указание входа, которому назначается самый низкий приоритет.

В этом режиме ЦП не реагирует на ЗП (прерывания запрещены). ВУ, требующее обслуживания, определяется чтением состояния ПКП (т.е. опрос состояния контроллера).

5. Незамаскированные запросы прерываний обслуживаются в порядке их поступления.

6.8 Схема включения ПКП к системной шине ВУ.

Рис. 6.7 Схема включения ПКП к системной шине и ВУ.

Назначение выводов БИС:

D7-D0 – выводы ШД, служат для приема управляющее информации от ЦП и передачи статусной информации в ЦП.

A0 – адресный вход, адресация внутренних регистров контроллера (2 адреса).

CS (chip select) — выбор кристалла, разрешает или запрещает связь контроллера с системной шиной.

CS = 0 – есть связь,

CS = 1 – нет связи.

Первый ПКП использует адреса – 20h, 21h.

Второй ПКП использует адреса – A0h, A1h.

WR – ввод, вывод (сигналы ШУ), соединяются с линиями магистрали

INT (выход) – сигнал ЗП в ЦП.

INTA (interrupt acknowledge) – сигнал РП от ЦП.

CAS2, CAS1, CAS0 – шина каскадирования. Для ведущего контроллера прерывания эти линии являются выходами, а для ведомого – входами.

EN – указывает ведущий (1) или ведомый (0) ПКП.

IR0. IR7 – входы запросов прерывания от ВУ.

6.9 Аппаратные прерывания в порядке их приоритетов и назначения.

6.10 Функциональный состав ПКП и его программная модель

Рис. 6.8 Программируемый контроллер прерываний в ЭВМ семейства IBM PC.

IRR – Interrupt Request Register – регистр запросов прерываний,

IMR – Interrupt Mask Register – регистр масок прерываний,

ISR – Interrupt Service Register регистр обслуживаемых запросов,

PR – Priority Resolver – шифратор приоритетов.

IRR:

— фиксирует ЗП на входах IR0-IR7 от ВУ. К каждому входу можно подключить одно ВУ.

IRi=1, если на входе IRi появляется ЗП.

— Входные цепи могут программироваться на восприятие уровня или фронта сигнала.

IMR:

— Служит для маскирования или разрешения ЗП на отдельных входах.

— Если IMi=1, то сигнал на входе IRi не обслуживается.

— Маскирование входа IRi не запрещает прерывание на остальных входах..

ISR:

— Хранит запросы, обслуживаемые ЦП.

— На время обслуживания IRi ЦП, бит ISi устанавливается в 1.

— Если ISi = 1, то прерывания от этого входа и входов с меньшими приоритетами запрещены.

— Этот бит должна сбросить программа обслуживания прерывания по завершению работы или в процессе обслуживания ВУ.

PR:

— Анализирует содержимое предыдущих трех регистров и определяет необходимость генерировать сигнал ЗП (INT) в ЦП,т.е. реализует схему учета приоритетов и формирования АВП.

6.11 Алгоритм работы ПКП.

Начальная инициализация подразумевает установку всех параметров:

1. Количество ПКП в системе: один или несколько.

2. АВП (номера типов прерываний).

3. Режим обслуживания ВУ.

Инициализация выполняется специальными командами записи приказов инициализации в регистр ПКП и не должна прерываться. В ЭВМ семейства IBM PC инициализация выполняется BIOS (basic input/output system — базовая система ввода-вывода), которая устанавливает режим вложенных прерываний, АВП, ПКП1 объявляет ведущим, ПКП2 – ведомым.

При появлении сигнала ЗП от какого-либо ВУ, ПКП выполняет следующие действия:

1. Запрос на входе IRi фиксируется в регистре IRR.

2. Установленный в 1 бит IRi сравнивается с соответствующим битом IMi. Если

a) IMi = 1 → запрос IRi не обслуживается.

b) IMi = 0 → запрос IRi передается в PR.

3. PR сравнивает приоритет IRi с приоритетами ЗП, обслуживаемыми в данный момент времени ЦП.

a) Если биты регистра ISR с большим приоритетом = 1, то дальнейшее обслуживание запроса не выполняется.

b) Если биты регистра ISR с большим приоритетами сброшены в 0, то ПКП формирует ЗП (INT) в ЦП.

4. ЦП проверяет бит IF (Interrupt Flag) в регистре флагов (Flags):

a) Если IF = 0, запрос не обслуживается, пока IF не будет установлен в единицу.

b) Если IF = 1, то по завершению текущей команды ЦП сбрасывает IF=0 и возвращает сигнал в ПКП по линии INTA в виде двух последовательных импульсов.

5. ПКП при первом импульсе INTA запрещает сигналы на входах IRR до второго импульса INTA. Сбрасывает бит IRi = 0 и устанавливает бит ISi = 1.

6. ПКП при втором импульсе INTA ЦП разрешает сигналы на входах регистра IRR и на ШД устанавливает номер типа прерывания.

7. ЦП считывает с ШД код номера типа прерывания и приступает к обслуживанию устройства.

Если поступает сигнал с большим приоритетом, ЦП не реагирует на сигнал INT при сброшенном IF. Поэтому любая оперативная программа должна устанавливать IF=1, как только это становится возможным, чтобы установить режим вложенных прерываний.

Чтобы повторить процедуру прерывания, то входа IRi необходимо сигнал на входе IRi перевести в неактивное состояние.

Если какой-то вход IRк замаскирован соответствующим битом IMк, то запрос не обрабатывается ПКП.

Читать еще:  Особенности языков программирования высокого уровня

Если программа сбрасывает IMк=0, ПКП распознает активный запрос и начинает его обслуживать.

6.12 Схема каскадирования контроллеров прерывания.

Каскадирование позволяет объединить несколько контроллеров для расширения числа ЗП.

При этом один ПКП работает как ведущий, а до 8 ПКП могут работать ведомыми.

Сигнал INT ведомого ПКП подается на один из входов ведущего (IRi). Если IMR и ISR не блокируют сигнал, то он поступает на вход ЦП по линии INT ведущего.

Когда ЦП возвращает INTA, ведущий ПКП проверяет, возникло ли его собственное прерывание или от ведомого. Если прерывание от ведомого, то на шину ведущий на шину каскадирования выдает код, соответствующий входу, к которому подключен ведомый.

Рис. 6.9 Схема каскадирования контроллера прерывания.

Программируемые контроллеры прерываний (Лекция)

1. Вложенные прерывания с фиксированными приоритетами входов

2. Прерывания с круговым (циклическим) приоритетом

3. Специальное маскирование

4. Структура программируемого контроллера прерываний

При работе микропроцессорной системы в ней или внешней среде происходят события, требующие немедленной реакции, что обеспечивается прерыванием выполняемых программ и переходом к обслуживанию запросов прерывания. Аппаратно прерывания обслуживаются специализированными ИС, простейшими из которых являются блоки приоритетного прерывания ( Intel 8214, К589ИК14 и др.). Эти блоки решают несложные задачи обработки нескольких векторных прерываний при фиксированных приоритетах запросов. Более сложные задачи решаются программируемыми контроллерами прерываний (ПКП), в частности ИС Intel 8259 A , К1810ВН59. Эти контроллеры непосредственно реализуют прерывания с обработкой 8 запросов. С помощью нескольких ПКП легко организуются устройства обработки до 64 запросов. Контроллеры обеспечивают различные виды прерываний. Система прерываний должна выдать команду перехода к той подпрограмме обслуживания, которая соответствует признанному запросу. Контроллер ВН59 обеспечивает различные виды прерываний:

1. Вложенные прерывания с фиксированными приоритетами входов

Имеются 8 входов запроса прерывания IR 7. IR 0 (от английского Interrupt Request ). Высший приоритет имеет вход IR 0, низший — у входа IR 7. Вложенность — возможность прерывания подпрограммы обслуживания запроса другой подпрограммой с более высоким приоритетом, которая, в свою очередь, также может быть прервана более приоритетной подпрограммой и т.д. Возможность вложенных прерываний обеспечивается введением команды EI ( Enable Interrupt ) в подпрограммы обслуживания прерываний. Прерывания с фиксированными приоритетами реализуются просто, но запросы неравноправные и при интенсивном поступлении запросов с высокими приоритетами запросы с низкими приоритетами могут вообще не получить обслуживания.

2. Прерывания с круговым (циклическим) приоритетом

В этом случае у каждого входа тоже есть свой приоритет, но после обслуживания он изменяется в круговом порядке так, что обслуженный вход получает низший приоритет. Такая дисциплина обслуживания характерна для ситуации с источниками, не имеющими преимуще ств др уг перед другом. Запрашивающее обслуживания устройство будет ждать в худшем случае до того, как 7 других источников будут обслужены по одному разу. Работу с круговым приоритетом можно иллюстрировать примером (Рисунок 45), в котором регистр запросов вначале содержит 6-й и 4-й запросы, т.е. наивысший приоритет имеет 4-й запрос, который и будет обслужен. После обслуживания приоритетность входов изменяется как бы вращением кольца, причем номер 7 с низшим приоритетом становится на 4-ю позицию только что обслуженного запроса. Позицию низшего приоритета называют дном приоритетного кольца. Контроллерами реализуется маскирование запросов, когда запрещается их восприятие с помощью соответствующих битов регистра маски. При этом могут быть реализованы разные ситуации. Обычное маскирование. Маскирование какого-либо запроса ведет и к маскированию других запросов с меньшими приоритетами.

3. Специальное маскирование

Происходит блокирование восприятия только одного входа запросов при отсутствии маскирования младших по приоритету. После снятия маски обслуживание запросов становится возможным.

Рис. Пример обслуживания запросов прерывания с круговым приоритетом

Включение контроллера прерываний в систему показано на рисунке ниже. Контроллер принимает запросы от внешних устройств, определяет, какой из незамаскированных запросов имеет наивысший приоритет, сравнивает его с приоритетом текущей программы и при соответствующих условиях выдает запрос прерывания INT для МП. После подтверждения запроса МП должен получить от контроллера информацию, которая укажет на подпрограмму, соответствующую данному ВУ, т.е. вектор прерывания.

Рис. Схема включения контроллера прерываний в микропроцессорную систему

4. Структура программируемого контроллера прерываний

Структура ПКП Intel 8259 A представлена на рисунке 47. В английской терминологии ПКП называют PIC , т.е. Programmable Interrupt Controller . Запросы прерываний от ВУ поступают на регистр запросов IRR , сохраняющий запросы до их принятия на обслуживание. Биты регистра IRR сопоставляются с битами регистра масок IMR ( Interrupt Mask Register ).

Рис. Структура программируемого контроллера прерываний

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

Если приоритет запроса выше текущего приоритета, то при вложенных прерываниях формируется сигнал INT для процессора. При поступлении от процессора сигнала подтверждения прерывания INTA принятый запрос переходит в регистр обслуживания ISR ( Interrupt Servicing Register ) и сбрасывается в регистре запросов IRR . Установка бита ISR запрещает прерывания от всех других запросов с меньшими приоритетами. Подпрограмма обслуживания прерывания завершается сбросом бита регистра ISR .

Можно также обслуживать прерывания по результатам опроса источников запросов, когда сигнал INT не используется, и процессор сам производит поочередный опрос входов, начиная со старшего по приоритету. Обнаружение запроса ведет к его обслуживанию с переходом на соответствующую подпрограмму.

Буфер ШД восьмиразрядный, двунаправленный, с третьим состоянием. При программировании контроллера через него передаются управляющие слова, и считывается состояние регистров, а также код запроса, выработавшего сигнал INT . При обслуживании прерывания по сигналу INTA через буфер ШД в шину данных системы выдается трехбайтная команда вызова подпрограммы CALL .

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

Сигналы IR 0. IR 7 — входы запросов прерывания ( Interrupt Requests ), A 0- младший разряд адреса, показывает, к какому регистру управляющих слов (УСИ или УСО) обращается процессор. Сигналы CAS 2-0 связаны с работой контроллера в групповой схеме, образуют выходную шину для ведущего контроллера и входную для ведомых . Сигнал ( ) двухфункциональный , как он определяет, является ли контроллер ведущим или ведомым в групповой схеме, как используется в так называемом буферизованном режиме для разрешения выхода на шину системы, т.е. для управления выходными буферами участников обмена.

Программируемый контроллер прерываний.

1 Место программируемого контроллера прерываний в системе.

2 Структура программируемого контроллера прерываний.

Программируемый контроллер прерываний (Programmable Interrupt Controller, PIC) отвечает за приём запросов прерываний от различных устройств, их хранение в ожидании обработки, выделение наиболее приоритетного из одновременно присутствующих запросов и выдачу его вектора в процессор, когда последний пожелает обработать прерывание. Слово «программируемый» в названии контроллера означает, что режимы его работы устанавливаются программно, а не являются жёстко «зашитыми».

Центральное место в схеме обработки аппаратных прерываний занимает программируемый контроллер прерываний (ПКП), выполненный в виде специальной микросхемы i8259А. Как мы уже говорили, эта микросхема может обрабатывать запросы от восьми источников внешних прерываний. Этого явно мало, поэтому в стандартной конфигурации вычислительной системы обычно используют две последовательно соединенные микросхемы i8259A. В результате такого соединения количество возможных источников внешних прерываний возрастает до 15.
Для того чтобы разобраться с обработкой аппаратных прерываний, нам придется проникнуть внутрь микросхемы i8259A. Перечислим функции, выполняемые микросхемой контроллера прерываний:

На рисунке показано схематическое представление внутренней структуры и физических выводов микросхемы i8259А.


Рисунок Структурная схема и схематическое представление выводов i8259A

  • d0. d7 — выводы i8259A, замыкающиеся на системную шину данных. По ним передается номер вектора прерывания и принимается управляющая информация;
  • INT — вывод выходного сигнала запроса на прерывание, который подается на вход микропроцессора INTR;
  • INTA— вывод для сигнала от микропроцессора, подтверждающего факт принятия им прерывания на обслуживание;
  • irq0. irq7 — выводы для входных сигналов запросов на прерывания от внешних устройств.

Рассмотрим назначение основных структурных компонентов контроллера прерываний (см. рис. 15.2):

Рассмотрим возможные прохождение и обработку сигнала прерывания от некоторого внешнего устройства. При этом воспользуемся структурной схемой контроллера прерываний и обозначениями на ней (см. рис. 15.2).
Допустим, на вход irq0поступает сигнал прерывания, что приводит к установке нулевого бита регистра IRR. Этот регистр связан с регистром маски IMR, состояние битов которого определяет, какие уровни прерываний запрещены (единичные биты) или разрешены к обработке (нулевые биты). Управление данным регистром осуществляется через порт 21h. Таким образом, если бит 0 в IMRравен нулю, то прерывание уровня 0 разрешено. Далее сигнал поступает к арбитру приоритетов. Как мы уже отметили, функция этого блока — разрешение конфликтов при одновременном поступлении запросов на несколько уровней. Обычно самый высокий приоритет у уровня irq_0, и далее приоритет уменьшается с возрастанием номера уровня. Если конфликта нет, то сигнал поступает на схему управления контроллером прерываний, которая формирует сигнал на выводе int. Этот вывод связан со входом микропроцессора INTR. Таким образом, сигнал на входе i8259A достиг микропроцессора. Что происходит далее в микропроцессоре, мы рассмотрим ниже. Сейчас отметим только значимые для данного обсуждения моменты. Итак, при поступлении сигнала на вход INTR в микропроцессоре происходят следующие процессы:

  1. Анализируется флаг IF. Если вы помните, единичное состояние этого флага говорит о том, что аппаратные прерывания разрешены, нулевое — запрещены.
  2. Если прерывания запрещены, то запрос на прерывание «повисает» до момента установки IFв единицу.
  3. Если прерывания разрешены, микропроцессор выполняет следующие действия:
    • сбрасывает флаг IF в ноль;
    • формирует сигнал подтверждения прерывания на выводе микропроцессора INTA. Этот вывод микропроцессора замкнут на одноименный вывод микросхемы i8259A.
Читать еще:  Первые языки программирования

Таким образом, сигнал о прерывании прошел через микропроцессор и вернулся обратно в контроллер прерываний i8259A через вывод INTA. Данный вывод внутри контроллера прерываний замкнут на его схему управления, которая выполняет сразу несколько действий при поступлении этого сигнала:

  1. Сбрасывает бит в регистре IRR, соответствующий уровню прерывания irq_0.
  2. Устанавливает в 1 бит 0 регистра ISR, тем самым фиксируя факт обработки прерывания уровня 0 в микропроцессоре.
  3. Формирует с помощью блока управления номер вектора прерывания, значение которого формируется в буфере данных и далее поступает на выводы i8259A d0. d7. Выводы d0. d7 замкнуты на шину данных, по которой номер вектора поступает в микропроцессор. В микропроцессоре этот номер используется для вызова соответствующей процедуры обработки прерывания.

На данном этапе обработки прерывания, после того как номер прерывания по шине данных поступил в микропроцессор, последнему стало известно все об источнике прерывания. Далее микропроцессор осуществляет процедуру обработки прерывания. Если в это время придет другой сигнал о прерывании того же уровня, то он будет запомнен установкой бита в IRR, и обслуживание этого прерывания будет отложено. Если приходит прерывание другого уровня, то его дальнейшая обработка зависит от приоритета, который оно имеет по отношению к уже обрабатываемым прерываниям. Если приоритет выше, то текущая процедура обработки прерывания останавливается, и вызывается процедура обработки более приоритетного прерывания.
Для установки флага IF в единицу в системе команд микропроцессора есть специальная команда, не имеющая операндов:

sti — разрешить аппаратные прерывания.

Аппаратное обеспечение IBM PC

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

Программируемый контроллер прерываний 8259 (отечественный аналог — КР1810ВН59А) предназначен для обработки до восьми приоритетных уровней прерываний. Возможно каскадирование микросхем, при этом общее число уровней прерываний будет достигать 64.

Контроллер 8259 имеет несколько режимов работы, которые устанавливаются программным путем. В персональных компьютерах XT и AT за первоначальную установку режимов работы микросхем 8259 отвечает BIOS. У программиста скорее всего не возникнет потребность перепрограммировать контроллер — это небезопасно, так как неправильное программирование контроллера приведет к нарушению логики работы всей системы.

Однако часто возникает необходимость изменения текущего режима работы (запрет или разрешение прерываний определенного или всех уровней, обработка конца прерывания) или опроса состояния внутренних регистров контроллера. Для этого необходимо ознакомиться со справочными данными на микросхему 8259, где детально описано как первоначальное программирование контроллера, так и управление им во время работы.

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

Если контроллеры 8259 каскадированы, то ведомой микросхеме присваивается код (выдачей в микросхему соответствующего командного слова). Этот код равен номеру входа IRQ ведущей микросхемы, с которым соединен выход запроса прерывания INT ведомой микросхемы. Внутри микросхемы приоритет зависит от номера IRQ и задается программно. Для компьютеров XT и AT самым высоким приоритетом внутри группы, обслуживаемой каждым контроллером, является вход IRQ0. Однако возможно программное изменение приоритетов в рамках так называемого приоритетного кольца. При этом дно приоритетного кольца имеет самый низкий приоритет.

Приведем возможные варианты задания приоритетов:

Наиболее высокий приоритет у входа IRQ с обозначением 0 приоритетного кольца, наиболее низкий — с обозначением 7.

Для обработки прерываний контроллер имеет несколько внутренних регистров. Это регистр запросов прерываний IRR, регистр обслуживания прерываний ISR, регистр маски прерываний IMR. В регистре IRR хранятся запросы на обслуживание прерываний от аппаратуры. После выработки сигнала прерывания центральному процессору соответствующий разряд регистра ISR устанавливается в единичное состояние, что блокирует обслуживание всех запросов с равным или более низким приоритетом. Устранить эту блокировку можно либо сбросом соответствующего бита в ISR, либо командой специального маскирования.

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

  • индивидуальное маскирование запросов прерывания;
  • специальное маскирование обслуженных запросов;
  • установка статуса уровней приоритета (по установке исходного состояния, по обслуженному запросу, по указанию);
  • операции конца прерывания (обычный конец прерывания, специальный конец прерывания, автоматический конец прерывания);
  • чтение регистров IRR, ISR, IMR.

Мы не будем подробно описывать команды инициализации контроллера 8259, так как программистам они скорее всего не понадобятся. Желающих разобраться во всех тонкостях задания начального режима работы контроллера прерываний мы отсылаем к справочной литературе по микросхеме 8259 или ее отечественному аналогу.

Рассмотрим команды операций. Существуют три типа команд операций:

  • Маскирование запросов прерывания.
  • Команды обработки конца прерывания.
  • Опрос регистров и специальное маскирование.

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

Маскирование запросов прерываний мы уже описывали в главе, посвященной прерываниям. Для маскирования какого-либо уровня прерывания надо записать в регистр маски IMR по адресу 21h или A1h единицу в соответствующий разряд регистра.

Команды обработки конца прерывания приведем в виде таблицы:

Команды третьего типа выдаются также в порты с адресами 20h и A0h. Они имеют следующий формат:

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

Команда специального конца прерывания устанавливает в нулевое состояние тот разряд ISR, номер которого указан в разрядах B0. B2 команды.

Команда циклического сдвига уровней приоритета с обычным концом прерывания устанавливает в ноль разряд ISR, соответствующий последнему обслуженному запросу и этому же номеру запроса присваивается низший уровень приоритета.

Аналогично работает команда циклического сдвига уровней приоритета со специальным концом прерывания, только низший уровень приоритета присваивается тому входу IRQ, номер которого указан в разрядах B0. B2 команды.

Команда циклического сдвига уровней приоритета устанавливает статус уровней приоритета без выполнения операции конца прерывания. Разряды B0. B2 указывают дно приоритетного кольца.

После выполнения команд разрешения чтения регистров ISR или IRR при выполнении команды ввода из порта 20h и A0h считывается соответственно содержимое регистров ISR и IRR. Для получения содержимого регистра IMR необходимо выполнить чтение портов с адресами соответственно 21h и A1h.

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

Чтение регистров ISR и IRR может использоваться резидентными программами при проверке возможности своей активизации — можно проверить, не выполняется ли в настоящий момент обработка какого-нибудь прерывания, которая может конфликтовать с действиями резидентной программы.

Ссылка на основную публикацию
Adblock
detector