Консалтинговая компания Консалтер.Ру
Главная Новости Библиотека Исследования Законодательство Консалтинг Бизнес-форумы Контакты

Реклама

Рекомендуем



Консалтер.Ру > Библиотека > Информационные технологии

В.А. Авдеев, В.Ф. Гузик
Компьютеры: шины, контроллеры, периферийные устройства

Учебное пособие. Таганрог: ТРТУ, 2001. - 536 с.

Предыдущая

8. Устройство и работа клавиатуры

8.4. Клавиатура PC/AT

Клавиатура является основным устройством ввода алфавитно-цифровых и управляющих данных, необходимых для функционирования ПК. Известны несколько типов клавиатур с различными функциональными возможностями. Например, 83-клавишная клавиатура РС/ХТ, реализованная на базе контроллера 8048, имеет ограниченные средства по диагностике и обнаружению ошибок. В РС/АТ 84-клавишная клавиатура использует микросхему 8042 с расширенными функциями. Эта клавиатура характеризуется другим расположением отдельных клавиш, наличием программного доступа и дополнительных средств по обнаружению и анализу ошибок. Расширенная 101-клавишная клавиатура использует также микросхему I8042 и употребляется в ПК РС/АТ и PS/2. Дальше будет рассматриваться только 101(102)-клавишная клавиатура.

На рис. 8.2 изображена схема связи клавиатуры и контроллера (I8042), размещенного на системной плате.

Рис. 8.2. Схема связи клавиатуры и контроллера

Клавиатура подключена к контроллеру системной платы 4-проводным экранированным кабелем. Два двунаправленных провода предназначены для передачи синхросигналов (CLK) и данных (DATA). Третий провод является сигнальным заземлением (GND), а четвертый - линией питания (5В).

По линии DATA передаются данные в виде последовательных кодовых посылок (команды, параметры, коды нажатия и отжатия, коды подтверждения), причем каждый бит данных сопровождается битом синхронизации по линии CLK.

Для управления работой клавиатуры контроллер посылает по линии DATA команды (установки и сброса индикаторов состояния, прочитать индикатор задания частоты повтора клавиши и т.д.). Клавиатура после приема команды отвечает кодом подтверждения, т.е. обмен осуществляется по принципу запрос-ответ. Если после команды со стороны контроллера поступает параметр, то клавиатура также устанавливает код подтверждения. Аналогичным образом клавиатура передает в контроллер по линии DATA код нажатия (отжатия) клавиши с обратным получением кода подтверждения. Обмен данными между клавиатурой (контроллером) и системным процессором выполняется в режимах прерывания (IRQ1) и опроса битов готовности, размещенных в байте по адресу 0040:0097h, в котором значение 10h означает полученное подтверждение, а значение 20h - повторение передачи.

Расширенная клавиатура имеет 3 режима работы, каждый из которых устанавливается с помощью соответствующих команд.

Режим 1 задается командой F0h с байтом конфигурации (параметром) 01h. В этом режиме используются 9-битовые коды нажатия (отжатия) клавиш клавиатуры PC/XT, которые не требуют преобразования и используются непосредственно процедурой INT 16h BIOS c функциями 00h, 01h и 02h.

Режим 2 устанавливается по умолчанию и употребляет 11-битовые последовательные кодовые посылки нажатия (отжатия), которые преобразуются контроллером в корды, необходимые BIOS. Для обработки данных новых клавиш, которых нет в клавиатуре PC/XT, следует использовать функции 10h, 11h и 12h процедуры INT 16h BIOS.

Режим 3 использует специальные коды клавиш, которые могут быть преобразованы только прикладными программами. Этот режим устанавливается командой F0h с байтом конфигурации 3.

Конструктивно клавиатура выполнена в виде отдельного устройства, содержащего набор клавиш, матрицу переключателей клавиш, микропроцессор (МП), буфер (FIFO) на 17 байтов, генератор синхросигналов (ГС), индикацию и интерфейс связи с контроллером (I8042), размещенных на системной плате (рис. 8.3).

Рис. 8.3. Структурная схема клавиатуры

Данные в режиме 2 передаются по линии DATA 11-битной последовательной кодовой посылкой, имеющей стартстопный формат, причем каждый бит данных сопровождается синхросигналом на линии CLK. В кодовой посылке 1 бит является стартовым, затем следует 8 битов данных, которые замыкают биты паритета (нечет) и стоповый (рис. 8.4).

