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

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