Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2. Архітектура ПЕОМ.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
238 Кб
Скачать
☆

25.! Порти доступу до контролера переривань на платі івм рс

26. Алгоритм програмування контролера переривань Контролер переривань  Центральне місце у схемі обробки апаратних переривань займає програмований контролер переривань (ПКП), виконаний у вигляді спеціальної мікросхеми i8259A. Ця мікросхема може обробляти запити від восьми джерел зовнішніх переривань. Цього явно замало, тому в стандартній конфігурації обчислювальної системи зазвичай використовують дві послідовно з'єднані мікросхеми i8259A. У результаті такого з'єднання кількість можливих джерел зовнішніх переривань зростає до 15.  Перерахуємо функції, що їх мікросхемою контролера переривань:  o Фіксування запитів на обробку переривання від восьми джерел, формування єдиного запиту на переривання і подача його на вхід INTR мікропроцесора;  o Формування номера вектора переривання і видача його на шину даних;  o Організація пріоритетною обробки переривань;  o Заборона (маскування) переривань з певними номерами.  На рис.2 показано схематичне уявлення внутрішньої структури та фізичних висновків мікросхеми i8259A. 

Рис.2. Структурна схема і схематичне уявлення висновків i8259A.

Призначення основних структурних компонентів контролера переривань:  o Регістр запитів на переривання IRR (Interrupt Request Register) - восьмирозрядний регістр, що фіксує надходження сигналу на один з входів i8259A - irq0 ... irq7. фіксація виражається в установцівідповідного біта в одиничний стан;  o Регістр маскування переривань IMR (Interrupt Mask Register) - восьмирозрядний регістр, за допомогою якого можна заборонити обробку запитів на переривання, що надходять на відповіднівходи (рівні) irq0 ... irq7. Для заборони (маскування) певних рівнів переривань необхідно встановити відповідні біти регістра IMR. Ця операція здійснюється шляхом програмування порту 21h.  o Регістр обслуговуються переривань ISR (Interrupt Service Register) - восьмирозрядний регістр, одиничне стан розрядів якого показує, переривання яких рівнів обробляються в даний момент в мікропроцесорі;  o Арбітр пріоритетів PR (Priority Resolver) - функцією даного блоку є дозвіл конфлікту при одночасному надходженні запитів на входи irq0 ... irq7;  o Блок управління - основною функцією даного блоку є організація інформаційного обміну контролера переривань і мікропроцесора через шину даних. На цей блок замикаються як висновки d0 ... d7, так і деякі інші.  Розглянемо можливі проходження і обробку сигналу переривання від деякого зовнішнього пристрою. При цьому скористаємося структурною схемою контролера переривань і позначення не ній (рис.2).  Припустимо, на вхід irq0 надходить сигнал переривання, що призводить до встановлення нульового біта регістра IRR. Цей регістр пов'язаний з регістром маски IMR, стан бітів якого визначає, які рівні переривань заборонені (одиничні біти) або дозволені до обробки (нульові біти). Управління даними регістром здійснюється через порт 21h. Таким чином, якщо біт 0 в IMR дорівнює нулю, то переривання рівня 0 дозволено. Далі сигнал надходить до арбітра пріоритетів. Як ми вже відзначили, функція цього блоку - вирішення конфліктів при одночасному надходженні запитів на кілька рівнів. Зазвичай найвищий пріоритет у рівня irq_0, і далі зменшується з зростанням номера рівня. Якщо конфлікту немає, то сигнал надходить на схему управління контролером переривань, яка формує сигнал на виведенні int. Цей висновок пов'язаний зі входом мікропроцесора INTR. Таким чином, сигнал на вході i8259A досяг мікропроцесора.