Рис. 8.4. Формат 11-битовой кодовой посылки данных

В режиме 1 используется 9-битовая кодовая посылка без битов паритета и стопового, а стартовый бит равен 1.

Если клавиша нажата, то клавиатура передает в контроллер скэн-код этой клавиши. Скэн-код - это порядковый номер нажатой клавиши. Кроме того, клавиатура выводит этот же скэн-код при отпускании клавиши, но предварительно передается код F0h.

Кроме того, если клавиша удерживается нажатой, то клавиатура генерирует скэн-код с программируемой скоростью и задержкой повторения.

Микропроцессор (МП) клавиатуры (I8042) выполняет следующие основные функции:

-  автотестирование матрицы переключателей клавиш, внутренних ПЗУ и ОЗУ с передачей кода ААh в системную плату при успешном результате или кода FCh - в случае ошибки;

-  опрос состояний DATA и CLK, чтобы определить отсутствие запрета;

-  сканирование переключателей клавиш с целью установления факта нажатия или отпускания какой либо клавиши;

-  выбор таблицы скэн-кодов;

-  реализацию протокола связи с контроллером;

-  буферизацию кодов клавиш;

-  формирование последовательных кодовых посылок при нажатии или отпускании клавиш;

-  задание частоты повтора кода клавиши.

Буфер FIFO («первый вошел - первый ушел») предназначен для временного хранения кодов нажатия и отжатия до принятия их контроллером. При переполнении буфера в его фиксированную ячейку помещается код FFh в режиме 1 или код 00h - в режимах 2 и 3, и очередной скэн-код в этом случае не выводится.

Светодиоды индикации отображают состояние, например, включения клавиш Num Lock (блокировки цифр), Caps Lock (блокировки прописных букв) или Scroll Lock (блокировки прокрутки).

Генератор синхросигналов используется для синхронизации работы МП клавиатуры.

Клавишам соответствует определенный тип переключателя. Различают механические переключатели, электрические, использующие эффект Холла, индуктивные, сенсорные, емкостные и мембранного типа. Переключатели представлены в виде матрицы, которую МП последовательно опрашивает с целью обнаружения нажатия какой либо клавиши.

На рис. 8.5 показана схема взаимодействия компонентов, связанных с обработкой клавиатурных данных.

Рис. 8.5. Схема взаимодействия компонентов ПК

Клавиатура имеет собственное программное обеспечение, выполняющее перечисленные выше функции МП. При выводе данных клавиатура опрашивает состояние линий DATA и CLK с открытым коллектором. Если на линии CLK установлен контроллером запрещающий низкий уровень, то данные, например, коды нажатия, не передаются в контроллер, а посылаются в буфер FIFO на временное хранение (см. рис. 8.3). Коды нажатия (отжатия) из буфера FIFO посылаются в контроллер при возникновении на линии CLK высокого разрешающего уровня напряжения. Так достигается согласование во времени работы клавиатуры и контроллера, связанной с обменом данными. Если данные клавиатуры получены с ошибкой паритета, то контроллер автоматически посылает команду RESEND (повторить). В свою очередь, когда контроллер готов к передаче данных в клавиатуру, он устанавливает на линии DATA низкий уровень стартового бита и разрешает (увеличением уровня напряжения) формирование синхросигналов CLK со стороны клавиатуры.

При включении питания или поступлении команды контроллера FFh (сброс) клавиатура выполняет базовый тест, связанный с проверкой переключателей клавиш, внутренних ОЗУ и ПЗУ. Если базовый тест завершен успешно, то в контроллер передается код Aah (код ответа) и осуществляется сканирование переключателей клавиш. И наоборот, в случае ошибки в контроллер выводится код FCh.

