Контроллер прерываний i8259A. Структура 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Контроллер прерываний i8259A. Структура



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

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

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

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

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

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

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

d0... d7 — выводы i8259A, замыкающиеся на системную шину данных. По ним

передается номер вектора прерывания и принимается управляющая информация;

INT — вывод выходного сигнала запроса на прерывание, который подается на вход микропроцессора INTR;

INTA — вывод для сигнала от микропроцессора, подтверждающего факт принятия им прерывания на обслуживание;

irq0...irq7 — выводы для входных сигналов запросов на прерывания от внешних устройств.

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

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

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

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

· регистр запросов па прерывания IRR (Interrupt Request Register) — восьми­разрядный регистр, фиксирующий поступление сигнала на один из входов

· i8259A — i rq0... i rq7. Фиксация выражается в установке соответствующего бита в единичное состояние;

· регистр маскирования прерываний IMR (Interrupt Mask Register) — восьмираз­рядный регистр, с помощью которого можно запретить обработку запросов на прерывания, поступающих на соответствующие входы (уровни) i rqO... i rq_7. Для запрещения (маскирования) определенных уровней прерываний необхо­димо установить соответствующие биты регистра IMR. Эта операция осуществ­ляется путем программирования порта 21 h;

· регистр обслуживаемых прерываний ISR (Interrupt Service Register) — восьми­разрядный регистр, единичное состояние разрядов которого показывает, пре­рывания каких уровней обрабатываются в данный момент в микропроцессоре;

· арбитр приоритетов PR (Priority Resolver) — функцией данного блока явля­ется разрешение конфликта при одновременном поступлении запросов на вхо­ды irq0...irq7;

· блок управления — основной функцией данного блока является организация информационного обмена контроллера прерываний и микропроцессора через шину данных. На этот блок замыкаются как выводы d0... d7, так и некоторые другие (см. рис. 15.2).

Рассмотрим возможные прохождение и обработку сигнала прерывания от неко­торого внешнего устройства. При этом воспользуемся структурной схемой конт­роллера прерываний и обозначениями на ней (см. рис. 15.2).

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

  1. Анализируется флаг IF. Если вы помните, единичное состояние этого флага
    говорит о том, что аппаратные прерывания разрешены, нулевое — запрещены.
  2. Если прерывания запрещены, то запрос на прерывание «повисает» до момен­
    та установки IF в единицу.
  3. Если прерывания разрешены, микропроцессор выполняет следующие дей­
    ствия:

· сбрасывает флаг IF в ноль;

· формирует сигнал подтверждения прерывания на выводе микропроцессо­ра INTA. Этот вывод микропроцессора замкнут на одноименный вывод микросхемы i8259А.

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

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

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

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

Другой не менее интересный момент заключается в том, что микропроцессор при принятии к обработке запроса на прерывание сбросил флаг I F в ноль, тем самым запретив все последующие аппаратные прерывания. Этим обстоятельством про­граммист может пользоваться по своему усмотрению. Вы, конечно, помните, что все запросы на прерывания с приоритетом, равным текущему или меньшим, бу­дут запрещены в любом случае, — это обусловлено логикой работы контроллера i8259A. Поэтому программист должен решить, насколько его замыслам могут помешать запросы на более приоритетные прерывания. Если это некритично, то лучше сразу, в начале процедуры обработки прерывания установить флаг I F в единицу. В большинстве случаев эту операцию нужно делать как можно раньше. Для установки флага I F в единицу в системе команд микропроцессора есть спе­циальная команда, не имеющая операндов:

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

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



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 1511; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.128.199.88 (0.008 с.)