Відзначимо важливі моменти на цьому етапі:  1. Аналізується прапор IF. Одиничне стан цього прапора говорить про те, що апаратні переривання дозволені, нульове - заборонені.  2. Якщо переривання заборонені, то запит на переривання «повисає» до моменту установки IF в одиницю.  3. Якщо переривання дозволені, мікропроцесор виконує наступні дії:  o Скидає прапор IF в нуль;  o Формує сигнал підтвердження переривання на виведенні мікропроцесора INTR. Цей висновок мікропроцесора замкнутий на однойменний висновок мікросхеми i8259A.  Таким чином, сигнал про переривання пройшов через мікропроцесор і повернувся назад в контролер переривань i8259A через висновок INTA. Даний висновок всередині контролера переривань замкнутий на його схему управління, яка виконує відразу декілька дій при вступі цього сигналу:  1. Скидає біт в регістрі IRR, що відповідає рівню переривання irq_0.  2. Встановлює в 1 біт 0 регістру ISR, тим самим фіксуючи факт обробки переривання рівня 0 в мікропроцесорі.  3. Формує за допомогою блоку керування номер вектора переривання, значення якого формується в буфері даних і далі надходить на висновки i8259A d0 ... d7. Висновки d0 ... d7 замкнуті на шину даних, по якій номер вектора надходить в мікропроцесор. У мікропроцесорі цей номер використовується для виклику відповідної процедури обробки переривання.  На даному етапі обробки переривання, після того як номер переривання по шині даних вступив в мікропроцесор, останньому стало відомо все про джерело переривання. Якщо в цей час прийде інший сигнал про переривання того ж рівня, то він буде запам'ятати установкою біта в IRR, і обслуговування цього переривання буде відкладено. Якщо приходить переривання іншого рівня, то його подальша обробка залежить від пріоритету, який воно має по відношенню до вже оброблюваним перериваннях. Якщо пріоритет вище, то поточна процедура обробки переривання зупиняється, і викликається процедура обробки більш пріоритетного переривання.  Дуже, важливий момент пов'язаний з процесом завершення обробки переривання. Проблема тут в наступному. Після прийняття мікропроцесором запиту на обслуговування переривання вконтролері встановлюється біт в регістрі ISR, номер цього біта відповідає рівню переривання. Установка біта з даним номером блокує всі переривання рівня, починаючи з поточного, і менш пріоритетні у блоці-арбітра пріоритетів. Якщо процедура переривання закінчить свою роботу, то вона сама повинна це біт скинути, інакше всі переривання цього рівня і менш пріоритетні будуть ігноруватися. Для здійснення такого скидання необхідно надіслати код 20h в порт 20h. Є й інша можливість - встановити такий режим роботи мікросхеми i8259A, коли скидання цього біта буде здійснюватися автоматично. Тонкий момент полягає в тому, що відбуватися такий автоматичне скидання буде з приходом сигналу INTA (тобто повідомлення про те, що запит на обробку переривання прийнятий до обробки мікропроцесором). Недолік автоматичного скидання в тому, що існує ймовірність приходу переривання того ж рівня, який вже обробляється в даний в даний момент мікропроцесором. У цьому випадку процедура обробки переривання повинна мати властивість рентабельності, тобто допускати повторне звернення до себе до завершення обробки попереднього звернення. Для того щоб процедура була рентабельною, вона повинна мати специфічну структуру, зокрема, для кожного сеансу звернення до неї створюється своя область для зберігання змінних і значень регістрів, а виконується частина процедури знаходиться в оперативній пам'яті тільки в одному екземплярі. Іноді може знадобитися подібний автоматичне скидання, але надійніше і простіше, звичайно, контролювати цей процес і самостійно скидати біт в ISR. Це можна зробити або в кінці роботи процедури, або в тому місці процедури, починаючи з якого можна дозволити рекурсивний виклик даної процедури, будучи впевненим, в тому, що вона не зруйнує ніяких даних і роботу програми в цілому.  Інший не менш цікавий момент полягає в тому, що мікропроцесор при прийнятті до обробки запиту на переривання скинув прапор IF в нуль, тим самим заборонивши всі наступні апаратні переривання. Цією обставиною програміст може користуватися на свій розсуд. Всі запити на переривання з пріоритетом, рівним поточному або меншим, будуть заборонені в будь-якому випадку, - це обумовлено логікою роботи контролера i8259A. Тому програміст повинен вирішити, наскільки його задумам можуть перешкодити запити на більш пріоритетні переривання. Якщо це некритично, то краще відразу, на початку процедури обробки переривання встановити прапор IF в одиницю. У більшості випадків ЕТК операцію потрібно робити якомога раніше. Для установки прапора IF в одиницю в системі команд мікропроцесора є спецальная команда, яка не має операндів: 

sti - дозволити апаратні переривання.  Найбільш наочний приклад, що показує важливість своєчасної установки IF, пов'язаний з відліком часу. Розглянемо, як ведеться облік часу в комп'ютері. Як після включення комп'ютер визначає час поточний час доби або як він запам'ятовує інформацію про свою конфігурації після вимкнення? Вся справа в тому, що комп'ютер має невелику незалежну пам'ять, яка живиться від акумулятора і не залежить від підключення до електромережі. Конструктивно ця пам'ять виконана на спеціальний тип напівпровідникових елементів з так званої CMOS-структурою (Complementar Metal Oxide Semiconductor - компліментарна МОН - структура). Особливість таких елементів - у їх зниженою в порівнянні зі звичайними мікросхемами споживаної потужності (при цьому вони є і більш повільними, що в даному випадку не негативно). Акумулятор крім CMOS-пам'яті живить ще й мікросхему системних годин, у функції якої входить відлік поточних дати і часу доби. Таким чином, поточні значення дати і часу постійно зберігаються в CMOS-пам'яті і підтримуються в актуальному стані навіть після виключення комп'ютера. Крім того, в CMOS-пам'яті зберігається деяка інша інформація, зокрема, про конфігурацію комп'ютера. Під час завантаження комп'ютера дата і час зчитуються в область даних BIOS. Подальший відлік часу, після завантаження системи, ведеться за допомогою системного таймера - інший мікросхеми на системній платі, до функцій якої входить регулярно, приблизно 18.2 рази в секунду, генерувати сигнал, який у якості переривання подається на рівень irq0 контролера переривань i8259A. Під час роботи комп'ютера відповідна програма BIOS обробляє переривання даного рівня і веде відлік часу. Якщо втрачати такти з цього входу, то фактичний час на годиннику буде відставати, і тому в більшості випадків у обробниках переривань є сенс, як можна раніше видавати команду sti.