1 ЛЕКЦИЯ 5 УПРАВЛЕНИЕ КЛАВИАТУРОЙ Интерфейс клавиатуры Традиционная клавиатура РС представляет собой унифицированное устройство ввода со стандартным разъемом.

Презентация:



Advertisements
Похожие презентации
Таблица умножения на 8. Разработан: Бычкуновой О.В. г.Красноярск год.
Advertisements

Масштаб 1 : Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Масштаб 1 : Приложение 1 к решению Совета депутатов города Новосибирска от
1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.
1. Определить последовательность проезда перекрестка

Урок 2. Информационные процессы в обществе и природе.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 4500 к решению Совета депутатов города Новосибирска от
Результаты сбора и обработки баз данных неработающего населения муниципальных общеобразовательных учреждений города Краснодара за период с 02 по 10 февраля.
ЦИФРЫ ОДИН 11 ДВА 2 ТРИ 3 ЧЕТЫРЕ 4 ПЯТЬ 5 ШЕСТЬ 6.
Тема «Клавиатура. Группы клавиш» Клавиатура компьютерное устройство, которое располагается перед экраном дисплея и служит для набора текстов и управления.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 6000 Приложение 7 к решению Совета депутатов города Новосибирска.
1 Знаток математики Тренажер Таблица умножения 3 класс Школа России Масько Любовь Георгиевна Муниципальное общеобразовательное учреждение средняя общеобразовательная.
Приложение 1 к решению Совета депутатов города Новосибирска от Масштаб 1 : 5000.
Д. Дуброво д. Бортниково с. Никульское д. Подлужье д. Бакунино пос. Радужный - Песчаный карьер ООО ССП «Черкизово» - Граница сельского поселения - Граница.
Анализ результатов краевых диагностических работ по русскому языку в 11-х классах в учебном году.
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Работа учащегося 7Б класса Толгского Андрея. Каждое натуральное число, больше единицы, делится, по крайней мере, на два числа: на 1 и на само себя. Если.
Применение генетических алгоритмов для генерации числовых последовательностей, описывающих движение, на примере шага вперед человекоподобного робота Ю.К.
Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______ Масштаб 1 : 5000.
Транксрипт:

1 ЛЕКЦИЯ 5 УПРАВЛЕНИЕ КЛАВИАТУРОЙ Интерфейс клавиатуры Традиционная клавиатура РС представляет собой унифицированное устройство ввода со стандартным разъемом и последовательным интерфейсом связи с системной платой. В настоящее время используются так называемые расширенные (enhanced) клавиатуры АТ или РС/2, имеющие более 100 клавиш. Клавиатуры имеют внутренний микроконтроллер, способный определить факты нажатия и отпускания клавиш, при этом можно нажимать очередную клавишу, даже удерживая несколько ранее нажатых. При нажатии клавиши клавиатура передает идентифицирующий ее скан- код. При удержании клавиши в нажатом положении через некоторое время клавиатура начинает автоповтор передачи скан-кода нажатия этой клавиши. Задержка автоповтора (typematic delay) и скорость автоповтора (typematic rate) программируются. Расширенная клавиатура позволяет выбирать 1 из 3 наборов скан-кодов.

2 Процессор общается с клавиатурой через контроллер интерфейса клавиатуры – микроконтроллер 8042 или программно совместимый, установленный на системной плате. Для обмена информацией в основном используется порт 60h, из которого принимаются скан-коды. О необходимости чтения скан-кода контроллер сигнализирует процессору через аппаратное прерывание IRQ1, сигнал которого вырабатывается по каждому событию клавиатуры (нажатию и отпусканию клавиши). Задание параметров автоподбора, выбор таблиц скан-кодов, управление светодиодными индикаторами, а также управление режимом сканирования матрицы клавиш и запуск диагностического теста осуществляется командами, посылаемыми в этот же порт. Контроллер транслирует команды в посылки, направляемые к клавиатуре. На системной плате РС/ХТ контроллера 8042 не было, а интерфейс клавиатуры (однонаправленный) был реализован аппаратной логикой – регистром сдвига, параллельный выход которого подключается к входам порта А системного интерфейса i8255. По приему байта от клавиатуры вырабатывается аппаратное прерывание IRQ1, обработчик которого может прочитать принятый байт из порта 60h. С помощью бит 7 и 6 порта 61h возможны программная блокировка и сброс клавиатуры соответственно.

