1.3.2          Апаратні переривання

В процесі функціонування персонального комп’ютера можна зустріти 4 типи переривань: 1) апаратні; 2) програмні; 3) виключні ситуації процесору (processor exceptions); 4) немаскуємі.

Апаратні переривання виникають як результат деяких зовнішніх подій та в їх генерації бере участь спеціальна мікросхема персонального комп’ютера ‑ контролер переривань, що програмується, або PIC (Programmable Interrupt Controller). Найбільш часто використовується одна або декілька мікросхем 8259А або їх функціональні еквіваленти. В архітектурі IBM PC та IBM PC XT використовується PIC на одній мікросхемі 8259А (Мал. 3), комп’ютери IBM PC AT та PS/2 використовують PIC, побудований на двох мікросхемах 8259А (Мал. 4).

Мікросхема 8259А розрахована на 8 входів ‑ запитів переривань, які називаються IRQ (Interrupt Request). Сигнали на них збуджують зовнішні пристрої: адаптери асинхронної послідовності та паралельного зв’язку, плата системного таймера тощо. Контролер переривань має в своєму змісті ряд програмуємих внутрішніх регістрів, які визначають особливості обробки запитів переривань. Доступ до регістрів здійснюється через порти. За провідною (або єдиною в IBM PC та IBM PC XT) мікросхемою 8259А закріплені 20h та 21h; для головної мікросхеми використовуються порти А0h та A1h.

Вихід головної (єдиної в однокаскадній схемі) мікросхеми 8259А контролера переривань подається на спеціальний вхід процесора (INTR). Цей вхід процесора є маскуємий: якщо прапор маскування переривань IF дорівнює одиниці, процесор здібний «відчувати» зміни стану лінії INTR (переривання дозволені); якщо ж IF дорівнює нулю, в формуванні яких бере участь PIC, називають маскуємим. Якщо переривання дозволені та встановлюється високий потенціал на лінії INTR, процесор завершує виконання поточної інструкції та відповідає двома циклами сигналу INTА.

Мал. 3. Однокаскадна схема побудови контролеру переривань

Мал. 4. Двукаскадна схема побудови контролеру переривань

Перший цикл сигналу INTА‑ це пустий цикл який готує РІС до наступного циклу. Під час другого циклу РІС розміщує на шину даних байт, який задає номер апаратного переривання. Отримавши байт номеру переривання, процесор множить його на 4, формуючи зміщення до вектору переривань в ТВП.

Процесор зберігає в стеці поточне значення регістрів прапорів CS та IP, потім встановлює в 0 прапор IF, а в CS та IP‑ значення з вектору переривання. В результаті управління передається в ISR.

Для того щоб розрізняти сигнали переривань від різних зовнішніх пристроїв, система переривань ІВМ РС побудована наступним чином. Кожний зовнішній пристрій підключений до власної лінії запиту переривань IRQ. При отриманні сигналу на лінії IRQ контролер переривань передає в процесор унікальний для даної IRQ байт номеру переривання. Відповідність ліній IRQ та номерів переривання задається програмуванням контролера переривань. Таке програмування виконується в ході початкового завантаження системи спеціальною процедурою BIOS та надалі не змінюються. В принципі, перепрограмування РІС може виконуватись в будь-який момент та деякі програми (Windows, OS/2) використовують це при завантаженні. В ході програмування РІС задаються старші 5 біт номеру переривання, молодші 3 біти генерує мікросхема 8259А, визначаючи двійковий код номера лінії IRQ. Головна (єдина) мікросхема програмується BIOSом так, щоб передавати в процесор переривання від 08h до 0Fh. Підпорядкована 8259А в ІВМ РС АТ налаштовується на передачу номерів переривань від 70h до 77h.

Крім відображення IRQ на номери переривань, РІС виконує упорядкування по пріоритету одночасно виникаючих запитів. Звичайно найбільший пріоритети має запит на лінії IRQ0, далі в порядку зменшення IRQ1, IRQ2, ..., IRQ7. Вхід процесора INTR є так званим «рівнечутливим». Це означає, що якщо процесор відчуває високий рівень, він завжди починає цикл обробки переривання. Якщо ISR яка виконується встановлює IF в 1 (а це, як правило, так і буває), збереження сигналу на лінії INTR викличе повторне входження в ту ж саму ISR, а потім входження в третій, четвертий і т.д. раз до тих пір, поки не переповниться стек. Для того щоб це не відбувалося, контролер переривань блокує генерацію сигналу INTR для поточної активної лінії IRQ до тих пір, поки ISR, що виконується, не дасть наявної вказівки зробити це. Звичайно так ISR позначає своє завершення, посилаючи в PIC команду завершення переривання, або EOI (End Of Interrupt). Якщо ISR не робить цього, контролер продовжує блокувати виробіток сигналу INTR для всіх наступних запитів переривань як по даній лінії, та і по іншим, менш пріоритетним лініям. Найчастіше команда ЕОІ‑ це запис в порт 20h (А0h для підпорядкованої мікросхеми) байта 20h. Цю команду називають «загальне завершення» (Nonspecific ЕОІ), але можливі й інші значення байту, що записуються в порт.

