- •Архітектура пеом
- •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.Алгоритм сегмента сторінкової адресації.
2.Програмування інтервального таймера на рівні портів
Програмування таймера здійснюється через чотири порти. Порти 40h, 41h і 42h призначені для запису початкових значень лічильників каналів 0, 1 і 2 відповідно, а також для зчитування стану каналів і поточних значень їх лічильників. Порт 43h доступний тільки для запису і призначений для програмування режимів роботи каналів. Порти 40h-43h мають «псевдоніми» в діапазоні 50h-53h.
З прикладами програмування таймера можна ознайомитися тут.
Установка режиму
Байт, керуючий режимом роботи каналу, записується в порт 43h і задає режим роботи зазначеного в ньому каналу. Призначення його розрядів наступне.
Биты |
Назначение |
7:6 |
Выбор канала:
|
5:4 |
Режим чтения/записи:
|
3:1 |
Режим работы канала:
|
0 |
Вид счёта:
|
Після установки режиму необхідно завантажити в лічильник каналу початкове значення. Це виконується через «особисті» порти каналів - 40h-42h. Які саме байти повинні бути завантажені, визначається бітами 5:4 байта установки режиму каналу.
Установка початкового значення лічильника Правити
Установка початкового значення лічильника виконується в будь-який момент після установки режиму. Вона полягає в записі одного або двох байт (стільки, скільки було вказано при установці режиму) в «особистий» порт каналу (40h-42h). Це значення зберігається у внутрішньому регістрі каналу і може використовуватися багато разів для перезавантаження лічильника, що використовується режимами роботи 1-3 і 5. Режими 0 і 4 вимагають програмної перезавантаження початкового значення після закінчення кожної операції рахунку.
Команда зчитування Правити
Команда зчитування використовується для визначення режиму, значення лічильника, стану виходу і ознаки нуля того чи іншого каналу. Вона ініціюється записом в порт 43h спеціального керуючого байта, призначення розрядів якого описано в таблиці.
Биты |
Назначение |
7:6 |
Содержат код команды «считывание» и должны быть равны 11 |
5 |
0 — текущие значения выбранных счётчиков фиксируются для последующего считывания 1 — текущие значения выбранных счётчиков не фиксируется |
4 |
0 — состояние выбранных счётчиков фиксируется для последующего считывания 1 — состояние выбранных счётчиков не фиксируется |
3 |
1 — состояние и/или текущее значение счётчика канала 2 должно быть зафиксировано |
2 |
1 — состояние и/или текущее значение счётчика канала 1 должно быть зафиксировано |
1 |
1 — состояние и/или текущее значение счётчика канала 0 должно быть зафиксировано |
0 |
Зарезервирован, должен содержать 0 |
Після того, як поточне значення лічильника і / або стан зафіксовані, вони зберігаються в чеканні зчитування, яке проводиться через «особистий» порт каналу (40h-42h). Якщо одночасно зафіксовано і стан, і значення лічильника, першим ліченим байтом буде стан, а після нього підуть один або два байти лічильника (кількість байтів збігається з встановленим при програмуванні режиму роботи каналу). Нова операція зчитування можлива тільки після завершення вже розпочатої: регістри-засувки будуть зберігати зафіксовані у них значення до тих пір, поки всі вони не будуть лічені.
Команда фіксації лічильника Правити
Команда фіксації лічильника застосовується для зчитування значення лічильника, яка мала місце на момент видачі цієї команди. За своєю функцією вона є окремим випадком команди зчитування, відрізняючись від неї тим, що працює тільки з одним каналом і не дозволяє вважати режим роботи і стан канала.
Биты |
Назначение |
7:6 |
Выбор канала:
|
5:4 |
Задают команду фиксации и должны быть равны 00 |
3:0 |
Зарезервированы и должны быть равны 0000 |
Після того, як значення лічильника зафіксовано, воно повинно бути прочитане через «особистий» порт каналу (40h-42h). Кількість підлягають прочитуванню байтів збігається з встановленим під час програмування режиму роботи каналу. До тих пір, поки зафіксоване значення не вважатиметься, нові спроби фіксації ігноруватимуться.
Зчитування стану каналу Правити
Для зчитування стану того чи іншого каналу необхідно записати команду зчитування (описана вище) в порт 43h, вказавши в ній фіксацію стану для необхідного каналу, після чого провести зчитування байта стану з «особистого» порту цього каналу (40h-42h). Якщо одночасно зі станом фіксується значення лічильника каналу, байт стану зчитується першим. Призначення розрядів байта стану наведено в таблиці.
Зчитування лічильника Правити
Зчитування значення лічильника можливо після видачі в порт 43h команд зчитування або фіксації, а також без спеціальної команди. Само зчитування виконується з «особистого» порту каналу (40h-42h), причому з нього зчитуються такі ж байти (тільки молодший, тільки старший або спочатку молодший, а потім старший), які записуються в нього відповідно до встановленого режиму роботи каналу.
Якщо зчитування проводиться без видачі команди зчитування або фіксації, фіксація значення лічильника не проводиться. Якщо встановлений режим читання двох байтів, отримане значення, цілком можливо, буде неточним, оскільки в проміжку часу між зчитуванням молодшого та старшого байтів лічильник продовжує працювати. Тому для отримання точного значення лічильника рекомендується скористатися командами прочитування або фіксації: вони завантажують значення лічильника в спеціальний регістр, вміст якого не змінюється, незважаючи на те, що сам лічильник продовжує працювати.
