Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНА РОБОТА3.docx
Скачиваний:
5
Добавлен:
17.11.2019
Размер:
235.48 Кб
Скачать

4. Керуючі сигнали t0 і t1.

T0: лінія читання сигналу синхронізації;

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

5. Інтерфейс 8042 з клавіатурою.

Клавіатура з'єднана з системним блоком комп'ютера 4-х провідним екранованим кабелем через спеціальний роз’єм клавіатури. Призначення ліній інтерфейсу:

1 - живлення +5 в;

2 - лінія заземлення;

3 - лінія синхронізації;

4 - лінія даних (двонапрямлена).

Дані з контролера в клавіатуру і навпаки в IBM PC/AT передаються в 11-бітному послідовному коді:

1 біт - стартовий (завжди 0),

2 - 9 - дані,

10 - паритет,

11 біт - стоповий (завжди 1).

Передача даних супроводжується синхросигналами, що постійно генеруються клавіатурою. Контролер системного блоку 8042 може заблокувати лінію синхронізації встановленням в нуль 6-й біт порту Р2, і перевести лінію в нульовий стан, заборонивши завдяки цьому посилку даних від клавіатури (клавіатура перед посилкою перевіряє стан лінії синхронізації).

6. Програмування контролера.

Строго кажучи, мікросхема 8042 контролера клавіатури системного блоку (контролер 1 рис. 5.1), а також аналогічна мікросхема блоку клавіатури (контролер 2) програмується виробником шляхом запису в ПЗП внутрішнього програмного забезпечення. Але з боку процесора контролеру 1 можна посилати певні команди через порт 64h, а якщо команда містить байт даних, то він передається через порт 60h. Перед записом в порт 64h або 60h необхідно перевіряти стан вхідного буферу, тобто при читанні з порту 64h розряд 1 повинен бути рівний 0. Команди, що посилаються контролеру, є "псевдокомандами", бо насправді є кодами для внутрішнього програмного забезпечення, що і виконує всі дії по реалізації команди.

Режим роботи контролера задається так званим командним байтом, призначення розрядів якого наступне:

0: дозвіл переривання від клавіатури, 0 - заборонити переривання, 1 - генерувати переривання (розряд 4 порту Р2) при заповненні вихідного буферу;

1: резерв, повинен бути рівний 0;

2: системний прапорець, відповідає біту 2 регістру стану;

3: 0 - підпорядкуватись заборонному замку клавіатури, 1 - ігнорувати замок клавіатури;

4: 0 - дозволити інтерфейс клавіатури, 1 - заборонити інтерфейс клавіатури;

5: 0 - використовуються 11-ти розрядні коди PC/AT, 1 - використовуються 9-ти розрядні коди PC/XT;

6: сумісність з IBM PC/XT; 0 - отримані від клавіатури коди передаються без перетворень (режим IBM PC/AT), 1 - коди перетворюються в формат IBM PC/XT;

7: резерв, повинен бути рівний 0.

Нижче приводиться перелік команд контролера 8042.

20h: помістити поточний командний байт в вихідний буфер для наступного читання (з 60h);

60h: завантажити новий командний байт (60h посилається в 64h, командний байт в 60h); збіг коду команди з кодом порту - це випадковість;

А5h: спеціальне читання; в вихідний буфер читається значення вихідного порту Р2, причому розряди 4 і 5 інтерпретуються по іншому: в четвертому розряді 0 - заборонено переривання, 1 - дозволено; в 5-ому розряді 0 - клавіатура ХТ, 1 - клавіатура АТ;

ААh: ініціалізація портів Р1 і Р2, очистка буферу, заборона клавіатури. В кінці ініціалізації в вихідному буфері код 55h;