Контроллер представляет собой однокристальный микрокомпьютер, взаимодействующий с процессором с помощью портов и аппаратного прерывания IRQ1. Доступ к портам выполняется по адресным сигналам А0 (младший бит адреса),  (выбор кристалла) и сигналам управления  (чтения порта),  (запись в порт), а также с помощью команд. Передача данных между контроллером и процессором осуществляется по внутренней шине данных XD0-XD7, подключенной к системной шине данных SD0-SD7 через приемопередатчик (на см. рис. 8.5 это соединение не показано). Контроллер выполняет преобразование полученных от клавиатуры кодов нажатия (отжатия) клавиш в системные (стандартные для обработчика прерываний) скэн-коды, причем 2-байтовый код отпускания клавиши заменяется байтовым, у которого бит D7=1. Процессор устанавливает наличие в контроллере кодов нажатия (отпускания) через прерывание IRQ1, по которому определяется адрес вектора прерывания (36 или 24h, т. е. номер прерывания 9 умножается на 4), указывающий на фиксированную ячейку оперативной памяти (0000:0024), хранящую 4-байтовый вектор прерывания (стартовый адрес обработчика прерывания). Кроме того, процессор с помощью обработчика прерывания выполняет анализ системного скэн-кода нажатия и преобразование его в 2-байтовый код, помещаемый в буфер клавиатуры (FIFO) оперативной памяти (RAM).

Буфер клавиатуры RAM реализует режим кольцевой очереди и может хранить 15 двухбайтовых кодов нажатия, причем для обычных клавиш (алфавитно-цифровых), которым соответствуют коды ASCII, в буфере клавиатуры отводится два байта, первый из которых является кодом ASCII, а второй - скэн-кодом (порядковым номером этой клавиши). Второй байт необходим для различения одинаковых клавиш.

При нажатии специальных клавиш, например, F1-F12, INS, DEL и т. д., которым присвоен двухбайтный расширенный код, в буфер клавиатуры RAM помещается также 2 байта, первый из которых равен 00, а второй содержит порядковый номер этой клавиши (скэн-код). Буфер клавиатуры представлен на рис. 8.6.

Рис. 8.6. Циклический буфер клавиатуры RAM

Начальный адрес буфера клавиатуры - 0040:001Е, а конечный адрес - 0040:003С. Буферу клавиатуры RAM соответствуют все 2-байтовые ячейки памяти с адресами 0040:001А и 0040:001С, первая из которых является указателем головы заносимых данных (определяет первые введенные 2 байта данных), а вторая - указателем хвоста (см. рис. 8.6). В этих ячейках обычно используется только младший байт. По мере занесения данных в сторону увеличения адреса буфера клавиатуры RAM меняется соответственно и значение указателя хвоста. После заполнения конца буфера клавиатуры данные заносятся в его начальные ячейки памяти, если они были удалены при чтении данных из буфера клавиатуры, приводящим к изменению значения (позиции) указателя головы. В результате подобных действий значения указателя хвоста оказываются меньше значения указателя головы. Кроме того, в буфере клавиатуры используется дополнительная 2-байтовая ячейка (пустая позиция), которая содержит код возврата каретки (13) и код ввода (28) и предшествует ячейке буфера, соответствующей указателю головы.

Если значения указателей головы и хвоста равны, то буфер клавиатуры пуст. Поэтому для очистки буфера клавиатуры следует установить равные значения в указателях головы и хвоста. В том случае, если буфер клавиатуры уже заполнен, а поступают другие данные, вырабатывается звуковой сигнал переполнения. Наличие данных в буфере клавиатуры с целью их ввода можно определить по неравенству значений в указателях головы и хвоста.

Состояния нажатия и отпускания переключательных клавиш Caps Lock, Num Lock, Scroll Lock, Ins, Shift и т.д. отражаются в фиксированных ячейках RAM (байтах состояния), имеющих адреса 0040:0017 и 0040:0018. Кроме того, информация о состоянии расширенной клавиатуры отмечается в ячейках с адресами 0040:0096 и 0040:0097. В этих ячейках задается состояние правых клавиш Ctrl, Alt и состояние индикаторов. При прерывании клавиатуры, если была нажата переключательная клавиша, устанавливается соответствующий бит одного из байтов состояния. Обработчик прерывания INT9h проверяет каждый раз состояние переключательных клавиш, чтобы правильно интерпретировать вводимый код клавиши, например, «С» или «с».

При нажатии (отпускании) клавиши аппаратное прерывание IRQ1 вызывает обработчик прерывания INT09h, который выполняет следующие основные функции:

-  сохранение содержимого регистров процессора;

-  считывание и анализ номера клавиши из контроллера;

-  преобразование этого номера с использованием таблиц в код ASCII и системный скэн-код;

-  оповещение контроллера о завершении чтения номера клавиши;

-  сбрасывание запроса в контроллере прерывания;

-  передачу двухбайтного кода в буфер клавиатуры RAM;

-  управление динамиком и буфером клавиатуры RAM и восстановление регистров процессора.

