Контроллер прерываний Intel 82C59A
Микропроцессор Intel 80386 поддерживает работу с одной линией запроса прерывания (INTR) и одной линией сигнала предоставления прерывания (INTA). Для того чтобы процессор Intel 80386 мог обслуживать множество внешних устройств, к нему подключается внешний контроллер прерываний Intel 82C59A, к которому, в свою очередь, подключаются модули управления внешними устройствами. Контролер Intel 82С59А в данном случае играет роль арбитра прерываний.
В Приложении рис.3представлена схема подключения множества модулей ввода-вывода к процессору Intel 803S6 через контроллер прерываний Intel 82С59А Отдельный контроллер Intel 82C59A может обслуживать до восьми модулей ввода-вывода. Если в компьютере предполагается использовать более восьми модулей, контроллеры включаются по каскадной схеме и в результате могут обслуживать до 64 модулей.
Единственная задача контроллера Intel 82C59A — обслуживание прерываний. Он получает сигналы запроса прерываний от подключенных модулей ввода-вывода, анализирует, какое из устройств, одновременно приславших запрос. имеет наивысший приоритет, и передает сигнал запроса прерывания на линию INTR, подключенную непосредственно к процессору. Процессор отвечает сигналом предоставления прерывания на линии INTA. В ответ контроллер помещает вектор соответствующего прерывания на линии данных. После этого процессор начинает выполнять процедуру обработки прерывания и работает напрямую с модулями ввода-вывода — считывает или передает данные.
Режим работы контроллера Intel 82C59A, а именно схема назначения приоритетов, программируется процессором. Существуют три варианта режима назначения приоритетов.
• Вложенный (fullynested). Приоритет запроса определяется тем, к какому контакту контроллера подключен сигнал. Тот из них, который подключен ко входу IRO, имеет приоритет 0, а подключенный ко входу IR7 — приоритет 7.
• Циклический (rotating). В некоторых приложениях нескольким внешним устройствам (группе) назначается один и тот же приоритет. В этом режиме после получения сигнала предоставления прерывания модуль, инициировавший прерывание, получает самый низкий приоритет в группе.
• Маскируемый (specialmask). В этом режиме процессор может заблокировать прерывания от выбранных устройств, передав специальный код маски.
Программируемый контроллер интерфейса Intel 82C55A
Программируемый контроллер интерфейса Intel 82C55A может служить прекрасным примером модуля, используемого как в режиме программируемого ввода-вывода, так и в режиме ввода-вывода по прерыванию. Модуль выполнен в виде БИС в корпусе с 40 выводами и предназначен для работы с микропроцессором Intel 80386. В Приложении рис.4 представлена блок-схема контроллера и назначение выводов.
Внешнее устройство подключается к контроллеру через 24 линии связи, показанные на схеме справа. Сигналы на этих линиях определяются состоянием внутренних регистров контроллера, которые программируются процессором Intel 80386. Процессор может задавать через регистры управления разные режимы работы контроллера. 24 выходных линии разбиты на три группы по 8 линий в каждой — группы А, В и С. Каждая группа может функционировать как отдельный 8-разрядный порт ввода-вывода. Кроме того, группа С разбита на две подгруппы — СА и СВ, — которые можно использовать в сочетании с портами А и В соответственно. Если контроллер будет сконфигурирован таким способом, то подгруппы са и СВ смогут передавать (принимать) сигналы управления и состояния, а порты — сигналы данных на ввод и на вывод.
Слева на схеме представлены линии интерфейса, по которым контроллер обменивается сигналами с процессором через системную магистраль. В их числе входят 8 двунаправленных линий передачи данных (линии DO-D7), по которым передаются (принимаются) данные в порты ввода-вывода и в регистры управления. Обмен данными выполняется, когда установлен сигнал CHIPSELECT и один из сигналов READ или WRITE. Сигнал RESET устанавливает контроллер в исходное состояние.
Загружая тот или иной код в регистр управления, процессор способен задавать режим работы контроллера и конфигурацию порта С. В режиме 0 три группы выходных линий контроллера работают как три независимых 8-разрядных порта, каждый из которых может быть сконфигурирован либо как порт ввода, либо как порт вывода. Другой вариант конфигурации — группы линий А и В работают как порты ввода-вывода, а группа линий С делится на две, одна из которых становится группой передачи сигналов управления, поддерживающих порт А, а другая — порт В. Сигналы управления предназначены для выполнения двух основных процедур — обмена сигналами при установлении связи (процедура «handshaking» — рукопожатие) и формирования сигнала запроса прерывания. В первом случае реализуется самый простой алгоритм синхронизации. Одна управляющая линия используется для передачи сигнала готовности DATAREADY,который означает, что данные выставлены на внешние линии данных. Другая линия используется для приема сигнала подтверждения ACKNOWLEDGE, который является индикатором того, что выставленные ранее данные считаны и соответствующие сигналы можно сбросить. Еще одна линия предназначена для передачи сигнала запроса прерывания INTERRUPTREQUEST и подключается непосредственно к соответствующей линии системной магистрали.
Поскольку режим работы контроллера Intel 82C55A программируется извне, его можно настроить на работу с самыми разными несложными внешними устройствами. В Приложении рис.5 показано, как с помощью этого контроллера можно реализовать управление клавиатурой и дисплеем видеотерминала. Клавиатура рассматривается как устройство ввода, передающее 8-разрядный код. Два разряда, shiftи CONTROL, имеют особое значение для программы обслуживания клавиатуры, которая выполняется процессором. Однако особая интерпретация этих ; разрядов никак не затрагивает контроллер — это не его заботы. Он передает эти разряды дальше на линии данных системной магистрали точно так же, как и шесть остальных. Для синхронизации обмена с клавиатурой выделены две сигнальных линии — DATAREADY И ACKNOWLEDGE.
Дисплей также подключен к контроллеру через 8-разрядный порт данных. Набор управляющих линий включает, помимо DATAREADY и ACKNOWLEDGE, еще две дополнительных.
Приоритет ВУ в микроЭВМ с программным опросом готовности внешнего устройства однозначно определяется порядком их опроса в подпрограмме обработки прерываний. Чем раньше в подпрограмме опрашивается готовность ВУ, тем меньше время реакции на его запрос и выше приоритет. Необходимость проверки готовности всех внешних устройств существенно увеличивает время обслуживания тех ВУ, которые опрашиваются последними. Это является основным недостатком рассматриваемого способа организации прерываний. Поэтому обслуживание прерываний с опросом готовности ВУ используется только в тех случаях, когда отсутствуют жесткие требования на время обработки сигналов прерывания внешних устройств. Организация системы прерываний в микроЭВМ с использованием векторов прерываний позволяет устранить указанный недостаток. При такой организации системы прерываний ВУ, запросившее обслуживания, само идентифицирует себя с помощью вектора прерывания - адреса ячейки основной памяти микроЭВМ, в которой хранится либо первая команда подпрограммы обслуживания прерывания данного ВУ, либо адрес начала такой подпрограммы. Таким образом, процессор, получив вектор прерывания, сразу переключается на выполнение требуемой подпрограммы обработки прерывания. В микроЭВМ с векторной системой прерывания каждое ВУ должно иметь собственную подпрограмму обработки прерывания.
Различают векторные системы с интерфейсным и внеинтерфейсным вектором. В первом случае вектор прерывания формирует контроллер ВУ, запросившего обслуживания, во втором - контроллер прерываний, общий для всех устройств, работающих в режиме прерываний (IBM-совместимые персональные компьютеры).
Аппаратный опрос готовности ВУ производится гораздо быстрее, нежели программный. Но если обслуживания запросили одновременно два или более ВУ, обслуживание менее приоритетных ВУ будет отложено на время обслуживания более приоритетных, как и в системе прерывания с программным опросом. Рассмотренная векторная система прерываний практически полностью соответствует системе прерываний, реализованной в микроЭВМ "Электроника-60". Восьмиразрядный вектор прерывания в "Электронике-60" указывает одну из ячеек памяти с адресами от 0 до (376)8, в которой размещается адрес начала подпрограммы обработки прерывания.
В следующей за указанной вектором прерывания ячейке памяти хранится новое содержимое регистра состояния процессора, загружаемое в него при переключении на подпрограмму обработки прерывания. Один из бит нового содержимого регистра состояния процессора запрещает или разрешает прерывания от других ВУ, что позволяет ВУ с более высоким приоритетом прерывать подпрограммы обслуживания ВУ с меньшим приоритетом и наоборот. Векторная система с внеинтерфейсным вектором прерывания используется в IBM-совместимых персональных компьютерах. В этих компьютерах контроллеры внешних устройств не имеют регистров для хранения векторов прерывания, а для идентификации устройств, запросивших обслуживания, используется общий для всех ВУ контроллер прерываний