
- •Архітектура пеом
- •1. Інтервальний таймер і8253/і8254 на платі івм рс: принцип будови та функціонування
- •2.Програмування інтервального таймера на рівні портів
- •3.!Читання конcтант перерахунку каналів інтервального таймера і8253/і8254
- •4.! Читання байту стану каналів 0-2 інтервального таймера: спосіб 1, 2.
- •5.! Системний час в івм рс: таймер bios (таймер ос).
- •6.Засоби bios та ос для роботи з таймером bios.
- •7.Реальний час в івм рс: годинник реального часу (rtc)
- •8.Функціональна схема годинника реального часу та порти доступу (rtc) на платі ibm pc.
- •9. Керуючі та регістри стану годинника реального часу (rtc).
- •10.Сигнальне переривання від годинника реального часу (rtc).
- •11. Періодичне переривання від годинника реального часу (rtc).
- •12.Програмування годинника реального часу (rtc).
- •13.Апаратна реалізація порту послідовної передачі даних на платі ibm pc, принцип побудови уапп.
- •14. Порти асинхронного адаптера та їх призначення
- •16. Контролер прямого доступу до пам’яті (dma). Призначення і основні функції
- •17.! Регістри каналів контролера прямого доступу до пам’яті (dma).
- •18.!Алгоритм ініціалізації контролера прямого доступу до пам’яті (dma).
- •19.! Реалізація прямого доступу до пам’яті (пдп) в івм рс ат
- •20.! Контролер переривань на платі івм рс (і8259): принцип будови та функціонування
- •21.Загальна схема переривань в івм рс ат
- •22.Види переривань: апаратні та програмні переривання
- •23.Особливості обробки апаратних переривань, пріоритети обслуговування запитів на переривання та їх зміна.
- •24. Суть і призначення векторів переривань. Таблиця векторів переривань та зміна її елементів.
- •25.! Порти доступу до контролера переривань на платі івм рс
- •27.Керування пам`яттю. Сегментація пам`яті.
- •28.Дескрипторні таблиці. Селектори сегментів.
- •29.Сторінкова організація пам`яті, сторінкове перетворення адреси.
- •30.Алгоритм сегмента сторінкової адресації.
23.Особливості обробки апаратних переривань, пріоритети обслуговування запитів на переривання та їх зміна.
Особливості обробки апаратних переривань.
Апаратні переривання виробляються пристроями комп'ютера, коли виникає необхідність їх обслуговування. Наприклад, по перериванню таймера відповідний обробник переривання збільшує вміст комірок пам'яті, використовуваних для зберігання часу. На відміну від програмних переривань, що викликаються заплановано самої прикладної програмою, апаратні переривання завжди відбуваються асинхронно по відношенню до виконуєтьсяпрограмою. Крім того, може виникнути одночасно відразу кілька переривань!
Для того, щоб система "не розгубилася", вирішуючи яке переривання обслуговувати в першу чергу, існує спеціальна схема пріоритетів. Кожному перериванню призначається свій унікальний пріоритет. Якщо відбувається одночасно кілька переривань, то система віддає перевагу самому високопріоритетних, відкладаючи на час обробку інших переривань.
Система пріоритетів реалізована на двох мікросхемах Intel 8259 (для машин класу XT - на одній такій мікросхемі). Кожна мікросхема обслуговує до восьми пріоритетів. Мікросхеми можна об'єднувати (каскадувати) для збільшення кількості рівнів пріоритетів в системі.
Рівні пріоритетів позначаються скорочено IRQ0 - IRQ15 (для машин класу XT існують тільки рівні IRQ0 - IRQ7).
Для машин XT пріоритети лінійно залежали від номера рівня переривання. IRQ0 відповідало найвищій пріоритету, за ним йшли IRQ1, IRQ2, IRQ3 і так далі. Рівень IRQ2 в машинах класу XT був зарезервований для подальшого розширення системи. І починаючи з машин класу AT IRQ2 став використовуватися для каскадування контролерів переривання 8259. Додані пріоритетні рівні IRQ8 - IRQ15 в цих машинах розташовуються по пріоритету між IRQ1 і IRQ3.
Наведемо таблицю апаратних переривань, розташованих в порядку пріоритету:
Номер Опис
8 IRQ0 переривання інтервального таймера, виникає 18,2 рази в секунду.
9 IRQ1 переривання від клавіатури. Генерується при натисненні і при отжатии клавіші. Використовується для читання даних з клавіатури.
A IRQ2 використовується для каскадування апаратних переривань в машинах класу AT.
70 IRQ8 переривання від годинника реального часу.
71 IRQ9 переривання від контролера EGA.
72 IRQ10 зарезервовано.
73 IRQ11 зарезервовано.
74 IRQ12 зарезервовано.
75 IRQ13 переривання від математичного співпроцесора.
76 IRQ14 переривання від контролера жорсткого диска.
77 IRQ15 зарезервовано.
B IRQ3 переривання асинхронного порту COM2.
C IRQ4 переривання асинхронного порту COM1.
D IRQ5 переривання від контролера жорсткого диска для XT.
E IRQ6 переривання генерується контролером флоппі диска після завершення операції
F IRQ7 переривання принтера. Генерується принтером, коли він готовий до виконання чергової операції. Багато адаптери принтера не використовують це переривання.
З таблиці видно, що найвищий пріоритет у переривань від інтервального таймера, потім йде переривання від клавіатури.
Для управління схемами пріоритетів необхідно знати внутрішній устрій контролера переривань 8259. Вступники переривання запам'ятовуються в регістрі запиту на переривання IRR. Кожен біт з восьми в цьому регістрі відповідає перериванню. Після перевірки на обробку в даний момент іншого переривання запитується інформація з регістра обслуговування ISR. Перед видачею запиту на переривання в процесор перевіряється вміст восьмибитового регістра маски переривань IMR. Якщо переривання даного рівня не замасковано, то видається запит на переривання.
Найбільш цікавими з точки зору програмування контролера переривань є регістри маски переривань IMR і керуючий регістр переривань.
У машинах класу XT регістр маски переривань має адресу 21h, керуючий регістр переривань - 20h. Для машин AT перший контролер 8259 має такі ж адреси, що і в машинах XT, регістр маски переривань другого контролера має адресу A1h, керуючий регістр переривань - A0h.
Розряди регістра маски переривань відповідають номерам IRQ. Для того, щоб замаскувати апаратне переривання-якого рівня, треба заслати в регістр маски байт, в якому біт, відповідний цьому рівню, встановлений в 1. Наприклад, для маскування переривань від НГМД в порт 21h треба заслати двійковечисло 01000000.
Наведемо приклад програми, що маскує переривання від флоппі-диска:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main(void);
void main(void) {
outp(0x21,0x40);
printf("\nПрерывания от флоппи-диска запрещены.\n");
exit(0);
}