- •Архітектура пеом
- •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.Алгоритм сегмента сторінкової адресації.
10.Сигнальне переривання від годинника реального часу (rtc).
Сигнальне переривання
Прграма CPU отримує значення будильника і каледаря шляхом читання
байтів через порти 70h і 71h.
В 70h вказуємо адресу необхідного байта +80h(d7=1) і потім з порту 70h
читаємо/записуємо потрібну інформацію.
Зміст 10-и байтів 00h-09h – це годинник (календар, будильник) повинен
бути двійковим або двійково-десятковим.
При ініціалізації даних комірок памяті треба заборонити корекцію, тобто
d7=1 в регістрі В.
Байти годин, календаря і будильника не завжди доступні програмісту. 1 раз
в секунду всі 10 байтів перемикаються на корегування, підчас якої неможливо
прочитати істинне значення байтів.
Три байти будильника можуть бути використані двома способами:
1. Коли програма встановлює час будильника у відповідних байтах годин,
хвилин, секунд, кожен день у вказаний час виробляється переривання
будильника;
2. Якщо встановлений розряд дозволяє переривання D5 регістру В;
3. Якщо 2 старших байти встановити в одиницю, то пе6реривання
відбуватиметься кожні 2 години.
11. Періодичне переривання від годинника реального часу (rtc).
Годинник реального часу
Щасливі годин не спостерігають.
Олександр Сергійович Грибоєдов
Годинник реального часу (Real Time Clock, RTC) - чудовий пристрій, дуже привабливе як приклад:
Воно вміє генерувати періодичні переривання
Приєднано до веденого ПКП, що дозволяє поставити набагато більше експериментів.
Єдина проблема - просто так RTC працювати не буде, його теж треба трохи програмувати. На щастя, це не складно. У RTC досить багато регістрів, але для роботи з нею використовується тільки два порти: 70h і 71h. Порт 70h - індексний, в нього записується номер регістра RTC, який буде прочитаний / записаний при наступному зверненні до порту 71h. Якщо поспіль йде кілька звернень до одного й того ж регістру RTC (наприклад, читання - накладення маски - запис нового значення), перевстановлювати значення індексу необов'язково.
Нижче, з самими мінімальними поясненнями, приведений код, який використовується у прикладі, за більш детальною інформацією звертайтеся, наприклад, до [Зубков 1999].
Переклад RTC в режим періодичних переривань:
; Разрешение периодического прерывания RTC
mov al, 0bh ; прочитать регистр 0Bh
out 70h, al
in al, 71h
or al, 01000000b ; Установить шестой бит в 1
out 71h, al ; Записать обратно
Аналогічно, повернення в режим за замовчуванням:
; Запрещение периодического прерывания RTC
mov al, 0bh ; прочитать регистр 0Bh
out 70h, al
in al, 71h
and al, 10111111b ; Сбросить шестой бит
out 71h, al ; Записать обратно
Налаштування частоти переривань:
; Установка частоты периодического прерывания RTC
mov al, 0ah ; прочитать регистр 0Ah
out 70h, al
in al, 71h
or al, 0fh ; Четыре младших бита определяют частоту.
; 1111 - 2 раза в секунду.
out 71h, al ; Записать обратно
Після виникнення переривання, RTC встановлює прапори (вам не важливо які :)) в регістрі 0Ch, при читанні цього регістра прапори скидаються. А поки вони не скинуті, нових переривань не відбувається (аналог списку оброблюваних переривань ВКП і команди завершення обробки переривання).
; Читаем из регистра 0Ch RTC, иначе прерываний больше не будет
mov al, 0ch
out 70h, al
in al, 71h