Будь-яка з ліній запитів IRQi може бути маскована. Спеціальний внутрішній регістр РІС зберігає бітову маску входів IRQi: біт 0 регістра маски керує IRQ0 (IRQ8 в підпорядкованій мікросхемі 8259А), біт 1 IRQ1 (IRQ9), ... ,біт 7- IRQ7 (IRQ15). Якщо біт дорівнює 0, контролер генерує сигнал на лінії INTR; якщо біт дорівнює 1, контролер не «відчуває» запит на маскованій бітом лінії IRQi.

Регістр маски запитів переривань головної мікросхеми в двокаскадній схемі (єдиної мікросхеми в ІВМ РС, ІВМ РС ХТ) доступний для читання та запису через порт 21h. Регістр маски запитів переривань підпорядкованої мікросхеми в двокаскадній схемі доступний для читання та запису через порт А1h.

Використання двокаскадної схеми для побудови контролера переривань розширює до 15 число зовнішніх пристроїв, що обслуговуються. Для двокаскадної схеми вихід INTR підпорядкованої мікросхеми 8259А подається на лінію IRQ2 головної мікросхеми. В результаті лінії запитів впорядковуються по пріоритету наступним чином: максимальний пріоритет має IRQ0, потім в порядку зменшення IRQ1, IRQ8, ..., IRQ15, IRQ3, ..., IRQ7. Як правило, РІС в ході початкового завантаження налаштовується так, що для ліній IRQ0- IRQ7 генеруються переривання з номерами 08h-0Fh відповідно, а для ліній IRQ8- IRQ15- переривання з номерами 70h-77h. Підключення зовнішніх пристроїв персональних комп’ютерів до ліній IRQ та закріплення апаратних переривань для більшості персональних комп’ютерів типу ІВМ РС фактично стандартизовано. Нижче (Табл. 1) наведені закріплення зовнішніх пристроїв та апаратних переривань для ІВМ РС АТ.

Табл. 1. Використання переривань в ІВМ РС АТ.

Лінія запиту переривання

Номер перерив.

Звичайне використання

IRQ0

8h

Системний таймер

IRQ1

9h

Клавіатура

IRQ2

0Ah

Переадресація від підпорядкованої 8259А

IRQ3

0Bh

СОМ2(чи СОМ4)

IRQ4

0Ch

СОМ1(чи СОМ3)

IRQ5

0Dh

LPT2

IRQ6

0Eh

Контролер накопичувача на гнучких дисках

IRQ7

0Fh

LPT1

IRQ8

70h

Таймер реального часу

IRQ9

71h

Переривання зворотного ходу променю EGA- і VGA-адаптера

IRQ10

72h

Вільне

IRQ11

73h

Вільне

IRQ12

74h

Вільне

IRQ13

75h

Математичний сопроцесор з плаваючою крапкою

IRQ14

76h

Контролер накопичувача на жорстких дисках

IRQ15

77h

Вільне

Двокаскадна схема РІС породжує декілька додаткових складностей для системи. Перша з них пов’язана з необхідністю видавати не одну, а дві команди ЕОІ при завершенні ISR переривань, що генеруються по запитам IRQ8- IRQ15: перша ЕОІ використовує порт 20h, друга - порт А0h. Друга проблема пов’язана з використанням лінії IRQ2. В ІВМ РС та ІВМ РС ХТ цей вхід закріплений за зовнішніми пристроями, які генерують переривання 0Аh. Але в ІВМ РС АТ лінія IRQ2 використовується підпорядкованою мікросхемою 8259А. Для збереження програмної сумісності фірма ІВМ прийняла рішення використовувати IRQ9 підпорядкованої мікросхеми 8259А як IRQ2 в «старих» комп’ютерах.

Для того щоб програма «не відчувала» відмінностей в архітектурі, використовується так звана програмна переадресація. При надходженні сигналу на лінії IRQ9 підпорядкована мікросхема 8259А передає в процесор номер переривання 71h. Обробник переривань 71h входить до складу BIOS і являє собою заглушку, яка видає команду ЕОІ на порт А0h, а потім генерує програмне переривання 0Аh (виконує інструкцію INT 0Ah). В результаті програма, яка очікує переривання 0Аh при виникненні зовнішньої події, отримує управління. А так як сам зовнішній пристрій підключений до лінії IRQ9, досягається повна «прозорість» архітектури. Програми, що використовують переривання зворотного ходу променю, що при необхідному налагодженні апаратури генерує EGA- та VGA-адаптер, перехоплюють переривання 0Ah та працюють однаково на комп’ютерах з однокаскадною та двокаскадною схемами побудови контролера переривань.