ЗНАЕТЕ ЛИ ВЫ?

Вхідній і вихідній буфери даних.



Контролер клавіатури з'єднаний з системною шиною даних (XD-шиною) з допомогою двох однобайтних регістрів – вхідного і вихідного буферів. Вихідний буфер доступний тільки для читання через 60h порт і зберігає коди сканування, отримані від клавіатури або дані, прочитані по запиту (команди контролера). Вхідний буфер доступний для запису через порт 64h (запис команд) і 60h (запис даних). При запису команди в 64h встановлюється прапорець запису команди (в регістрі стану). Байти, записані в 60h, і які не є даними для команд контролера системного блоку, відсилаються контролером клавіатури. (контролер 2, рис. 5.1)

Регістр стану (RS).

Регістр стану (RS) доступний для читання через 64h порт в будь-який час. Призначення розрядів RS:

0: стан вихідного буферу; 0 - немає нових даних,1 - є дані (можна читати через 60h);

1: стан вхідного буферу; 0 - порожній (можна писати через 60h або 64h), 1 - зайнятий (поміщені туди дані ще не прочитані 8042);

2: системний прапорець (встановлюється командою контролера 60h),0 - скидання по включенню живлення (встановлюється POST), 1 - програмне скидання;

3: тип даних в вхідному буфері; 0 - дані (був запис через 60h порт); 1 - команда (був запис через 64h порт);

4: стан ключа блокування; 0 - захисний замок закритий (клавіатура заблокована), 1 - захисний замок відкритий;

5: тайм-аут передачі, одиничне значення встановлюється на час передачі даних від контролера до клавіатури;

6: тайм-аут прийому, встановлюється в одиницю, якщо час очікування відповіді від клавіатури перевищив допустиме (2 мс), тобто відбулася помилка;

7: помилка паритету, встановлюється в одиницю при отриманні байта даних від клавіатури з парним паритетом (помилка).

Розряди 7, 6, 5 визначають помилку передачі даних між контролером клавіатури і клавіатурою. 001 - (5-й розряд в одиниці) немає синхроімпульсів; 011 - є синхроімпульс, немає відгуку; 101 - є синхроімпульс, помилка паритету.

Порт контролера 8042 (Р1, Р2).

Як було зазначено раніше, 8042 є однокристальним комп'ютером, що може обмінюватися інформацією з зовнішнім, по відношенню до нього, обладнанням через двонапрямлену шину даних (розглянута раніше) і два однобайтних порти Р1, Р2, а також входи керуючих сигналів T0, T1, (при цьому не слідує плутати фізичні порти 8042 з адресним простором портів центрального процесора 60h і 64h). До фізичних портів можуть підключатися сигнали приладів, що обслуговуються, причому Р1 - вхідний порт (читання керуючих сигналів), Р2 - вихідний порт (видавання керуючих сигналів). Управління портом виконується програмами 8042, що зберігаються у внутрішньому ПЗП. Порти Р1, Р2 не віддзеркалюються на адресний простір центрального процесора і безпосереднє керування ними з боку центрального процесора неможливе. В складі IBM PC/AT призначення розрядів означених портів приводиться нижче.

Вхідний порт Р1 (інформація про конфігурацію обладнання):

0 - 3: резерв;

4: обсяг ОЗП на системній платі, 0 - 256 Кбайт, 1 - 512 Кбайт;

5: резерв;

6: тип монітору, 0 - первинний монітор – color, 1 - первинний монітор – mono;

7: стан замка клавіатури, 0 - клавіатура заблокована (замок закритий), 1 – розблокована;

Вихідний порт Р2 (керування системними функціями і інтерфейсом з клавіатурою):

0: системне скидання; встановлення в 0 цього біта викликає програмне скидання процесора і перезавантаження системи;

1: дозвіл А20, 0 - закрита, 1 - дозволена;

2 - 3: резерв;

4: запит на переривання від клавіатури; вихідний керуючий сигнал даного розряду є входом IRQ1. Після закінчення запису даних 8042 в свій вихідний буфер він встановлює 4-й біт в одиницю (видає запит на переривання);

5: резерв;

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

7: лінія видачі даних в інтерфейс клавіатури в послідовному коді.

Розряди 6 і 7 порту Р2 виводяться на роз’єм клавіатури.

Керуючі сигнали T0 і T1.

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

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

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

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

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

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

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

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

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

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

2 - 9 - дані,

10 - паритет,

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

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

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

Строго кажучи, мікросхема 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.





Последнее изменение этой страницы: 2016-06-23; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.216.79.60 (0.008 с.)