1 ЛЕКЦИЯ 1 ПРЕРЫВАНИЯ Прерывание – инициируемый определенным образом процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возобновлением выполнения прерванной программы. Прерывания подразделяют на внутренние и внешние. В общем смысле система прерываний – это совокупность программных и аппаратных средств, реализующих механизм прерываний аппаратные средства: выводы микропроцессора; INTR – вывод для входного сигнала внешнего прерывания от микросхемы контроллера прерываний; INTA – вывод микропроцессора для выходного сигнала подтверждения получения микропроцессором сигнала прерывания;
2 NMI – вывод микропроцессора для входного сигнала немаскируемого прерывания; микросхема программируемого контроллера прерываний 8259А; внешние устройства (таймер, клавиатура и т.д.). программные средства: таблица векторов прерываний; флаги в регистре flags/eflags: IF – флаг прерывания. Предназначен для запрета (0) или разрешения (1) аппаратных прерываний (на входе INTR); TF – флаг трассировки; машинные команды микропроцессора: int, into, iret, cli, sti.
3 Подсистема прерываний
4 Контроллер прерываний Структурная схема и схематическое представление выводов i8259A
5 Функции микросхемы контроллера прерываний: фиксирование запросов на обработку прерываний от 8 источников, формирование единого запроса и подача его на вход INTR; формирование номера вектора прерывания и выдача его на шину данных; организация приоритетной обработки прерываний; маскирование отдельных прерываний Состояния микросхемы i8259A: состояние настройки; состояние работы. Регистры контроллера прерываний: регистр запросов на прерывания IRR – восьмиразрядный регистр, фиксирующий поступление сигнала на один из 8 входов; регистр маскирования прерываний INR – восьмиразрядный регистр. Установка битов этого регистра в 1 через порт 21h запрещает соответствующие прерывания;
6 регистр обслуживаемых прерываний ISR – восьмиразрядный регистр, единичное состояние разрядов которого показывает, прерывания каких уровней обрабатываются в данный момент в микропроцессоре. арбитр приоритетов PR – предназначен для разрешения конфликтов при одновременном поступлении запросов по различным входам. Блок управления – основной его функцией является организация информационного обмена контроллера и микропроцессора через шину данных. При поступлении сигнала на вход INTR процессора: 1. Анализируется флаг IF; 2. Если прерывания запрещены (IF=0), то запрос откладывается до установки флага в 1; 3. Если прерывания разрешены микропроцессор выполняет следующие действия: сбрасывает IF в 0; формирует сигнал подтверждения прерывания на выводе микропроцессора INTA. Этот вывод микропроцессора замкнут на одноименный вывод микросхемы i8259A. При возвращении сигнала микросхема контроллера прерываний:
7 1. Сбрасывает бит в регистре IRR, соответствующий уровню текущего прерывания; 2. Устанавливает в 1 соответствующий данному уровню бит регистра ISR, тем самым фиксируя факт обработки прерывания данного уровня в микропроцессоре; 3. Формирует с помощью блока управления номер вектора прерывания, значение которого формируется в буфере данных и поступает на выводы d0…d7, которые замкнуты на шину данных, по которой номер вектора поступает в микропроцессор. В микропроцессоре этот номер используется для вызова соответствующей процедуры обработки прерывания. Если в момент обработки прерывания поступит запрос на прерывание того же уровня, то микросхема контроллера запомнит его установкой соответствующего бита IRR в 1. Если поступает запрос на прерывание другого уровня, то дальнейшие действия зависят от соотношения приоритетов. Сброс бита в регистре ISR осуществляется посылкой кода 20h в порт 20h. В автоматическом режиме сброс осуществляется сразу после прихода ответного сигнала на вход INTA
8 Еще одним моментом, за которым должен следить программист, является разрешение прерываний (установка командой sti сброшенного флага IF). Если вовремя не сделать это, то, в частности, могут пропадать некоторые сигналы от таймера.