Программируемый контролер прерываний
В первых персональных компьютерах IBM РС в качестве контроллера прерываний использовалась микросхема i8259 (отечественный аналог — БИС КР580ВН59). Данный контроллер прерываний представляет собой законченное устройство, которое позволяет реализовать восьмиуровневую векторную систему прерываний с возможностью маскирования и динамического изменения дисциплины обслуживания.
Для перехода к подпрограммам обслуживания прерываний контроллер формирует и подает на шину данных микропроцессора код команды CALL. За счет каскадного включения КР580ВН59 число обслуживаемых уровней прерывания может быть увеличено до 64. Контроллер может использоваться как для организации обмена информацией в режиме прерывания, так и для организации программно-управляемого обмена. В первом случае БИС ВН59 на приоритетной основе формирует запрос на прерывание для микропроцессора и адрес подпрограммы обслуживания. Во втором случае процессор считывает слово состояния контроллера, и определят устройство с наивысшим приоритетом, готовое к обмену. Микросхема размещена в пластмассовом корпусе с 28 выводами и потребляет мощность 1 Вт при напряжении питания +5 В.
Контроллер позволяет реализовать простой приоритетный режим и режим циклического приоритета обслуживания прерываний. При реализации простого приоритетного режима всем восьми входам запросов на прерывание присваиваются фиксированные приоритеты, причем наивысшие приоритет присваивается входу ЗП0, наименьший ЗП7. В режиме циклического приоритета после окончания обслуживания любого устройства приоритет входов контроллера циклически изменяется таким образом, что устройству, обслуженному последним, присваивается низший приоритет. Кроме того, в режиме циклического приоритета низший приоритет может быть присвоен любому входу запроса программным способом.
Структурная схема контроллера прерываний показана на рисунке 4.10. Запросы на прерывание от внешних устройств подаются на входы ЗП0 – ЗП7 и запоминаются в регистре запросов. В регистре состояния содержатся все запросы на прерывания, обслуживаемые в данный момент. Регистр маски содержит единицы в разрядах, соответствующих маскируемым в настоящий момент входам запросов. Установка в единицу того или иного разряда регистра маски блокирует передачу запроса на прерывание.
Запросы на прерывание по любому входу могут быть поданы в потенциальной или импульсной форме. Однако каждый последующий запрос на прерывание воспринимается контроллером только после выполнения подпрограммы обслуживания текущего запроса по данному входу и сброса соответствующего разряда регистра состояния, что осуществляется специальной командой программным способом. Сигналы управления контроллера прерываний КР580ВН59 имеют следующее значение:
ЗП ― запись в БИС управляющих слов;
ЧТ ― считывание из БИС содержимого внутренних регистров;
А0 ― адресация регистров;
ВМ ― выбор микросхемы;
ЗП0-ЗП7 ― запросы на прерывание от внешних устройств;
ЗПР ― запрос на прерывание, выдаваемый контроллером на микропроцессор;
РПР ― разрешение прерывания. После поступления этого сигнала от микропроцессора контроллер осуществляет ввод в МП команду CALL;
ВДМ ― ведомый; сигнал управления каскадирования. Высокий уровень ― если контроллер является ведущим, низкий - ведомым;
КС0-КС2 ― каскадирование, линии являются выходными, если контроллер ведущий, и входными ― если ведомым.
Рисунок 4.10 – Схема программируемого контроллера прерываний |
Значение сигналов КС0 – КС2 ведущего контроллера, подаваемые на соответствующие входы КС0 – КС2 подчиненных, указывает подчиненный контроллер, который формирует и выдает в микропроцессор адрес своей подпрограммы обслуживания.
Программирование контроллера осуществляется двумя типами команд: командами инициализации и командами управления режимом. Ввод команд для контроллера прерываний осуществляется микропроцессором, как правило, командой OUT. Однако в системе может быть организовано обращение к контроллеру как к ячейкам ЗУ. Команды инициализации подаются перед началом работы контроллера. Эти команды задают стартовые адреса подпрограмм обслуживания прерываний, расстояниями между соседними стартовыми адресами и указывают, если необходимо, на наличие других контроллеров в системе. Команды управления режимом (операциями) служат для оперативного изменения режимов обслуживания прерываний и могут подаваться в любое время в процессе работы контроллера. Команда управления операциями (OCW1) осуществляет установку или сброс разрядов регистра маски. Установка определенного разряда регистра маскирования приводит к запрету прерывания по соответствующему входу. Команда управления OCW2 осуществляет циклический сдвиг приоритета запроса. Команда управления операциями OCW3 позволяет задать режим специального маскирования, при котором можно выборочно устанавливать приоритеты прерывания. Этой же командой можно задать режим опроса и произвести считывание состояния ПКП, при котором считывается значение регистра обслуживаемых прерываний либо регистра запроса прерываний.
При поступлении запроса на прерывание по одному из входов ЗП0-ЗП7 он фиксируется в регистре запросов, а на выводе ЗПР (INT) формируется сигнал запроса на прерывание, который поступает на соответствующий вход микропроцессора. Если запросы на прерывание не запрещены (специальной командой), то процессор завершает текущий цикл, сохраняет в стеке состояние программного счетчика и выдает контроллеру сигнал разрешения прерывания РПР (INTA). По этому сигналу контроллер выставляет на шину данных код команды вызова подпрограммы CALL, который поступает в регистр команд процессора. После дешифрации этой команды процессор последовательно выдает еще два сигнала РПР. По первому из них контроллер выдает младший байт адреса подпрограммы обслуживания прерываний, а по второму – старший. Эти байты заносятся в программный счетчик и процессор начинает выполнять команду, начиная из адреса (вектора), поступившего от контроллера прерываний. Подпрограмма обслуживания прерываний должна заканчиваться командой возврата RET, по которой два байта из стека загружаются в программный счетчик и процессор продолжает выполнять прерванную программу.
В процессоре Pentium был добавлен расширенный контроллер прерываний APIC (Advanced PIC). Он состоит из модуля, встроенного в сам процессор (в случае многоядерной системы — в каждое ядро), называемого локальный контроллер прерываний (англ. local APIC), и центрального модуля, выполненного в одном экземпляре даже на многоядерном оборудовании, обычно как часть микросхем обрамления процессора (англ. IO APIC).
Проводники IRQ от прерывающих устройств подсоединены к IO APIC. Для общения локального APIС и IO APIC, а также локальных APIC различных ядер друг с другом, используется системная (frontside) шина многопроцессорной системы, также используемая для соединения процессоров и контроллера памяти.
Преимуществом расширенного контроллера прерываний является следующее:
1) возможность реализации межпроцессорных прерываний — сигналов от одного процессора к другому;
2) поддержка до 256 входов IRQ, в отличие от 16 на классической IBM PC
3) очень быстрый доступ к регистрам текущего приоритета прерывания и подтверждения прерывания.
В настоящий момент наблюдается тенденция к отказу от IO APIC, как и проводников IRQ, и переходу на прерывания, инициируемые сообщениями MSI — (Message Signaled Interrupts).
MSI — альтернативная форма прерываний: вместо присваивания номера запроса на прерывание, прерывающему устройству разрешается записывать сообщение по определённому адресу системной памяти. Для записи сообщения используется механизм прямого доступа в память, причем устройство может иметь от одной до тридцати двух уникальных областей памяти. Все прерывания шины PCI Express всегда доставляются как MSI, даже при использовании эмуляции традиционных номеров проводников прерываний.
Достоинства MSI состоят в следующем:
· возможность передачи некоторых данных вместе с информацией о наступлении события, что зачастую избавляет обработчик прерывания от необходимости читать данную информацию из регистров состояния устройства, что уменьшает загрузку шины;
· возможность полного отказа от проводников INT# от устройств и разъемов PCI до главного контроллера прерываний (IO APIC), а также от самого главного контроллера прерываний, что упрощает системную плату;
· в многопроцессорных и многоядерных системах устройства получают возможность самостоятельно выбирать процессор/ядро для обработки конкретного прерывания, причем делать это полностью на уровне аппаратуры без исполнения программного кода, что позволяет оптимизировать работу путем размещения большей части структур драйвера устройства и связанного с ним программного обеспечения (сетевых протоколов и т.д.) в кэше конкретного процессора.
Дата добавления: 2016-02-09; просмотров: 1982;