Кроме того, для некоторых комбинаций клавиш: Ctrl_Alt_Del (перезагрузка операционной системы), Ctrl_Break (формирование прерывания INT1Bh с установкой бита D7 в байте 0040:0071h), Alt_SysRq (вызов подфункции 85h прерывания INT15h) и т. д., выполняющих специальные функции, обработчик прерывания INT09h не использует скэн-коды в буфере клавиатуры RAM. Для других переключательных клавиш: Caps Lock, Num Lock и т. д. при их нажатии (отпускании) обработчик прерывания INT09h изменяет содержимое байтов состояния, размещенных в фиксированных ячейках RAM.

Обработчик (драйвер) программного прерывания INT16h употребляет функции:

-  чтение кода нажатой клавиши (00h);

-  проверка состояния буфера клавиатуры (01h);

-  чтение байта состояния клавиатуры (02h);

-  установка скорости повторения кода клавиши (03h);

-  считывание кода нажатой клавиши (10h);

-  проверка состояния буфера клавиатуры (11h);

-  чтение байтов состояния клавиатуры (12h).

Функции 00h-02h предназначены для старой клавиатуры.

Функция 00h по значению указателя головы удаляет 2-байтный код из буфера клавиатуры, причем первый байт (код ASCII) помещается в регистр AL, а второй байт (скэн-код) - в регистр AH процессора. Если буфер клавиатуры пуст, то функция 00h ожидает нажатия клавиши (появления 2-байтного кода) и только потом передает управление программе.

Функция 01h позволяет исключить время ожидания нажатия клавиши путем проверки нажатия 2-байтных кодов в буфере клавиатуры. Эта функция сообщает только о готовности ввода с клавиатуры (устанавливает признак ZF=1, если буфер клавиатуры пуст).

Функция 02h предназначена для чтения байта состояния клавиатуры, который помещается в регистр AL.

Формат байта состояния (0040:0017) изображен на рис. 8.7.

биты

D7       1          - включен режим Insert

D6       1          - включен режим Caps Lock

D5       1          - включен режим Num Lock

D4       1          - включен режим Scroll Lock

D3       1          - нажата клавиша Alt

D2       1          - нажата клавиша Ctrl

D1       1          - нажата левая клавиша Shift

D0       1          - нажата правая клавиша Shift

Рис. 8.7. Формат байта состояния

Функция 03h управляет задержкой и частотой (скоростью) повторения кода клавиши. Значение частоты повторения (число из диапазона 0-31) задается в регистре BL, а в регистре BH - задержка повторения (0-250 мс, 1-500 мс, ..., 3-1000 мс).

В новой клавиатуре, имеющей 101 (102) клавишу, используется функция 00h, 01h и 02h старой клавиатуры. Эта расширенная клавиатура, как уже отмечалось, применяется в ПК РС/АТ и PS/2.

Функция 10h используется вместо функции 00h, если расширенная клавиатура работает в режиме 2, что позволяет получить коды для дополнительных клавиш. Общее назначение, входные и выходные параметры функций 00h и 10h совпадают. Аналогичным образом используется функция 11h вместо 01h. Функция 12h заменяет функцию 02h, если расширенная клавиатура работает в режиме 2. При выполнении функции 12h байты состояния размещаются в регистрах AL и АН, причем в регистре AL хранится первый байт состояния (см. рис. 8.7), а в регистре АН - второй байт состояния (0040:0018), формат которого показан на рис. 8.8.

биты

D7     1          - включен режим Insert

D6     1          - включен режим Caps Lock

D5     1          - включен режим Num Lock

D4     1          - включен режим Scroll Lock

D3     1          - включен режим «пауза»

D2     1          - нажата клавиша Sys Req

D1     1          - нажата правая клавиша Alt

D0     1          - нажата правая клавиша Ctrl

Рис. 8.8. Формат второго байта состояния

Рассмотрим структурную схему контроллера, показанную на рис. 8.9.

Рис. 8.9. Структурная схема контроллера

Входной буфер подключается к шине XD0 -XD7 и содержит два 8 - битовых регистра данных и команд, доступных по записи и имеющих соответственно адреса 60h и 64h. Информация записывается во входной буфер, если сброшен бит D1 регистра состояния (64h), содержащего флаг входного буфера (IBF), который устанавливается в единицу при записи информации во входной буфер. Данные из входного буфера (регистра данных) передаются в клавиатуру и выполняется автоматический сброс IBF.

