Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Вхідній і вихідній буфери даних.Содержание книги
Поиск на нашем сайте
Контролер клавіатури з'єднаний з системною шиною даних (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; просмотров: 382; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.143.118 (0.008 с.) |