Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование аппаратных прерываний
Цель работы – знакомство с различного вида аппаратными прерываниями и создание собственных подпрограмм обработки прерываний. Общие положения Микропроцессоры 8086/88 поддерживают механизм прерываний. В самом общем виде это наличие в аппаратуре специальных средств, с помощью которых выполнение текущей программы приостанавливается и процессор переходит к так называемой программе обслуживания прерывания (Interrupt Servise Routine - ISR). Механизм прерываний позволяет организовать выполнение тех или иных функций ядра и быструю реакцию процессора на возникновение каких-то внешних событий: ошибок в арифметических операциях, изменению состояния периферийных устройств и пр. Микропроцессоры 8086/88 поддерживают 256 прерываний. Каждое из них имеет свой номер и ISR. Адрес точки входа в ISR называется вектором прерывания и хранится в специальной таблице, называемой таблицей векторов прерывания (ТВП). Код ISR может располагаться в любом месте памяти. Поэтому вектор прерывания занимает 4 байта: 2 байта отводится на значение сегментного регистра, устанавливаемое в CS (старшее слово), 2 байта - на значение смещения, устанавливаемое в IP (младшее слово). Вся ТВП занимает 256 * 4 = 1024 байт и располагается в оперативной памяти, начиная с адреса 0000:0000. При возникновении прерывания процессор помешает в стек 6 байт: текущее значение CS, текущее значение IP (пара этих регистров определяет точку, с которой выполнение прерываемой программы возобновится), а также 2 байта флагов процессора. В CS и IP устанавливаются значения из ТВП, которые задают адрес начала ISR. Прерыванию 0 соответствует вектор прерывания по адресу 0000:0000, прерыванию 1 - по адресу 0000:0004h, прерыванию 2 - по адресу 0000:0008h и т.д. Сама ISR - это программа, построенная с соблюдением специальных правил: 1) в самом начале она сохраняет в стеке все регистры процессора, которые будут использоваться в этой программе; 2) перед завершением работы программы значения регистров восстанавливаются; 3) последней инструкцией ISR, как правило, является инструкция возврата из прерывания IRET. Выполняя IRET, процессор извлекает из стека шесть слов информации, которые последовательно помещает в регистры IP, CS и регистр флагов, возвращаясь к исполнению прерванной программы.
Часто обработчикам программных прерываний требуется передать какие-то значения, задающие конкретное действие, характеристики ситуации и т.п., и получить какие-то результаты по завершению исполнения ISR. Для такого обмена данными используются внутренние регистры процессора. Некоторые векторы прерывания в ТВП на самом деле задают не точки входа в ISR, а используются для хранения важной системной информации: адресов данных и таблиц. Кроме того, за некоторые векторы "зацеплены" ISR, не выполняющие никаких действий. Они служат заглушками для подключения дополнительных обработчиков. Так, например, в нормальном состоянии обработчик прерывания 1Ch не выполняет никаких действий и содержит единственную инструкцию возврата из прерывания IRET. Прерывание 1Ch вызывается из пределов ISR таймера (обработчик прерывания 8). Прерывание от таймера, в свою очередь, генерируется 18.2 раза в секунду аппаратурой системного таймера. Есть и другие обработчики - заглушки, вызываемые при функционировании ISR BIOS и MS-DOS.
Аппаратные прерывания В процессе функционирования персонального компьютера могут встретиться четыре типа прерываний: 1) аппаратные; 2) программные; 3) исключительные ситуации процессора (processor exceptions); 4) немаскируемые. Аппаратные прерывания возникают как результат некоторых внешних событий и в их генерации принимает участие специальная микросхема персонального компьютера - программируемый контроллер прерываний, или PIC (Programmable Interrupt Controller). Наиболее часто для этих целей используется одна или несколько микросхем 8259А либо их функциональные эквиваленты. В архитектуре компьютеры IBM PC AT используют PIC, построенный на двух микросхемах 8259А (рис. 5.1). Микросхема 8259А рассчитана на 8 входов запросов прерываний, обозначаемых IRQ (Interrupt Request). Сигналы на них возбуждают внешние устройства: адаптеры асинхронной последовательной и параллельной связи, плата системного таймера и др. Контроллер прерываний имеет в своем составе ряд программируемых внутренних регистров, определяющих особенности обработки запросов прерываний.
Рис 5.1. Двухкаскадная схема построения контроллера прерываний
Выход ведущей (единственной в однокаскадной схеме) микросхемы 8259А контроллера прерываний подается на специальный вход процессора (INTR). Этот вход процессора является маскируемым: если флаг маскирования прерываний IF равен единице, процессор способен "ощущать" изменение состояния линии INTR (прерывания разрешены); если же IF сброшен в 0, изменения на линии INTR не влияют на работу центрального процессора. Поэтому часто аппаратные прерывания, в формировании которых принимает участие PIC, называют маскируемыми. Если прерывания разрешены и устанавливается высокий потенциал на линии INTR, процессор завершает исполнение текущей инструкции и отвечает двумя циклами сигнала INTA. Первый цикл сигнала INTA - это, по существу, пустой цикл, который готовит PIC к следующему циклу. Во время второго цикла PIC помещает на шину данных байт, задающий номер аппаратного прерывания. Получив байт номера прерывания, процессор умножает его на 4, формируя смещения до вектора прерываний в ТВП. Процессор сохраняет в стеке текущее значение регистров флагов CS и IP, затем устанавливает в 0 флаг IF, а в CS и IP - значения из вектора прерывания. В результате управление передается в ISR. Для того чтобы различать сигналы прерываний от различных внешних устройств, система прерываний IBM PC построена следующим образом. Каждое внешнее устройство подключено к собственной линии запроса прерываний IRQ. При получении сигнала на линии IRQ контроллер прерываний передает в процессор уникальный для данной IRQ байт номера прерывания. Соответствие линий IRQ и номеров прерывания задается программированием контроллера прерываний. Такое программирование выполняется в ходе начальной загрузки системы специальной процедурой BlOSa и в дальнейшем обычно не изменяется. В принципе, перепрограммирование PIC может выполняться в любой момент и некоторые программы (Windows, OS/2) используют это при своей загрузке. В ходе программирования PIC задаются старшие 5 бит номера прерывания, а младшие 3 бита генерирует микросхема 8259А, определяя двоичный код номера линии IRQ. Ведущая (единственная) микросхема программируется BIOSом так, чтобы передавать в процессор прерывания от 08h до 0Fh. Ведомая 8259А в IBM PC AT настраивается на передачу номеров прерываний от 70h до 77h. Кроме отображения IRQ на номера прерывания, PIC выполняет упорядочивание по приоритету одновременно возникающих запросов. Обычно наивысший приоритет имеет запрос на линии IRQ0, затем в порядке убывания IRQI, IRQ2,..., IRQ7. Вход процессора INTR является так называемым "уровнем чувствительным". Это значит, что если процессор ощущает высокий уровень, он всегда начинает цикл обработки прерывания. Если начатая ISR устанавливает IF в единицу (а это, как правило, так и бывает), сохранение сигнала на линии INTR вызовет повторное вхождение в ту же самую ISR, a затем вхождение в третий, четвертый и далее раз до тех пор, пока не переполнится стек. Для того чтобы этого не происходило, контроллер прерываний блокирует генерацию сигнала INTR для текущей активной линии IRQ до тех пор, пока исполняемая ISR не даст явного указания сделать это. Обычно так ISR обозначают свое завершение, посылая в PIC команду завершения прерывания, или EOI (End Of Interrupt). Если ISR не сделает этого, контроллер продолжает блокировать выработку сигнала INTR для всех последующих запросов прерывания как по данной линии, так и по другим, менее приоритетным линиям.
Любая из линий запросов IRQi может быть маскирована. Специальный внутренний регистр PIC хранит битовую маску входов IRQi: бит 0 регистра маски управляет IRQ0 (IRQ8 в ведомой микросхеме 8259А), бит 1 - IRQI (IRQ9),..., бит 7 - IRQ7 (IRQ15). Если бит равен нулю контроллер генерирует сигнал на линии INTR, если бит равен единице, контроллер не "чувствует" запрос на маскированной битом линии IRQi. Использование двухкаскадной схемы для построения контроллера прерываний расширяет до 15 чисто обслуживаемых внешних устройств. Для двухкаскадной схемы выход INTR ведомой микросхемы 8259А подается на линию LRQ2 ведущей микросхемы. В результате линии запросов упорядочиваются по приоритету следующим образом: максимальный приоритет имеет IRQ0, затем в порядке убывания IRQI, IRQ8,..., IRQ15, IRQ3,..., IRQ7. Как правило, PIC в ходе начальной загрузки настраивается так, что для линий IRQ0 - IRQ7 генерируются прерывания с номерами 08h - 0Fh соответственно, а для линий IRQ8 - IRQ15 - прерывания с номерами 70h - 77h. Подключение внешних устройств персональных компьютеров к линиям IRQ и, следовательно, закрепление аппаратных прерываний для большинства персональных компьютеров типа IBM PC фактически стандартизовано. В табл. 5.1 приводится закрепление внешних устройств и аппаратных прерываний для IBM PC AT.
Табл.5.1. Использование прерываний в IBM PC AT
Немаскируемые прерывания Процессор, кроме входа INTR, использует еще один вход -вход немаскируемого прерывания, или NMI (NonMaskable Interrupt). Название входа говорит о том, что программное обеспечение не может блокировать восприятие сигнала. Когда на входе NMI появляется сигнал, процессор без помощи PIC генерирует байт номера прерывания, равный двум. В отличие от входа INTR, NMI является "чувствительным к фронту сигнала" (edge sensitive). Генерацию прерывания 2 вызывает изменение состояния линии: с логического нуля на логическую единицу. После того, как прерывание сгенерировано, высокий потенциал линии не способен вызвать очередную генерацию прерываний. Только возврат сигнала в нуль, а затем - в единицу заставит процессор генерировать очередное немаскируемое прерывание.
Сигнал на входе NMI имеет более высокий приоритет, чем INTR, и используется для организации реакции процессора на критические для системы ситуации: обнаружение ошибки четности в данных, хранимых в памяти, выключение питания и т.п. Программные прерывания Когда в программе встречается инструкция INT, процессор исполняет действия, рассмотренные ранее для аппаратного прерывания. Отличие состоит в том, что байт номера прерывания задается самой инструкцией. В этой связи не требуется выполнение циклов INTA. Инструкция INT имеет более высокий приоритет, чем аппаратные и немаскируемые прерывания: если процессор начинает исполнение инструкции INT, он не прерывается сигналами на линиях NMI и INTR. Многие из программных прерываний используются для доступа к ISR BIOSa, операционной системы или инсталлируемых драйверов. Кратко правила взаимодействия с ISR (номер прерывания, описание функции, значения регистров на входе в ISR и после ее завершения, индикация ошибок и т.п.) называют интерфейсом прикладной программы или API (Application Program Interface). Исключительные ситуации Исключительные ситуации - это генерация внутренних прерываний процессором при возникновении необычных условий во время исполнения машинных инструкций. Примером таких ситуаций для микропроцессора Intel 8086/88 является "деление на нуль" (генерируется прерывание 0) и "пошаговое исполнение" (генерация прерывания 1 после завершения текущей инструкции). Число исключительных ситуаций, генерируемых процессорами 80286 и 80386, значительно больше. Для них используются прерывания с номерами 05h и больше (например, для 80386 от 05h до 10h включительно). Многие из этих исключительных ситуаций могут генерироваться только при переключении в защищенный режим работы и связаны с нарушением защиты памяти. Для того чтобы избежать "столкновения" прерываний с одинаковыми номерами, закрепленных за аппаратными прерываниями и исключительными ситуациями защищенного режима, операционная система может выполнить перепрограммирование контроллера прерываний.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-06-06; просмотров: 560; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.82.23 (0.009 с.) |