Выходной буфер включает 8-битовый регистр, адрес которого 60h. Содержимое этого регистра считывается, если бит DO регистра состояния (64h) равен единице (установлен флаг выходного буфера OBF), что указывает на наличие данных в выходном буфере (выходной буфер полон). При чтении выходного буфера бит DO (OBF) регистра состояния (64h) автоматически сбрасывается.

Читаемый регистр состояния (64h) предназначен для хранения информации о состоянии контроллера и интерфейса. Формат регистра состояния (64h) представлен на рис. 8.10.

биты

D7   1          - ошибка нечетного паритета

D6   1          - прием байта из клавиатуры не завершен

D5   1          - передача байта в клавиатуру не завершена

D4   0          - клавиатура заблокирована (защитный замок закрыт)

D3   0          - в выходном буфере данные

1          - в выходном буфере команда

D2   0          - сброс по включению питания

        1          - программный сброс

D1   0          - входной буфер пуст (IBF)

D0   1          - выходной буфер полон (OBF)

Рис. 8.10. Формат регистра состояния

Доступ к другим портам контроллера выполняется с помощью специальных команд, так как из-за ограниченного числа контактов микросхемы I8042 они не имеют адресов. Команды C0h(R), D0h(R), D1h(W), и Е0h(R) (см. рис. 8.9) используются соответственно для чтения входного и выходного портов, записи в выходной порт и чтение порта Т0, Т1 (чтение состояния линий CLK и DATA интерфейса клавиатуры). Эти команды должны быть переданы в регистр команд входного буфера по адресу 64h.

Входной порт контроллера предназначен для чтения информации о конфигурации системы, используемой программами BIOC. Формат входного порта показан на рис. 8.11.

биты

D7   0                      - клавиатура заблокирована ключом

D6   0                      - цветной адаптер

        1                      - монохромный адаптер

D5   0                      - переключатель установлен

                                - переключатель не установлен

D4   0                      - не используются вторые 256К RAM

                                - используются вторые 256К RAM

D3, D2,D1, D0      - резерв

Рис. 8.11. Формат входного порта

Выходной порт доступен по записи (W) и чтению (R) и хранит значения выходных линий. Формат выходного порта представлен на рис. 8.12.

биты

D7                     - значение линии DATA при передаче данных в клавиатуру

D6                     - значение линии CLK при передаче данных в клавиатуру

D5         1          - входной буфер пуст

D4         1          - выходной буфер полон

D3, D2              - резерв

D1                     - состояние адресной линии А20

D0         0          - системный сброс

Рис. 8.12. Формат выходного порта

Значения порта состояния линий Т0 и Т1 считываются командой E0h(R), причем бит Т0 соответствует входному значению линии CLK, а бит Т1 - входному значению линии DATA.

Кроме того, контроллер содержит управляющий байт, доступный по чтению с помощью команды 20h(R) и по записи с использованием команды 60h(W).

Для считывания управляющего байта необходимо вначале записать команду 20h(R) в регистр команды (64h), а затем получить управляющий байт из выходного буфера (60h). Запись управляющего байта выполняется следующим образом. Предварительно в регистр команд (64h) входного буфера заносится команда 60h(W), а после этого содержимое управляющего байта - в регистр данных (60h) входного буфера. Формат управляющего байта изображен на рис. 8.13.

биты

D7         0          - резерв

D6         1          - режим совместимости клавиатуры с IBM PC

               (вызывает преобразование 2-байтовых кодов отпускания в 1-байтовые)

D5         1          - используются коды клавиатуры IBM PC/XT

               0          - используются 2-битовые коды АТ

D4         1          - отключение клавиатуры

               0          - разрешение

D3         1          - запрещается защитный замок

D2                     - значение этого бита записывается в бит D2 регистра состояния

D1         0          - резерв

D0         1          - разрешение прерывания, если выходной буфер полон

Рис. 8.13. Формат управляющего байта

Различают команды контроллера (некоторые из них были уже рассмотрены: C0h(R), D0h(R), D1h(W) и т.д.), команды управления клавиатурой и коды ответов клавиатуры.

Команда контроллера выводится процессором в регистр команд (64h) входного буфера и если у команды есть байт данных, то он загружается сразу после команды в регистр данных (60h) входного буфера.