3 Программируемый микроконтроллер клавиатуры i8042, KBC (keyboard controller), является посредником между клавиатурой, подключенной к нему по последовательному интерфейсу, и центральным процессором, с которым он связан через параллельный интерфейс. В микроконтроллере постоянно исполняется внутренняя микропрограмма, реагирующая на сигналы интерфейса клавиатуры и команды, поступающие от процессора. Эта микропрограмма (KBC BIOS) хранится во внутреннем масочном ПЗУ контроллера; внешне она недоступна, и контроллер можно рассматривать как устройство с заданными свойствами. Поскольку логика работы контроллера реализована программой, его реакция на команды процессора и сигналы интерфейса относительно медленная – время отклика измеряется десятками микросекунд. Связь контроллера с центральным процессором обеспечивается через 8-битную шину данных. Контроллер располагается в пространстве ввода-вывода CPU по адресам 60h (регистр данных) и 64h (регистр состояния и команд). Назначение регистров приведено в следующей таблице

4 Назначение регистров контроллера клавиатуры ПортR/WНазначение R/W R W Порт данных 8042 Регистр состояния 8042: бит 7 – ошибка четности при последнем обмене с клавиатурой; бит 6 – тайм-аут приемника / общий тайм-аут; бит 5 – тайм-аут передатчика / выходной буфер интерфейса мыши полон (Mouse_OBF); бит 4: 0- клавиатура на замке; бит 3: 1 – последняя запись была командой, 0 – данными; бит 2: системный флаг, устанавливается в 0 по включении питания, в 1 – программно (что означает состояние завершения системного сброса Reset OK); бит 1: 1 – входной буфер интерфейса клавиатуры полон, 0 – готовность к приему команды / данных; бит 0: 1 – выходной буфер интерфейса клавиатуры полон (OBF). Регистр команд 8042

5 Из регистра данных считываются данные, принимаемые по интерфейсам от клавиатуры и мыши (для 8242), а также данные, возвращаемые контроллером в ответ на адресованные ему команды. Запись в регистр данных используется для подачи команд и данных, адресованных к клавиатуре и мыши, а также данных для команд, адресованных контроллеру. В регистр команд записываются команды, адресованные контроллеру. Режим работы контроллера (разрешение работы интерфейсов клавиатуры и мыши и прерываний от них, трансляция скан-кодов и другие параметры) задается командным байтом, посылаемым в контроллер по специальной команде. Перед любой записью в контроллер необходимо убедиться в его готовности. Признаком готовности / занятости контроллера является значение бита 1 регистра состояния (порт 064h). Приняв посылку от клавиатуры, контроллер выполняет внутреннюю трансляцию скан-кода (если это не запрещено командным байтом) и устанавливает в регистре состояния OBF=1, что приводит к генерации запроса на прерывание IRQ1 (если это не запрещено командным байтом). В ответ на это хост (программа, исполняемая CPU) должен считать данные

6 (транслированный скан-код, префиксы и т.п.) из порта данных (60h). Трансляция обеспечивает программную совместимость клавиатур ХТ и АТ по чтению скан-кодов из порта 60h. При получении посылки от мыши (для 8242) контроллер не выполняет никаких преобразований и устанавливает в регистре состояния Mouse_OBF=1, что приводит к генерации запроса на прерывание IRQ12 (если это не запрещено командным байтом). По этому сигналу данные от мыши должны быть считаны хостом из того же порта 60h. После получения команды, по которой контроллер должен возвращать данные, он устанавливает в регистре состояния OBF=1, что приводит к генерации прерывания IRQ1 (если это не запрещено командным байтом). После этого данные должны быть считаны из порта данных (60h). Если команда возвращает несколько байтов данных, прерывание генерируется для каждого байта. Взаимодействие с контроллером осуществляется подачей команд – записью в регистр команд (по адресу 64h). Перед посылкой команды необходимо убедиться в готовности контроллера к ее приему – бит 1 порта 64h должен иметь нулевое значение. Подробно команды контроллера описаны в специальной литературе.

7 Системная поддержка и программный интерфейс Клавиатура имеет системную поддержку на уровне BIOS – обработку фактов нажатия и отпускания клавиш и обеспечение сервисов ввода символов с клавиатуры, а также управления ее параметрами (задержка и частота автоповтора) и индикаторами. Коды, принятые от клавиатуры ее контроллером, считываются и обрабатываются обработчиком аппаратного прерывания IRQ1 (вектор 09h). Результат обработки помещается в клавиатурный буфер, из которого по программному прерыванию Int 16h этот результат для дальнейшей обработки может быть извлечен значительно позже. Нажатие «системной» комбинации Ctr+Alt+Del, клавиши PrintScreen и некоторых других к записи в клавиатурный буфер не приводит, а вызывает специальные процедуры. Прикладной программе, для которой требуется нестандартное использование клавиатуры (например, в качестве музыкальной), придется самой заниматься обработкой аппаратного прерывания IRQ1, перехватывая вектор Int 09h. Перехват этого вектора требуется и для вызова каких-либо резидентных программ по «горячим» клавишам.

