
- •Архітектура пеом
- •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.Алгоритм сегмента сторінкової адресації.
21.Загальна схема переривань в івм рс ат
Створюючи IBM PC / AT, фірма IBM вирішила подвоїти кількість ліній запитів переривань і застосувала два контролери типу 8259, з'єднавши їх каскадно. Ведучий контролер переривань обслуговував запити переривань по лініях IRQ0-IRQ7, ведений - по лініях IRQ8-IRQ15. Вихідна лінія запиту переривання відомого контролера надходила на одну з вхідних ліній (IRQ2) ведучого; для підключення зовнішніх пристроїв використовувалися всі вісім вхідних ліній відомого контролера і сім (IRQ0, IRQ1 і IRQ3-IRQ7) ведучого, що в сумі давало 15 ліній.
Така схема обробки переривання стала стандартною. Однак вона має цілий ряд недоліків, найважливішими з яких є нестача ліній запитів переривань (15 штук сучасного комп'ютера не вистачає) і нездатність працювати в багатопроцесорної системі. Останнє особливо актуальним стало з появою багатоядерних процесорів, адже кожне ядро з точки зору програміста є окремим процесором. Ці проблеми були загалом вирішені шляхом розробки удосконаленого програмованого контролера переривань (APIC), проте в цілях сумісності традиційний PIC і раніше підтримується і використовується старими операційними системами, які не вміють працювати з APIC. Слід зауважити, що сучасні варіанти PIC, що входять, як правило, в мікросхему південного мосту чіпсета системної плати, підтримують лише частина можливих режимів вихідної пари контролерів 8259. Так, з очевидних причин викинута можливість роботи PIC з мікропроцесором 8080. У наступних розділах будуть описані тільки ті можливості контролера переривань, які присутні в його сучасних реалізаціях.
Загальна схема обробки переривання
Перед початком роботи контролер переривань слід буде почати посилкою в нього групи командних слів ініціалізації (ICW). Оскільки контролер переривань IBM PC / AT складався з двох мікросхем 8259 і ця схема емулюється усіма сучасними ПК, при ініціалізації необхідно видати відповідні ICW і ведучому, і веденого контролерам. Детальніше послідовність ініціалізації описана нижче, у підрозділі «Ініціалізація контролера переривань».
Після завершення ініціалізації контролери починають обробляти запити, що надходять переривань. Загальний алгоритм їх обробки стосовно до однієї мікросхемі 8259 наступний.
Запити надходять по восьми лініях IRQ, причому залежно від встановленого режиму запитом може вважатися або наявність на лінії IRQ високого рівня, або позитивний перепад сигналу на цій лінії (тобто перехід з низького рівня у високий). В оригінальному контролері 8259 спосіб фіксації запиту - за рівнем (Level Mode) або по позитивному перепаду (Edge Mode) сигналу IRQ - встановлювався для всієї мікросхеми в цілому, проте в сучасних комп'ютерах від цього відмовилися, ввівши спеціальні регістри, за допомогою яких для кожної лінії IRQ метод виявлення запиту вказується індивідуально. Докладніше про це буде говоритися в описі регістрів PIC, а також у підрозділі «Фіксація запитів переривань і розділення ліній IRQ».
Виявлені запити запам'ятовуються в регістрі запитів переривань - IRR (Interrupt Request Register). Кожен біт цього регістра відповідає одній лінії IRQ. Біт IRR дорівнює 1, якщо було отримано запит від відповідної лінії, і 0, якщо запиту по цій лінії не надходило.
Окремі лінії IRQ можуть бути замасковані за допомогою регістра маскування переривань - IMR (Interrupt Mask Register). Установка будь-якого біта цього регістра маскує запити по відповідній лінії IRQ: вони приймаються і фіксуються в IRR звичайним чином, але їх обробка не виконується доти, поки відповідний біт в IMR НЕ буде скинутий.
Третім і останнім внутрішнім регістром контролера є регістр обслуговуваних переривань ISR (Interrupt Service Register). Коли контролер переривань обробляє переривання і видає процесору його вектор, відповідний йому біт в ISR встановлюється, а в IRR скидається. Установка деякого розряду ISR в загальному випадку блокує обробку нових переривань, що надходять по тій же лінії IRQ, а також всіх переривань з меншим пріоритетом. Скидання розрядів ISR виконується по командах процесора, якими він повідомляє контролер переривань, що обробка того чи іншого переривання завершена (подпробнее про це йдеться у підрозділі «Закінчення обробки переривання»). Таким чином, IRR показує, які переривання очікують обробки, а ISR - які обробляються в даний момент.
Контролер переривань постійно аналізує наявність незамаскованими запитів переривань, тобто одиничних бітів IRR, що не замаскованих одиничними бітами IMR і ISR. Якщо є хоча б один незамаскованими запит, контролер видає сигнал на свій вихід запиту переривання (INTR) і очікує надходження сигналу підтвердження переривання (INTA), отримавши який, видає вектор найбільш пріоритетного з наявних незамаскованими запитів, скидає відповідний йому біт IRR та встановлює біт ISR , після чого продовжує приймати і обслуговувати запити (технічно вектор переривання видається за другим сигналом INTA, однак для програміста точний протокол обміну між контролером переривань і процесором ролі не грає, тому детально тут не описується).