Команды контроллера приведены в табл. 8.1.

Таблица 8.1

Код

Назначение команды

20h

Чтение управляющего байта

60h

Запись управляющего байта

AAh

Выполнение внутреннего теста

ABh

Тест интерфейса

ADh

Отключение (блокировка) клавиатуры

AEh

Разрешение (деблокирование) клавиатуры

C0h

Чтение входного порта

D0h

Чтение выходного порта

D1h

Запись в выходной порт

E0h

Чтение порта Т0, Т1

F0h - FFh

Сброс выходного порта

Рассмотрим назначение команд контроллера. Команда ААh вызывает выполнение внутреннего теста контроллера. Если тест завершается успешно, то в выходной буфер (60h) помещается код 55h. Тест интерфейса (линий CLK и DATA) осуществляется командой AВh и в выходном буфере хранится результат тестирования (00 - ошибок нет, 01(03) - линия CLK(DATA) имеет нулевой уровень, 02(04) - на линии CLK(DATA) установлен высокий уровень. По команде ADh производится отключение клавиатуры (данные не передаются и не принимаются), а по команде AЕh - разрешается работа клавиатуры (сбрасывается бит D4 управляющего байта). Команда C0h осуществляет чтение входного порта и занесение его содержимого в выходной буфер (60h).

Предварительно следует убедиться, что выходной буфер пуст, т.е. проверить бит D0(0BF) регистра состояния (64h). Чтение выходного порта исполняется командой D0h, которая помещает его содержимое в выходной буфер, если он пуст. Запись в выходной порт выполняется по команде D1h, за которой следует вывести байт по адресу 60h регистра данных, причем бит 0 выходного порта не должен быть равным нулю, иначе будет системный сброс. Для считывания значений порта Т0 и Т1 (значений входных линий CLK и DATA) в выходной буфер употребляется команда E0h. Команды F0h - FFh указывают своим кодом, какие четыре младших бита выходного порта следует сбросить, причем значение 0 определяет сброс бита.

Команды управления клавиатурой выводятся системным процессором как данные в регистр данных (60h) входного буфера контроллера, откуда передаются затем в клавиатуру. Клавиатура обязательно подтверждает прием команды управления, кроме команд EEh и FEh.

Команды управления клавиатурой представлены в табл. 8.2.

Таблица 8.2

Код

Назначение команды

EDh

Установить индикаторы состояния

EEh

Эхо (диагностика)

F0h

Установка таблицы скэн–кодов

FFh, F1h

Холостые (недействительные) команды

F2h

Чтение идентификатора

F3h

Задание частоты повтора и задержки

F4h

Разрешение клавиатуры

F5h

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

F6h

Установка значения по умолчанию

F7h, FAh

Определение действий всех клавиш

FBh, FDh

Определение действий отдельных клавиш

FEh

Повторить передачу

FFh

Сброс клавиатуры

Команда «установить индикатор состояния» (EDh) является 2-байтовой командой, изменяющей состояние индикаторов клавиатуры.

Первый байт (EDh) поступает в клавиатуру, которая прекращает сканирование переключателей клавиш, передает код подтверждения приема (FAh) и ожидает поступления второго байта конфигурации параметра, задающего установку индикатора. Второй байт имеет формат, изображенный на рис. 8.14.

Клавиатура, получив второй байт, подтверждает его прием ответным кодом FAh, устанавливает индикаторы и начинает сканирование переключателей клавиш. Диагностическая команда эхо (EEh) вызывает обратную передачу клавиатурой этого же кода EEh.

биты

D7-D3          0          - резерв

D2     1          - включен индикатор Caps Lock

D1     1          - включен индикатор Num Lock

D0     1          - включен индикатор Scroll Lock

Рис. 8.14. Формат второго байта

При получении клавиатурой одной из холостых команд EFh или F1h, она направляет в контроллер «код повтора» (FEh).

В клавиатуре хранятся таблицы кодов клавиш различных режимов. Для выбора одной из трех таблиц в клавиатуру посылается 2-байтная команда. Первый байт F0h указывает на соответствующую операцию и настраивает клавиатуру на прием второго байта. Клавиатура отвечает кодом подтверждения ( FAh), принимает второй байт, содержащий одно из трех значений 01, 02 или 03 для выбора набора кодов клавиш. Если второй байт имеет код 00, то клавиатура отвечает кодом подтверждения(FAh) и посылает байт, указывающий на текущий режим (номер таблицы кодов клавиш).

Команда «чтение идентификатора» (F2h) поступает в клавиатуру и вызывает последовательную ответную передачу кода подтверждения (FAh) и двух байтов идентификатора (83AВh).

Задание частоты повтора кода клавиши и времени задержки после первой передачи кода клавиши осуществляется 2-байтной командой F3h. Клавиатура, получив эту команду (первый байт), прекращает сканирование переключателей клавиш, отвечает кодом подтверждения (FAh) и ожидает поступление второго байта с заданными параметрами. Для продолжения сканирования переключателей клавиш в клавиатуру передается команда F4h (разрешение клавиатуры), получение которой подтверждается кодом FAh, сбрасывается выходной буфер и выполняется сканирование переключателей клавиш.

Команда F5h (блокировка клавиатуры) при поступлении в клавиатуру вызывает следующие ее действия:

-  возвращение кода повторения (FAh);

-  сбрасывание выходного буфера;

-  установление набора кодов клавиш для режима 3;

-  прекращение сканирования и ожидание очередных команд.

Для установок начальных значений (по умолчанию) применяется команда F6h, которая по действию напоминает команду F5h, за исключением того, что клавиатура не блокируется и продолжает сканирование.

С поступлением команды определения действий всех клавиш клавиатура реализует следующие функции:

-  передачу кода «подтверждение» (FAh);

-  сброс выходного буфера и соответствующую установку клавиш для режима 3 (F7h - все клавиши только повторяемые, F8h - все клавиши посылают только коды нажатия (отпускания), F9h - все клавиши генерируют только коды нажатия, FAh - все клавиши повторяемые и посылают коды нажатия (отпускания)).

Определение действий отдельных клавиш осуществляется 2-байтными командами (FBh, FCh, FDh). Первый байт является байтом команды для клавиатуры, которая возвращает код подтверждения (FAh), сбрасывает выходной буфер и ожидает поступления второго байта идентификации клавиши (кода сканирования позиции клавиши). Команда FBh делает клавишу повторяемой, FCh - определяет для клавиши только коды нажатия (отпускания), а FDh - для клавиши только коды нажатия.

Команда FEh (повторить передачу) посылается в клавиатуру, если произошла ошибка. По команде FEh клавиатура повторяет передачу последнего байта, переданного в контроллер.

Сброс клавиатуры выполняется командой FFh. В этом случае клавиатура посылает код подтверждения (FAh) и осуществляет внутренний тест. Если тест завершен успешно, то в контроллер направляется код AAh, в противном случае - код FCh.

Коды ответов клавиатуры представлены в табл. 8.3.

Таблица 8.3

Код

Назначение команды

00h, FFh

Ошибка клавиши, переполнение буфера клавиатуры

FAh

Подтверждение

83ABh

Идентификатор клавиатуры

EEh

Эхо (диагностический код)

AAh, FCh

Завершение теста

FEh

Повторить передачу

Коды ответов клавиатуры вводятся в системный процессор из выходного буфера (60h) контроллера. В случае переполнения 16-байтного буфера клавиатура посылает в контроллер код 00h, если выполняется режим 2 или 3, или код FFh, если установлен режим 1. Кроме того, клавиатура направляет код ошибки 00h в режиме 2 или 3 при обнаружении неисправного переключателя клавиши или код ошибки FFh, если выполняется режим 1.

Код подтверждения передается в контроллер клавиатуры при получении команд управления, кроме EEh или FEh.

Идентификатор клавиатуры содержит два байта, которые посылаются как ответ при получении команды F2h (чтение идентификатора), причем первым посылается младший байт.

Диагностический код EEh (эхо) направляется клавиатурой при получении команды EEh контроллера.

Если внутренний тест клавиатуры завершен успешно, то в контроллер посылается код AAh, если с ошибкой, то код FCh.

При получении клавиатурой неправильных данных или с ошибкой паритета в контроллер передается код FEh (повторить передачу).

Предыдущая

Похожие материалы:
Кислотчик
Кислотчик (Часть №1 выпуска №41 ЕТКС)
Кислотоупорщик-гуммировщик
Клавиатура PC/XT
Клавиатурщик (Выпуск №59 ЕТКС )
Клад



О сайте   Авторам   Реклама и услуги   Контакты
Copyright © 2007-2021, Консалтер.Ру