8 При начальном тестировании процедура POST инициализирует клавиатуру (и ее контроллер) и запускает диагностический тест. Во время этого теста клавиатура мигнет всеми индикаторами, после чего может остаться включенным только индикатор NumLock (зависит от установки в BIOS Setup). В случае обнаружения ошибки клавиатуры на консоль выводится сообщение с возможным указанием скан-кода залипшей клавиши и обычно предлагается нажать клавишу F1 для продолжения. То же самое произойдет, если тест не обнаружит клавиатуру (например, из-за вывалившегося разъема или перегоревшего предохранителя), но в этом случае нажатия F1 уже будет недостаточно. Для обслуживания клавиатуры используются ячейки ОЗУ из области данных BIOS (BIOS Data Area): 0000:0417, 0000:0418 – флаги клавиатуры; 0000:0419 – аккумулятор кода Alt – набора; 0000:041А – указатель головы буфера (Buffer Head), 2 байта (модифицируется при помещении символа в буфер; 0000:041С – указатель хвоста буфера (Buffer Tail), 2 байта (модифицируется при извлечении символа из буфера; 0000:41Е – 0000:043C – область кольцевого буфера (15 слов).

9 Сервисы BIOS поддержки клавиатуры Прерывания, вызванные приходом кодов нажатия и отпускания клавиш (в последнем случае скан-код предваряется байтом f0h), обрабатывает BIOS Int 9h. Каждый принятый скан-код (или цепочка) обрабатывается с учетом состояния клавиатурных флагов. Результат обработки (как правило, ASCII- символ в младшем байте и скан-код в старшем) помещается в клавиатурный буфер, расположенный в ОЗУ. По приему каждого символа указатель головы буфера увеличивается. Буфер организован в виде кольца, после достижения конца области буфера (указатель головы «догнал» указатель хвоста) очередное слово не записывается и подается звуковой сигнал. Размер позволяет хранить описание шестнадцати нажатий клавиш. Нажатие клавиш Ctrl, Shift, Alt и некоторых комбинаций в буфере не отмечается, но приводит к модификации бит ячеек флагов клавиатуры. Нажатие «системной» комбинации Ctrl+Alt+Del, клавиши PrintScreen и некоторых других к записи в клавиатурный буфер не приводит, а вызывает специальные процедуры. Обработчик аппаратного прерывания (Int 9h) до обработки принятого скан-кода вызывает прерывание BIOS Int15h с AH=4fh, а в AL находится принятый скан-код.

10 Стандартный обработчик Int 15h (4fh) просто выполняет возврат с CF=0, но его можно заменить специальным обработчиком, который будет при необходимости подменять принятые скан-коды на какие-либо иные (оставляя их в AL), что должно отмечаться установкой CF=1. В старых версиях BIOS такой возможности перехвата не было, ее наличие можно определить вызовом Int 15h (c0h). Интерфейс прикладного уровня для клавиатуры предоставляет BIOS Int 16h. Его основное назначение – извлечение слов из клавиатурного буфера. Функция задается в регистре AH при вызове, результат помещается в регистре AX. AH=00h – чтение (с ожиданием готовности) и выборка слова из буфера (меняется указатель хвоста). Индикаторы клавиатуры обновляются в соответствии с состоянием флагов. Если буфер пуст, то на АТ выполняется прерывание Int 15h (подфункция 90), что может использоваться ОС, например, для переключения задач. Чтобы программа не «зависала» на ожидании символа, предварительно стоит проверить готовность функцией 01h.

11 AH=01h – проверка готовности, чтение без выборки (указатели не изменяются). Признак наличия символа в буфере – установленный флаг ZF. AH=02h – чтение состояния флагов (в AL – байт 0:0417h). AH=03h – установка задержки и частоты автоповтора: BL – код задержки (00=250; 01=500, 02=750, 03=1000 мс), BH – код частоты. AH=05h – запись слова из регистра СХ в буфер (меняется указатель головы). Признак успешной записи – AL=0, если в буфере нет места, то AL=1. AH=10h и AH=11h – функции, аналогичные 00h и 01h, но предназначенные специально для 101/102 – клавишных клавиатур – в них не выполняется фильтрация символов расширенной клавиатуры. Для ряда клавиш, отсутствующих в клавиатуре АТ-84, эти функции дадут результаты, отличающиеся от вызовов 00h и 01h. AH=12h – чтение расширенного состояния флагов (в АХ – слово KbdShiftFlags101Rec), в котором младший байт совпадает с тем, что дает функция 02h (слово из 0:0417h), а старший байт похож на слово из 0:0418h.

12 Назначение бит АХ: бит 0 – клавиша Shift (правая) нажата; бит 1 – клавиша Shift (левая) нажата; бит 2 – клавиша Ctrl (любая) нажата; бит 3 – клавиша Alt (любая) нажата; бит 4 – включен индикатор Scroll Lock; бит 5 – включен индикатор Num Lock; бит 6 – включен индикатор Caps Lock; бит 7 – включен режим Insert; бит 8 – клавиша Ctrl (левая) нажата; бит 9 – клавиша Flt (левая) нажата; бит 10 -клавиша Ctrl (правая) нажата; бит 11 - клавиша Alt (правая) нажата; бит 12 –клавиша Scroll Lock нажата; бит 13 – клавиша Num Lock нажата; бит 14 – клавиша Caps Lock нажата; бит 15 – клавиша SysReq нажата.

13 Функции чтения буфера (00 и 10h) в регистре AL возвращают ASCII – код символа, в АН – скан код. Символы, полученные нестандартным способом (в русском регистре или Alt- набором), сопровождаются нулевым скан- кодом. Alt – набор позволяет ввести в буфер любой символ – для этого его код в десятичной системе набирается на цифровой клавиатуре при нажатой клавише Alt, результат заносится в буфер при отпускании клавиши Alt. При AL=0 регистр AH содержит расширенный ASCII код. Дополнительные клавиши 101/102 клавиатур при использовании функций 10h-12h генерируют код E0h в младшем байте и скан-код, соответствующий аналогичным управляющим клавишам 83/84 – клавишных клавиатур. Функция записи (05h), несколько неожиданная для клавиатуры), позволяет легко имитировать работу оператора для различных демонстрационных программ. Если прикладная программа не перехватывает обслуживание клавиатуры на уровне аппаратного прерывания (Int 9h), то резидентная программа может ей «подбрасывать» слова в буфер, которые будут восприниматься как нажатие клавиш.

14 сводная таблица скан-кодов. клавиши пишущей машинки клавиша код нажатия клавиша код нажатия клавиша код нажатия "1" 2 "T" 20 "L" 38 "2" 3 "Y" 21 ";" 39 "3" 4 "U" 22 "'" 40 "4" 5 "I" 23 "`" 41 "5" 6 "O" 24 "\" 43 "6" 7 "P" 25 "Z" 44 "7" 8 "[" 26 "X" 45 "8" 9 "]" 27 "C" 46 "9" 10 "A" 30 "V" 47 "0" 11 "S" 31 "B" 48 "-" 12 "D" 32 "N" 49 "=" 13 "F" 33 "M" 50 "Q" 16 "G" 34 "," 51 "W" 17 "H" 35 "." 52 "E" 18 "J" 36 "/" 53 "R" 19 "K" 37 пpoбeл 57

15 управляющие клавиши Esc - 1 Ctrl - 29 Alt - 56 BackSpace - 14 left shift - 42 CapsLock - 58 Tab - 15 right shift - 42 NumLock - 58 Enter - 28 PrtSc - 55 ScrollLock - 70 Функциoнaльныe клaвиши F F F F F F F F F F8 - 66

16 Сводная таблица расширенных кодов. значение 2-гo байта соответствующие клавиши 15 Shift + Tab ("back-tab") Alt-Q - Alt-P (верхний ряд букв) Alt-A - Alt-L (средний ряд букв) Alt-Z - Alt-M (нижний ряд букв) функциональные клавиши F1 - F10 71 Home 72 Cursor-up (стрелка вверх) 73 PgUp 75 Cursor-left (стрелка влево) 77 Cursor-right (стрелка вправо) 79 End 80 Cursor-down (стрелка вниз) 81 PgDn 82 Ins 83 Del F1-F10 + Shift

F1-F10 + Ctrl F1-F10 + Alt 114 Ctrl + PrtSc 115 Ctrl + Cursor-left 116 Ctrl + Cursor-right 117 Ctrl + End 118 Ctrl + PgDn 119 Ctrl + Home Alt Alt + = (верхний ряд) 132 Ctrl + PgUp