Клавиатура представляет собой унифицированное устройство ввода со стандартным разъёмом и последовательным интерфейсом связи. В настоящее время используется 2 типа интерфейса: IT и PS/2. IT – разъём под com порт. PS/2 – круглый разъём. Можно пользоваться переходником. Клавиатура имеет внутренний контроллер который определяет факты нажатия или отпускания клавиши при этом одновременно можно нажимать несколько клавиш удерживая ранее нажатые. При нажатии клавиши клавиатура вырабатывает и передаёт идентифицирующий скан-код. При этом удерживание клавиши в нажатом состоянии клавиатура осуществляет автоподбор скан-кода нажатой клавиши. Время задержки и скорость передачи автоподбора на клавиатуре можно запрограммировать. Расширенные клавиатуры позволяют выбирать из нескольких скан-кодов.
Временные диаграммы интерфейса клавиатуры а) Приём посылки от клавиатуры б) Передача команда от клавиатуры тонкие линии сигналы контроллера, толстые — сигналы клавиатуры.
Для подключения клавиатуры предназначена последовательный двунаправленный интерфейс, состоящий из двух обязательных сигналов RB- дата и BB-Clock. Обе эти линии на системной плате соединены через резисторную цепочку с шиной напряжения +5В. На обеих сторонах интерфейса сигналы низкого уровня формируются выходом элементов с открытым коллектором. Состояние линии может быть прочитано через входные линии контроллеров. Центральный процессор общается с клавиатурой через контроллер интерфейса клавиатуры.
ЦП общается с клавиатурой через контроллер интерфейса клавиатуры, представленной в виде микросхемы 8042 или же программно совместимую с ней. Для обмена информации в основном используется 60 порт, из которого принимаются скан-коды. О необходимости чтения скан-кода контроллер сигнализирует ЦП через аппаратное прерывание IRQ1, сигнал который вырабатывается по каждому событию клавиатуры. Задание параметров автоповтора, выбор таблиц скан-кодов, управление световыми индикаторами, управление сканирования матрицы клавиш и запуск диагностического текста осуществляется командами через 60 порт. Контроллер транслирует команды посылки и отправляет их клавиатуре. В исходном состоянии обе линии двунаправленного интерфейса поддерживаются выходными формирователями в состоянии с высоким уровнем сигнала. Клавиатура может начать передачу в произвольный момент времени, когда интерфейс находится в покое. Клавиатура формирует стартовый бит с низким уровнем на линии KB Data и первый импульс KB Clock, что является сигналом контроллеру о необходимости начала приема. После подъема сигнала KB Clock клавиатура выводит нулевой бит данных на линию KB Data, а затем и следующий импульс и т.д. Т.об. предаются все 8 бит данных и бит паритета (чтобы довести число бит до нечетного числа). После синхроимпульса бита паритета контроллер клавиатуры должен сформировать импульс KB Clock подтверждающий прием бита Ack. Если весь байт с битом паритета не будет получен контроллером за 2 мс, то контроллер прекращает прием данного байта и формирует ошибку тайм-аута. В случае обратной передачи, т.е. вводом команды контроллеров клавиатуры происходит более сложный процесс. Из состояния покоя контроллер устанавливает низкий уровень KB Clock на 250 мс и формирует стартовый бит, означающий предупреждение клавиатуре о начале посылки. На этот сигнал клавиатура должна ответить 11-ю импульсами KB Clock. По спаду очередного импульса контроллер выставляет очередной бит данных. Клавиатура его захватывает по фронту последующего формируемого ею же синхроимпульса. После бита паритета на 9 импульсе и единичного стоп-бита на 10 импульсе, на 11 импульсе клавиатура формирует о бит поддержания Ack. Контроллер ожидает окончания ответа на более 20 мс, и если ответ не поступит за это время, то формирует ошибку тайм-аута. Такая же ошибка поступит и в том случае, если клавиатура не введет первый синхроимпульс за 15 мс от начала запроса или контроллер не примет данные включая стоп бит за 2 мс, начиная с момента появления стоп-бита. Клава имеет системную поддержку на уровне BIOS, т.е. обработку фактов нажатия/отжатия клавиш и обеспечения ввода символов с клавиатуры, а также управления ее параметрами и индикаторами. Коды принятые от клавиатуры ее контроллером считываются и обрабатываются обработчиком аппаратного прерывания IRQ1. Результат обработки помещается в клавиатурный буфер, из которого по программному прерыванию INT16 этот результат может быть извлечен для дальнейшей обработки. Буфер вмещает до 256 символов. Нажатие системной комбинации Ctr+Alt+Del, PreentScreen и некот. др. в буфер клавиатуры не записываются, а вызывают спец процедуры (Любая прикладная программа, которая требуется). Нестандартная клавиатура сама занимается обработкой IRQ1 перехватывая программный вектор INT89.
