Сделай Сам Свою Работу на 5

Аппаратная поддержка работы с клавиатурой





 

Контроллеры клавиатуры

Работой клавиатуры управляет специальная микросхема – контроллер клавиатуры 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]

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

Внешние устройства, включенные в подсистему прерываний, должны реализовать несколько функций, связанных с работой в этой подсистеме - формирование запроса, анализ ответа процессора, выдачу вектора прерывания. Перечисленные функции могут быть реализованы на специальных устройствах - контроллерах прерываний, которые выпускаются в виде БИС в составе многих микропроцессорных комплектов. Параллельный арбитраж осуществляется с помощью специального устройства-арбитра (в этом случае используется КПП). Основные функции КПДП:

1. получить запросы прерываний от устройств и сформировать сигнал запроса прерывания на входе МП.

2. установка и смена приоритетов при одновременном поступлении запросов



3. маскирования запросов по команде процессора

4. сообщить МП начальный адрес подпрограммы обслуживания прерываний в соответствии с тем, какой запрос будет удовлетворен.

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

 

 

Програмная поддержка

 

BIOS

 

BIOS (англ. basic input/output system — «базовая система ввода-вывода») — реализованная в виде микропрограмм часть системного программного обеспечения, которая предназначается для обеспечения операционной системы API доступа к аппаратуре компьютера и подключенным к нему устройствам.

В персональных IBM PC-совместимых компьютерах, использующих микроархитектуру x86, BIOS представляет собой набор записанного в микросхему EEPROM (ПЗУ) персонального компьютера микропрограмм (образующих системное программное обеспечение), обеспечивающих начальную загрузку компьютера и последующий запуск операционной системы.

Для новых платформ, компания Intel на замену традиционному BIOS предлагает Extensible Firmware Interface.

Для компьютеров на базе иных платформ для обозначения встроенного ПО, используются другие термины. Например в архитектуре SPARC, firmware может называться PROM, или Boot.

 

Обработчик прерываний

 

Обработчик прерываний (или процедура обслуживания прерываний) — специальная процедура, вызываемая по прерыванию для выполнения его обработки. Обработчики прерываний могут выполнять множество функций, которые зависят от причины, которая вызвала прерывание.

Обработчик прерываний — это низкоуровневый эквивалент обработчика событий. Эти обработчики вызываются либо по аппаратному прерыванию, либо соответствующей инструкцией в программе, и соответственно обычно предназначены для взаимодействия с устройствами или для осуществления вызова функций операционной системы.

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

В современных системах обработчики прерываний делятся на Высокоприоритетные Обработчики Прерываний (ВОП) и Низкоприоритетные Обработчики Прерываний (НОП).

К выполнению ВОП обычно предъявляются жесткие требования: малое время на выполнение, малое количество операций, разрешенных к выполнению, особая надежность, так как ошибки, допущенные во время выполнения, могут обрушить операционную систему, которая не может корректно их обработать.

Получив сигнал прерывания с определенным номером, процессор сохраняет в стеке выполняемой программы текущее содержимое трех регистров процессора: регистра флагов, CS и IP. Два последних числа образуют полный адрес возврата в прерванную программу. Далее процессор загружает CS и IP из соответствующего вектора прерываний, осуществляя, тем самым, переход на обработчик прерывания, связанный с этим вектором.

Обработчик прерываний всегда заканчивается командой iret (interrupt return, возврат из прерывания), выполняющей обратные действия - извлечение из стека сохраненных там слов и помещение их назад в регистры IP и CS, а также в регистр флагов. Это приводит к возврату в основную программу в ту самую точку, где она была прервана.

Стандартной программой обработки прерывания INT 09h[5] дополнительно отслеживаются некоторые комбинации клавиш, выполняя определённые действия.

 

Взаимодействие аппаратных и программных средств[6]

 

 

Основные функции клавиатуры не нуждаются в поддержке специальными системными программами (драйверами). Необходимое программное обеспечения для начала работы с компьютером уже имеется в микросхеме ПЗУ в составе базовой системы ввода-вывода (BIOS).

Процесс взаимодействия системы с клавиатурой представлен в приложении 1.

Стандартный обработчик прерывания клавиатуры int09hпри вызове начинает действовать и определяет, что происходит в клавиатуре. Для этого он посылает команду запроса по адресу того порта, к которому подключена клавиатура (60h), и считывает у него скан-код нажатой клавиши. Определяет какой код символа соответствует данному скан-коду (соответствие кодов символов стандартизировано ASCII таблицей). Далее обработчик прерываний отправляет полученный код символа в небольшую область памяти, известную как кольцевой буфер клавиатуры (размером 15 слов) , располагаемым по адресам от 40h:lEh до 40h:3Dh, и битом флагов клавиатуры, находящимся по адресу 40h:17h, где фиксируется состояние управляющих клавиш (<Shift>, <Caps Lock>, <Num Lock> и др.), и прекращает свою работу, известив об этом процессор.

Процессор прекращает обработку прерывания и возвращается к отложенной задаче.

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

Программа int09h, получив управление в результате прерывания от клавиатуры, считывает из порта 60h скан-код и анализирует его значение. Если скан-код принадлежит одной из управляющих клавиш, и, к тому же, представляет собой код нажатия, в байте флагов клавиатуры устанавливается бит (флаг), соответствующий нажатой клавише. клавиатуры устанавливается бит (флаг), соответствующий нажатой клавише. Например, при нажатии правой клавиши <Shift> в байте флагов устанавливается бит 0, при нажатии левой клавиши <Shift> - бит 1, при нажатии любой клавиши <Ctrl> - бит 2 и т.д. Биты флагов сохраняют свое состояние, пока клавиши (по одиночке или в любых комбинациях) остаются нажатыми. Если управляющая клавиша отпускается, программа int09h получает скан-код отпускания и сбрасывает соответствующий бит в байте флагов. Кроме состояния указанных клавиш, в байте флагов фиксируются еще режимы <Scroll Lock>, <Num Lock>, <Caps Lock> и <Insert>.

При нажатии обычной, не управляющей клавиши, программа int09h считывает из порта 60h ее скан-код нажатия и по таблице трансляции скан-кодов в коды ASCII (табл. 3) формирует двухбайтовый код, старший байт которого содержит скан-код, а младший код ASCII.

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

Выполняемая программа, желая получить код нажатой клавиши, должна обратиться для этого к каким-либо системным средствам - функциям ввода с клавиатуры DOS (прерывание 21h) или BIOS (прерывание 16h). Системные программы с помощью драйвера клавиатуры (точнее говоря, объединенного драйвера клавиатуры и экрана, так называемого драйвера консоли) считывают из кольцевого буфера содержимое ячейки, адрес которой находится в головном указателе, и увеличивает этот адрес на 2. Таким образом, программный запрос на ввод с клавиатуры фактически выполняет прием кода не с клавиатуры, а из кольцевого буфера.

 

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.