
Аппаратная поддержка работы с клавиатурой
Контроллеры клавиатуры
Работой клавиатуры управляет специальная микросхема – контроллер клавиатуры i8042 (позднее i8242), который постоянно сканирует нажатия клавиш на клавиатуре — независимо от активности на центральном процессоре компьютера.
Когда пользователь нажимает клавишу на клавиатуре, он замыкает электрический контакт. В результате при следующем сканировании микроконтроллер фиксирует нажатие определенной клавиши и посылает в центральный компьютер скан-код нажатой клавиши и запрос на прерывание. Аналогичные действия выполняются и тогда, когда оператор отпускает нажатую ранее клавишу.
Код клавиши называют скан - кодом (название подчеркивает тот факт, что компьютер сканирует клавиатуру для поиска нажатой клавиши), который является по существу порядковым номером клавиши, хотя последовательность скан кодов не всегда совпадает с порядком расположения клавиш на клавиатуре. Скан-код — это случайное значение, выбранное IBM еще тогда, когда она создавала первую клавиатуру для ПК. Скан-код не соответствует ASCII-коду клавиши, одной и той же клавише могут соответствовать несколько значений ASCII-кода.
Контроллер клавиатуры каждой клавише присваивают два скан-кода, отличающиеся друг от друга на 80h. Один скан-код (меньший, код нажатия) записывается в порт при нажатии клавиши, другой (больший, код отпускания) – при ее отпускании. То есть клавиатура фиксирует не только факт нажатия клавиши, но и факт ее отпускания.
Порты
Доступ к клавиатуре через порты ввода-вывода является самым низкоуровневым методом доступа. Такой метод используется обычно только прерываниями INT 09h, INT 15h и драйверами клавиатуры. Для работы с клавиатурой типа PC/XT используются порты с адресами 60h и 61h.
Порт 60h предназначен для чтения данных с клавиатуры и сохранен для совместимости с клавиатурой PC XT. При чтении он содержит скан-код последней нажатой клавиши. В режиме записи через этот порт возможно управлять клавиатурой.
С помощью порта 61h возможно определить, доступен ли контроллер клавиатуры, и разрешить (запретить) доступ к нему. Если в старший бит порта 61h записать значение 1, клавиатура будет заблокирована, если 0 – разблокирована.
Порт 61h управляет не только клавиатурой, но и другими устройствами компьютера, например, работой встроенного динамика. Поэтому при изменении содержимого старшего бита необходимо сохранить состояние остальных битов этого порта.
Взаимодействие с системным контроллером клавиатуры происходит через порт ввода-вывода 64h. Считав байт из этого порта, можно определить статус контроллера клавиатуры, записав байт - послать контроллеру команду.
Резюмируя, отметим, что в ОС Windows приложениям пользовательского режима запрещено работать с портами, поэтому эту задачу выполняют драйвера операционной системы.
Контролер приоритетных прерываний4
Для того, чтобы система "не растерялась", решая, какое прерывание обслуживать в первую очередь, существует специальная схема приоритетов. Каждому прерыванию назначается свой уникальный приоритет.
Внешние устройства, включенные в подсистему прерываний, должны реализовать несколько функций, связанных с работой в этой подсистеме - формирование запроса, анализ ответа процессора, выдачу вектора прерывания. Перечисленные функции могут быть реализованы на специальных устройствах - контроллерах прерываний, которые выпускаются в виде БИС в составе многих микропроцессорных комплектов. Параллельный арбитраж осуществляется с помощью специального устройства-арбитра (в этом случае используется КПП). Основные функции КПДП:
-
получить запросы прерываний от устройств и сформировать сигнал запроса прерывания на входе МП.
-
установка и смена приоритетов при одновременном поступлении запросов
-
маскирования запросов по команде процессора
-
сообщить МП начальный адрес подпрограммы обслуживания прерываний в соответствии с тем, какой запрос будет удовлетворен.
Взаимодействие МП с КПП осуществляется с помощью сигналов запроса прерываний от КПП и подтверждения прерывания по МУ. При поступлении запроса прерывания от УВВ КПП, в случае если запрос не маскирован, выдает сигнал запроса прерывания основной программы на МП. МП завершает выполнение текущей команды, в стеке запоминается адрес возврата в подпрограмму. Сигналом подтверждения прерывания по МУ запрашивается вектор прерывания от КПП. КПП выставляет на МД адрес подпрограммы обслуживания прерывания или вектор прерывания (информация по которой можно найти адрес начала подпрограммы обслуживания устройства). После сообщения МП вектора прерывания снимается запрос прерывания от КПП, выполняется подпрограмма обслуживания, снимается сигнал запроса от УВВ.