Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Контроллер прерываний и его программирование
Если необходимо написать обработчик аппаратного прерывания – то нужно выполнить все необходимые действия: во-первых: аппаратура, от которой пришло прерывание; во-вторых: микросхемы контроллера прерываний. Рассмотрим особенности функционирования и программирования контроллера прерываний. Сигналы прерываний поступают от ВУ через контроллер прерываний – микросхема Intel 8259A. Организация аппаратных прерываний в IBM РС/ХТ
Баз. вектор – 8 IRQ - Interrupt Request Порты 20h, 21h Запрос прерывания
Основное назначение контроллера – направление сигналов запросов прерываний от восьми устройств на единств.вход прерываний процессора, кроме этого контроллер передает в процессор номер вектора по линиям данных. Сигнал INT поступающий на одноименный вход СРИ инициирует процедуру прерывания. Номер вектора образуется из базового вектора следующим образом:
номер IRQ IRQ0 08h Таймер т.о. 08h – это вектор IRQ0 1 09h Клавиатура Æ9h -«- IRQ1 2 OAh Резерв … 3 Obh Сом2 ÆFh – это вектор IRQ7 4 Och Сом1 5 ODh Жесткий диск 6 OEh Гибкий диск 7 Ofh LPT1
Компьютеры IBM PC/AT комплектуются большим количеством устройств. Для обслуживания большего количества устройств контроллеры можно объединять, создавая веерообразную структуру (max к каждому входу. ведущего контроллера можно подключить свой ведомый контроллер и получить систему с 64 входами запросов прерываний). В АТ устанавливается 2 контроллера.
Баз.вектор – 70h Базовый вектор - 8 Порты А0h, А1h Порты 20h, 21h
Т.о. возможное число устройств Æ до 15 (7 у ведущего и 8 у ведомого контроллера). Выход INT ведомого контроллера подключается к входу IRQ2 ведущего, а выход ведущего к CPU.
Базовый вектор у ведомого 70h:
7 0 Номер IRQ
Соответствие векторов прерываний устройствам компьютера
Рассмотрим внутреннюю структуру контроллера. В нем можно выделить четыре основные узла: (все 8 бит) - регистр входных запросов - регистр маски - схема приоритетов - регистр обслуживаемых запросов
INTA
Регистр Регистр Схема Регистр запросов маски анализа обслуживаемых IRR IMR приоритетов запросов Порт 20h Порт 21h Порт 20h ISR, порт 20h
Сигнал запроса прерывания IRQ от устройства поступает на вход регистра запросов, например, от клавиатуры сигнал поступает на IRQ1 и устанавливается в 11-ый бит этого регистра. Далее на пути сигнала стоит регистр маски. Значение Æ в бите маски разрешает прохождение сигнала. Значение 1 – запрещает. Пройдя через маску, сигнал поступает на схему анализа приоритетов. Пройдя схему анализа приоритетов, сигнал запроса прерывания поступает на вход регистра обслуживаемых запросов и дает разрешение на установку в 1 его бита, однако не устанавливает его. Одновременно сигнал поступает на вход INT МП. МП регистрирует поступление INT, если установлен флаг IF разрешения прерывания в регистре флагов. Получив INT, МП отвечает сигналом INTA – Interrupt Acknolege - подтверждение прерывания, который поступает в контроллер и выполняет 2 действия: 1) Устанавливает бит регистра обслуживаемых запросов. 2) Сбрасывает бит регистра запросов. Т.о. запрос начал обслуживаться МП и, начиная с этого момента, на вход контроллера прерывания может придти следующий сигнал прерывания от устройства. МП одновременно с посылкой сигнала INTA сбрасывает флаг IF, запрещая все аппаратные прерывания. Прерывания останутся запрещенными до выполнения пользователем команды sti. Установка 1 в бите регистра обслуживаемых запросов воздействует на схему анализа приоритетов. Установленный бит блокирует в схему анализа приоритетов все уровни прерываний, начиная с текущего и ниже. Т.о., чтобы разблокировать все прерывания данного и более низких приоритетов необходимо сбросить бит регистра обслуживаемых запросов засылкой кода 20h в порт 20h для ведущего контроллера и в порт Aoh ведомого. Этот код получил название команды EOI - End Of Interrupt – конец прерывания. Приказ конца прерывания должен возбуждаться в любом обработчике прерываний.
Т.о. в программе обработки аппаратного прерывания можно выделить три участка:
(cli)
Поскольку, получив сигнал INT и ответив сигналом INTA, CPU сбрасывает флаг IF, все прерывания оказываются запрещенными, и программа не может быть прервана внешними сигналами. Команда sti – устанавливает IF и разрешает прохождение запросов прерываний в процессор, причем все уровни с текущего оказываются заблокированными, т.е. работа обработки может быть прервана только при поступлении запроса более высокого приоритета (IRQÆ). Приказ EOI – снимает блокировку в контроллере и, начиная с этого момента, запрос прерывания любого уровня прервет выполнение обработки. Если обработчик прерывания IRQ1 прерывается этим же запросом – это приводит к тому, что программа обработка, не дойдя до конца, опять начинаться сначала и происходит повторный вход в программу. Т.о. обработчик должен быть реентабельным. Структура обработки выбирается исходя из конкретных условий. Часто sti - ставят в самом начале, чтобы не задерживать обработку прерывания от более приоритетных устройств (в частности таймера). Приказ EОI посылается в контроллер в самом конце программы перед iret. Т.о. исключаются вложенные прерывания.
Однако, сигнал прерывания от того же уровня может придти между командой Out 20h, AL и iret. Поскольку блокировка нижележащих уровней уже снята, возникнет вложенное прерывание и повторный вход в ту же программу. Чтобы избежать этого перед самым приказом EOI выполни cli
В результате вложенные прерывания запрещаются до выхода из обработчика. Однако, прерывания не останутся запрещенными навсегда – команда iret вернет из стека (к = 0 не м.б., так и этого прерывания не произошло). Отсюда следует, что в обработчике вообще может отсутствовать sti. В этом случае обработчик будет выполняться при запрещенных прерываниях и разрешены прерывания будут только после выполнения команды iret. Запросы на прерывания, поступающие в ведущий контроллер IRQÆ - IRQ7 – блокируют только ведущий контроллер. Однако запросы на прерывание, поступающие в ведомый контроллер, приоритет (IRQ8-IRQ15), блокируют уровни низших приоритетов в ведомом и IRQ2 - IRQ7 – в ведущем контроллере. Поэтому в обработанных прер.уровней 8…15 следует предусматривать посылку команды конца прерываний в оба контроллера: mov AL, 20h out 20h, AL out A0h, AL Рассмотрим несколько примеров программирования контроллера прерывания. Существует возможность запретить не все, а лишь избранные аппаратные прерывания записью 1 в соответствующий разряд регистра маски прерываний (IMR) контроллера. Для разрешения прерываний нужно записать Æ в тот же разряд.
in AL, 21h; прочитать текущую маску or AL, 1; установить добавочно бит Æ out 21h, AL; вернуть в IMR
Выполнение этих команд приведет к остановке системного таймера. Это можно проверить с помощью часов Norton Commander.
После этого необходимо выполнить: in AL, 21h; прочитать IMR and AL, ÆFEh; сбросить бит Æ оut 21h, AL; вернуть в IMR
или: in AL, 21h; прочитать IMR or AL, 00000010B; запрет прерывания от клав. and 21h, AL -«- in AL, 21h and AL, 11111101B; разрешает прерывание out 21h, AL
Таким же образом можно запретить прерывания от контроллера гибких дисков и т.д. Есть одно внешнее прерывание, которое не может быть замаскировано. Это так называемое немаскируемое прерывание NMI. Оно имеет номер 02h, обладает более высоким приоритетом, чем остальные аппаратные прерывания. Для того чтобы прочитать состояние регистра обслуживаемых запросов, необходимо в порт 20h послать команду OBh – разрешение чтения ISR. Следующий пример иллюстрирует чтение регистра запросов до EOI и после EOI.
EOI EQU 20h mov AL, Obh;Команда разрешения out 20h, AL;Чтение регистра запросов jmp $+2;Задержка для быстрых vfiby jmp $+2;(иногда не нужна) in AL, 20h;Читаем регистр ISR
; распечатка ISR
mov Al, EOI;Команд EOI в out 20h, Al;ведущ.контрол. jmp $+2 jmp $+2 in AL, 20h
; распечатка ISR
После команды OBh возможно неоднократное чтение ISR.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 477; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.22.242.141 (0.02 с.) |