ABh: тестування інтерфейсу. Результати тестування в вихідному буфері (00h - немає помилки, 01h - лінія синхронізації "нульова"; 02h - лінія синхронізації "одинична", 03h - лінія даних "нульова", 04h - лінія даних "одинична";

АСh: резерв діагностики;

АDh: заборона клавіатури (встановлення в одиницю 4-го біта командного байта);

АЕh: дозвіл клавіатури (встановлення в 0 4-го біта командного байта);

С0h: читання вхідного порту Р1 в вихідний буфер;

D0h: читання поточного стану вихідного порту Р2 в вихідний буфер;

D1h: запис байта в вихідний порту (байт передається через порт 60h);

E0h: читання сигналів T0 (в 0-й розряд) і T1 (в 1-й розряд) вихідного буферу;

FXh: пульсація (переклад на 2-6 мкс в 0) розрядів вихідного порту Р2. Чотири розряди команди (Х) відповідають розрядам 0 – 3 порту Р2, що будуть пульсувати.

Блок клавіатури

Як видно з рис. 5.1 основними модулями блоку клавіатури є матричні перемикачі клавіш, мікрокомп’ютер Intel 8048 (використовуються також мікросхеми 8049, 8748, 8749, що відрізняються обсягами ОЗП, ПЗП, внутрішніми регістрами і можливостями внутрішнього програмного забезпечення контролер 2 рис. 5.1) і блок індикаторів клавіатури. 8048 в своєму ПЗП містить внутрішнє програмне забезпечення і коди сканування клавіш (так звані скан-коди), 128 байт ОЗП використовується як внутрішній буфер клавіатури.

Якщо оператор натисне на будь-яку клавішу, то відповідні вертикальна і горизонтальна лінії виявляться замкнутими. Коли на цій вертикальній лінії процесор встановить значення логічного нуля, те рівень напруги на горизонтальній лінії також буде відповідати логічному нулю. Як тільки на одній з горизонтальних ліній з'явиться рівень логічного нуля, клавіатурний процесор фіксує натиск на клавішу. При натисканні або відпусканні клавіші 8048 шукає в ПЗП скан-код, присвоєний цій клавіші. Крім того, 8048 розрізняє етапи натискання або відпускання клавіш. Відпускання клавіші, в більшості випадків, відзначається встановленням в 1 старшого біта скан-коду. Після визначення правильного скан-коду 8048 підготовлюється до пересилання 11-байтного коду контролеру 8042, розташованого на системній платі. В IBM PC і IBM PC/XT, у яких на системній платі для керування клавіатурою використовується мікросхема 8255 контролер клавіатури передає 9-ти розрядні коди по ланцюжку; інтерфейс - 8-ми розрядний зсувний регістр LS328 - порт 60h схеми 8255. Причому стартовий біт 9-ти розрядного коду є водночас запитом на переривання (надходить на вхід IRQ1). Перед посилкою скан-коду контролер клавіатури 8048 перевіряє наявність синхроімпульсів на лінії синхронізації (перевірка доступності інтерфейсу). Синхроімпульси CLOC генеруються 8048 на вихідний лінії P26 порту P2 і зчитуються (для контролю) по входу T0.

Якщо скан-код не може бути переданий безпосередньо в даний момент (блокований інтерфейс), він заноситься в буфер ОЗП клавіатури, що є буфером скан-кодів (не слідує плутати цей буфер з 16-символьним кільцевим буфером в області даних системи, що використовуються програмою INT 09H для зберігання символів). Якщо буфер скан-кодів наповнений, то відбувається переповнення і дані втрачаються. В такому випадку 8048 інформує про це системний блок, посилаючи спеціальний скан-код FFh, а переривання INT 09h вказує користувачу на переповнення буферу клавіатури звуковим сигналом. Переповнення, однак, відбувається досить рідко. Але переповнення буферу клавіатури в ОЗП може легко відбутися в випадку, якщо прикладна програма поволі обробляє натискання на клавіші. Передача скан-код виконується послідовним 11-битним сигналом по вихідній лінії P28 порту P2, а прийом керуючих байтів від 8042 відбувається по входу T1. До входів X1 і X2 підключається схема генератора внутрішніх синхросигналів мікрокомп’ютера 8048 (ГСІ). Після отримання останнього біта даних від 8048 контролер системного блоку 8042 знову перетворює скан-код у вхідний 1-байтний вигляд шляхом пересилання внутрішнім програмним забезпеченням 8042 в свій вихідний буфер (порт 60h) з одночасним видаванням запиту на переривання на вхід IRQ1, і блокуванням інтерфейсу до закінчення розшифровки отриманого скан-коду. Запит на переривання обробляється контролером переривання PIC 8259A, в результаті чого буде викликаний оброблювач переривань клавіатури INT 09h.

Робота оброблювача INT 09h

Перше, що виконує INT 09h - одержує скан-код. Програма INT 09h зчитує скан-код з порту 60h, перетворює його в символ ASCII і запам’ятовує скан-код і символ в буфері клавіатури в ОЗП.

Після того, як програма INT 09h прочитає скан-код, вона дасть "зелене світло" на посилку нового скан-коду подаванням команди AЕh в 64h порт.

Якщо натиснути на клавішу і не відпускати її, клавіатура перейде в режим автоповторення. В цьому режимі в системний блок автоматично через деякий проміжок часу, що називається періодом автоповторення, посилається код натиснутої клавіші.

Як тільки скан-код і його ASCII-еквівалент будуть збережені в буфері, а клавіатура отримає дозвіл роботи, програмі INT 09h залишається тільки повідомити PIC, що вона завершила роботу і передати керування перерваній програмі. Це виконується посилкою сигналу EOI, закодованого як 20h, в порт PIC 20h. Збіг номера порту і коду є чисто випадковим. Сигнал EOI скидає в регістрах ISR і IRR біт, зв'язаний з IRQ, звільняючи лінію запиту. PIC тепер може розпочати обробку апаратних переривань з більш низьким пріоритетом, включаючи і наступний IRQ1.

INT 09h є апаратно-залежною функцією, тому програма для 83-клавішної клавіатури відрізняється від версії програми для розширеної 101-клавішної клавіатури. Для 83-клавішної клавіатури код відпускання дорівнює коду натискання плюс 80h, що встановлює старший біт скан-коду. Це діє і для більшості клавіш розширеної клавіатури, однак для нових (додаткових) клавіш – посилається серія скан-кодів, деякі з яких мають старший біт, встановлений в 1 навіть при натисканні на клавішу.

Скан-код, зчитуємий програмою INT 09h з порту 60h в більшості випадків є числом, визначаючим відносне положення клавіші на клавіатурі. Так скан-код 01h відноситься до клавіші Esc, 02h – до клавіші !/1 і т.п.

Для дешифрування скан-кодів INT 09h має спеціальну таблицю пошуку. Як тільки скан-код розшифрований, INT 09h зберігає скан-код та ASCII-символ в буфері клавіатури та повертає керування перерваній програмі. Але до передачі керування INT 09h перевіряє, чи не є скан-код кодом FFh. Як вже зазначалось раніше, цей код вказує на переповнення. При знаходженні цього коду INT 09h повідомляє про це сигналом динаміка. В протилежному випадку вважається, що переповнення немає. INT 09h перевіряє таблицю пошуку в логічному порядку. Спочатку перевіряються клавіші зміни функцій: лівий та правий Shift, Ctrl, Alt та чотири фіксуємі клавіші: Insert, CapsLock, NumLock, ScrollLock.