Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи Степаненко.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
3 Мб
Скачать
☆

Лабораторна робота № 9 дослідження методів програмного керування контролером клавіатури

Мета роботи:

вивчити методи програмного доступу до регістрів контролера i8042;

 навчитись розрбляти програми, що аналізують стан програмно доступних регістрів i8042;

навчитись ідентифікувати коди станів контролера клавіатури;

 навчитись використовувати можливості програмного керування клавіатурою в прикладних програмах.

Теоретичні відомості

1. Контролер клавіатури pc/at i8042

Програмований контролер i8042 застосовується в машинах класу AT. Його

вбудоване програмне забезпечення зберігається в масковому внутрішньому ПЗП і не допускає змін. Ця програма забезпечує видачу запиту на переривання при

прийомі скан-кода від клавіатури і видачу керуючих команд від центрального процесора. Крім керування клавіатурою, через програмно доступні лінії зовнішніх портів контролера формуються сигнали керування вентилем Gate A20, апаратного системного скидання і зчитуються сигнали від конфігураційних перемикачів системної плати. Контролера i8242B, окрім інтерфейса клавіатури, підтримує і аналогічний інтерфейс додаткового пристрою, наприклад PS/2 – Mouse.

2. Порти контролера клавіатури

Контролер i8042 має наступні порти:

 8-розрядний вихідний порт для контролю системних функцій та зв’язку з клавіатурою;

8-розрядний вхідний порт для зчитування стану системних функцій;

 2-розрядний TEST-порт для прийому стану ліній Clock і Data.

Таблиця 1 – Вихідний порт контролера i8042

Біт

Значення

D0

1 – системне скидання

D1

0 – адресація до 1 Мб (Gate A20)

1 – адресація вище 1 Мб (Gate A20)

D3, D2

00 – не використовуються

D4

1 – вихідний буфер повний

D5

1 – вхідний буфер очищено

D6

Clock у клавіатуру

D7

Data у клавіатуру

Запис у вихідний порт здійснюється послідовністю команд:

72

 запис команди D1h у порт 64h;

запис значення в порт 60h.

Послідовність команд для читання з вихідного порту:

запис команди D0h у порт 64h;

читання буфера – порт 60h.

Перед передачею команд та даних у порти 61h та 60h необхідно звільнити буфер контролера i8042 – порт 60h.

Таблиця 2 – Вхідний порт контролера i8042

Біт

Значення

D1, D0

00 – не використовуються

D2

0 – співпроцесор встановлено

1 – співпроцесор не встановлено

D3

0 – встановлено співпроцесор i80287 (4 МГц)

1 – встановлено співпроцесор i80287 (8 МГц)

D4

0 – після ввімкнення живлення вибрана швидкість AUTO

1 – після ввімкнення живлення вибрана швидкість HIGH

D5

0 – DIP СП ввімкнено контакт 5 (резерв)

1 – DIP СП вимкнено контакт 5 (резерв)

D6

0 – застосовано монітор COMPAQ

1 – застосовано інший монітор

D7

0 – замок замкнено

1 – замок відкрито

сті:

Читання значень вхідного порту контролера відбувається в такій послідовно-

 запис команди C0h у порт 64h;

читання вихідного буфера (порт 60h) контролера.

Зчитування значень вхідного порту TEST та посилання інформації в контро-

лер i8042 здійснюється так:

запис команди E0h у порт 64h;

 читання вихідного буфера (порт 60h).

Таблиця 3 – Байт TEST контролера i8042

Біт

Значення

D0

Тест 0 – Clock з клавіатури

D1

Тест 1 – Data з клавіатури

D7 – D2

000000 – не використовуються

Контролер i8042 має системні порти з адресами 60h (регістр даних в/в) та 64h

(регістр команд/регістр стану).

Перед записом команди або даних у порт 60h або 64h регістр стану контроле-

ра повинен показати, що вхідний буфер вільний; перед читанням даних з порту

60h перевірка регістра стану повинна свідчити, що дані знаходяться у буфері.

73

Процесор системного блока ПЕОМ використовує команду IN для читання даних з вихідного буфера (порт 60h) контролера.Інформація в регістр даних в/в (порт 60h) з клавіатури буде передана по команді 20h – “Читання командного байта”. Для передачі даних у клавіатуру процесор i8042 використовує команду OUT у багатобайтній команді 60h – “Запис командного байта”. При передачі багатобайтної команди в клавіатуру перший командний байт записується в порт

64h, а другий – у порт 60h.

Команда IN, звернена процесором системного блока до порту 64h, викликає читання стану контролера i8042 та клавіатури.

Таблиця 4 – Порт 64h, регістр стану

Біт

Значення

D0

0 – даних у буфері (порту 60h) немає

1 – дані в буфері (порт 60h)

D1

0 – буфер вільний (60h або 64h)

1 – буфер повний (порт 60h або порт 64h)

D2

0 – скидання за ввімкненням живлення (холодний старт)

1 – програмне скидання (гарячий старт)

D3

0 – у вихідному буфері дані

1 – у вихідному буфері команда

D4

0 – замок закрито

1 – замок відкрито

D7 – D5

001 – немає передачі

011 – передача є, немає відповіді

101 – передача є, помилка парності

За командою OUT (порт 64h) процесор передає команду в контролер i8042.

Запис у порт 64h свідчить про те, що наступний байт, записаний у порт 60h –

командний.

Таблиця 5 – Порт 64h, регістр команд

Біт

Значення

D0

0 – переривання не виконувати

1 – переривання виконувати

D1

0 – резерв

D2

Системний прапорець записується в поточний розряд регістра стану

D3

0 – підпорядкування замку

1 – ігнорування замка

D4

0 – дозвіл клавіатури

1 – заборона клавіатури

D5

0 – використання 11-розрядного клавіатурного коду (i80286, i80386)

1 – використання кодів, сумісних з i8086 та i8088

D6

0 – перетворення клавіатурних кодів немає

1 – перетворення клавіатурних кодів у скан-коди, сумісні з i8086/88

D7

0 – резерв

74

Таблиця 6 – Деякі командні коди контролера i8042

Код

Функція

20h

Завантаження поточного командного байта в порт 60h

60h

Завантаження нового командного байта (двобайтова операція):

1) запис 60h у порт 64h;

2) запис командного байта в порт 60h

AAh

Ініціалізація: контролер ініціалізує вхідний та вихідний порти,

відключає клавіатуру та очищує буфери; у вихідний буфер (порт 60h)

поміщується код 55h

ADh

Заборона клавіатури: встановлення розряду 4 командного байта (порт

64h) контролера

AEh

Дозвіл клавіатури: скидання розряду 4 командного байта (порт 64h)

контролера

C0h

Читання вхідного порту: передача контролером стану вхідного порту у

вихідний буфер (порт 60h). Команда використовується при вільному вхідному буфері (порт 60h)

D0h

Читання вихідного порту: передача контролером поточного значення

вихідного порту у вихідний буфер (порт 60h). Команда використовується при очищеному буфері (порт 60h)

D1h

Запис вихідного порту: розміщення наступного байта, записаного в

регістр даних (порт 60h), у вихідний порт контролера. Команду D1h слід використовувати илше для зміни розряду 1

E0h

Читання вхідних ліній Test 0 і Test 1: контролер розміщує поточний

стан Test 0 і Test 1 у вихідному буфері (порт 60h)