2.7.6. Контроллер клавиатуры PC/AT 8042.
Программируемый микроконтроллер i8042 применяется в машинах класса AT. Его встроенное программное обеспечение хранится обычно в масочном внутреннем ПЗУ и не допускает изменения, в чем, собственно, и нет необходимости. Эта программа обеспечивает вырабатывания запроса прерывания по приему скан-кода от клавиатуры и отработку управляющих команд от центрального процессора. Кроме управления клавиатурой, через программно-управляемые и программно-читаемые линии внешних портов контроллера формируются сигналы управления вентилем Gate А20, аппаратного системного сброса и считываются сигналы от конфигурационных джамперов системной платы. Контроллер 8242В, кроме интерфейса клавиатуры, поддерживает и аналогичный интерфейс дополнительного устройства, например PS/2-Mouse.
Порт ввода, доступный по команде C0h, используется для чтения состояния джамперов и ключа:
· Бит 7 - 0=клавиатура заблокирована ключом (KeyLock).
· Бит 6 - исходный видеорежим: 0=CGA, 1==MDA.
· Бит 5 - системная перемычка: 0=замкнута.
· Бит 4 - системное ОЗУ: 0=512 Кбайт и более, 1-256 Кбайт.
· Бит 1 - вход данных дополнительного интерфейса.
· Бит 0 - вход данных интерфейса клавиатуры.
Порт вывода, доступный для записи и чтения по командам D1h и D0h соответственно, имеет следующее назначение бит:
· Бит 7 - последовательные данные клавиатуры.
· Бит 6 - синхронизация клавиатуры.
· Бит 5 - запрос прерывания от дополнительного интерфейса (IRQ12).
· Бит 4 - запрос прерывания от клавиатуры (IRQI).
· Бит 3 - синхронизация дополнительного интерфейса.
· Бит 2 - последовательные данные дополнительного интерфейса.
· Бит 1 - вентиль линии адреса А20 (Gate А20).
· Бит 0 — альтернативный сброс процессора (без формирования общего сигнала сброса).
Таблица 2.13. Назначение регистров контроллера клавиатуры
Порт, R/W | Назначение |
060 RW | Порт данных 8042 |
064 R | Регистр состояния 8042 Бит 7 - ошибка четности Бит 6 — тайм-аут приемника/общий тайм-аут* Бит 5 — тайм-аут передатчика/выходной буфер дополнительного интерфейса полон* Бит 4 – 1=клавиатура на замке Бит 3 - 1=команда, 0=данные Бит 2 - 0=Power ON, 1=Reset OK - состояние завершения системного сброса Бит 1 - 1=входной буфер полон, 0=готовность к приему команды/данных Бит 0 – 1=выходной буфер полон |
064 W | Регистр команд 8042 |
* Второе назначение бита относится к контроллеру 8242ВВ, имеющему и дополнительный интерфейс для подключения PS/2-Mouse
Контроллер расположен в пространстве ввода/вывода по адресам 60h и 64h, причем по чтению скан-кода клавиатуры из порта 60h сохраняется совместимость с PC/XT. Назначение регистров контроллера клавиатуры приведено в табл. 2.13. Регистр данных контроллера в режиме записи используется для подачи команд, относящихся к клавиатуре и собственно контроллеру. Признаком готовности контроллера к восприятию команд является нулевое значение бита 1 регистра состояния (порт 064h).
Общие команды контроллера 8042:
· DFh - разрешить управление линией А20.
· DDh - запретить управление линией А20.
· Dih - запись в порт вывода 8042.
· DOh - чтение порта вывода 8042.
· COh - чтение порта ввода 8042.
· AEh - разрешение клавиатуры.
· ADh - запрещение клавиатуры.
· ACh - чтение ОЗУ контроллера.
· ABh - тест синхронизации и данных.
· AAh - внутренний тест контроллера.
· 60h - запись в контроллер.
· 20h - чтение контроллера.
Команды управления клавиатурой AT:
· FF - Reset - сброс и тест клавиатуры.
· FE - Resend - повтор последней передачи.
· FB-FD - Set Key Types - установка автоповтора отдельных клавиш.
· F7-FA - Set All Keys - установка операции автоповтора клавиатуры.
· F6—Set Default - сброс в начальное состояние и разрешение сканирования
· F5 - Default Disable - сброс в начальное состояние и запрет сканирования.
· F4 - Enable KB - клавиатура ответит байтом подтверждения АСК и продолжит сканирование.
· F3 - Set Typematic Rate/Delay - задание задержки и частоты повтора кодов. Последующий байт данных имеет следующий формат-
q Бит 7=0.
q Биты [6:5] - задержка, мс: 00-250, 01-500, 10-750, 11-1000.
q Биты [4:0]-00-IFh - скорость повторов, 1/с:
00h-30,0 08h-15,0 0Ah-12,0 12h-6,0
01h-26,7 09h-13,3 0Ch-10,0 14h-5,0
02h-24,0 05h-18,5 0Dh-9,2 17h=4,0
03h-21,8 06h-17,l 0Fh-8,0 IAh-3,0
04h-20,0 07h-16,0 10h-7,5 IFh-2,0
· F2 - Read ID Code запрос на 2-байтный идентификатор.
· ЕЕ - Echo — эхо-диагностика возвращает 0EEh.
· ED - Set/Reset Mode Indicators - управление индикаторами клавиатуры.
Последующий байт данных:
q Бит 0: 1=включить Scroll Lock.
q Бит 1: 1=включить Num Lock
q Бит 2. 1-включить Caps Lock
· AD - запрет сканирования
· AE - разрешение сканирования.
Из регистра данных контроллера кроме скан-кодов возможно получение ответов на команды, префикса кода отпускания клавиши (FO) или кодов особых случаев. Коды особых случаев:
· FA - АСК - подтверждение приема команды.
· АА - Test OK - внутренний тест прошел.
· FD - Diag. Failure - ошибка внутреннего теста.
· ЕЕ - Echo Response - ответ на эхо-команду.
· 00, FF - Buffer Error - переполнение буфера или неидентифицированная клавиша.


