14 какое назначение имеет регистр состояния контроллера клавиатуры расположенного на системной плате
Контроллеры устройств ввода-вывода весьма различны как по своему внутреннему строению, так и по исполнению (от одной микросхемы до специализированной вычислительной системы со своим процессором, памятью и т. д.), поскольку им приходится управлять совершенно разными приборами. Не вдаваясь в детали этих различий, мы выделим некоторые общие черты контроллеров , необходимые им для взаимодействия с вычислительной системой. Обычно каждый контроллер имеет по крайней мере четыре внутренних регистра, называемых регистрами состояния , управления, входных данных и выходных данных. Для доступа к содержимому этих регистров вычислительная система может использовать один или несколько портов, что для нас не существенно. Для простоты изложения будем считать, что каждому регистру соответствует свой порт.
Регистр состояния содержит биты, значение которых определяется состоянием устройства ввода-вывода и которые доступны только для чтения вычислительной системой. Эти биты индицируют завершение выполнения текущей команды на устройстве ( бит занятости ), наличие очередного данного в регистре выходных данных ( бит готовности данных ), возникновение ошибки при выполнении команды ( бит ошибки ) и т. д.
Регистр управления получает данные, которые записываются вычислительной системой для инициализации устройства ввода-вывода или выполнения очередной команды, а также изменения режима работы устройства. Часть битов в этом регистре может быть отведена под код выполняемой команды, часть битов будет кодировать режим работы устройства, бит готовности команды свидетельствует о том, что можно приступить к ее выполнению.
Регистр выходных данных служит для помещения в него данных для чтения вычислительной системой, а регистр входных данных предназначен для помещения в него информации, которая должна быть выведена на устройство. Обычно емкость этих регистров не превышает ширину линии данных (а чаще всего меньше ее), хотя некоторые контроллеры могут использовать в качестве регистров очередь FIFO для буферизации поступающей информации.
Разумеется, набор регистров и составляющих их битов приблизителен, он призван послужить нам моделью для описания процесса передачи информации от вычислительной системы к внешнему устройству и обратно, но в том или ином виде он обычно присутствует во всех контроллерах устройств .
Опрос устройств и прерывания. Исключительные ситуации и системные вызовы
Построив модель контроллера и представляя себе, что скрывается за словами "прочитать информацию из порта" и "записать информацию в порт", мы готовы к рассмотрению процесса взаимодействия устройства и процессора. Как и в предыдущих случаях, примером нам послужит команда записи, теперь уже записи или вывода данных на внешнее устройство. В нашей модели для вывода информации, помещающейся в регистр входных данных , без проверки успешности вывода процессор и контроллер должны связываться следующим образом.
- Процессор в цикле читает информацию из порта регистра состояний и проверяет значение бита занятости. Если бит занятости установлен, то это означает, что устройство еще не завершило предыдущую операцию, и процессор уходит на новую итерацию цикла. Если бит занятости сброшен, то устройство готово к выполнению новой операции, и процессор переходит на следующий шаг.
- Процессор записывает код команды вывода в порт регистра управления .
- Процессор записывает данные в порт регистра входных данных .
- Процессор устанавливает бит готовности команды. В следующих шагах процессор не задействован.
- Когда контроллер замечает, что бит готовности команды установлен, он устанавливает бит занятости.
- Контроллер анализирует код команды в регистре управления и обнаруживает, что это команда вывода. Он берет данные из регистра входных данных и инициирует выполнение команды.
- После завершения операции контроллер обнуляет бит готовности команды.
- При успешном завершении операции контроллер обнуляет бит ошибки в регистре состояния , при неудачном завершении команды – устанавливает его.
- Контроллер сбрасывает бит занятости.
При необходимости вывода новой порции информации все эти шаги повторяются. Если процессор интересует, корректно или некорректно была выведена информация, то после шага 4 он должен в цикле считывать информацию из порта регистра состояний до тех пор, пока не будет сброшен бит занятости устройства, после чего проанализировать состояние бита ошибки.
Как видим, на первом шаге (и, возможно, после шага 4) процессор ожидает освобождения устройства, непрерывно опрашивая значение бита занятости. Такой способ взаимодействия процессора и контроллера получил название polling или, в русском переводе, способа опроса устройств. Если скорости работы процессора и устройства ввода-вывода примерно равны, то это не приводит к существенному уменьшению полезной работы, совершаемой процессором. Если же скорость работы устройства существенно меньше скорости процессора, то указанная техника резко снижает производительность системы и необходимо применять другой архитектурный подход.
Для того чтобы процессор не дожидался состояния готовности устройства ввода-вывода в цикле, а мог выполнять в это время другую работу, необходимо, чтобы устройство само умело сигнализировать процессору о своей готовности. Технический механизм, который позволяет внешним устройствам оповещать процессор о завершении команды вывода или команды ввода, получил название механизма прерываний .
В простейшем случае для реализации механизма прерываний необходимо к имеющимся у нас шинам локальной магистрали добавить еще одну линию, соединяющую процессор и устройства ввода-вывода – линию прерываний . По завершении выполнения операции внешнее устройство выставляет на эту линию специальный сигнал, по которому процессор после выполнения очередной команды (или после завершения очередной итерации при выполнении цепочечных команд, т. е. команд, повторяющихся циклически со сдвигом по памяти) изменяет свое поведение. Вместо выполнения очередной команды из потока команд он частично сохраняет содержимое своих регистров и переходит на выполнение программы обработки прерывания , расположенной по заранее оговоренному адресу. При наличии только одной линии прерываний процессор при выполнении этой программы должен опросить состояние всех устройств ввода-вывода, чтобы определить, от какого именно устройства пришло прерывание ( polling прерываний !), выполнить необходимые действия (например, вывести в это устройство очередную порцию информации или перевести соответствующий процесс из состояния ожидание в состояние готовность ) и сообщить устройству, что прерывание обработано (снять прерывание ).
В большинстве современных компьютеров процессор стараются полностью освободить от необходимости опроса внешних устройств, в том числе и от определения с помощью опроса устройства, сгенерировавшего сигнал прерывания . Устройства сообщают о своей готовности процессору не напрямую, а через специальный контроллер прерываний , при этом для общения с процессором он может использовать не одну линию, а целую шину прерываний . Каждому устройству присваивается свой номер прерывания , который при возникновении прерывания контроллер прерывания заносит в свой регистр состояния и, возможно, после распознавания процессором сигнала прерывания и получения от него специального запроса выставляет на шину прерываний или шину данных для чтения процессором. Номер прерывания обычно служит индексом в специальной таблице прерываний , хранящейся по адресу, задаваемому при инициализации вычислительной системы, и содержащей адреса программ обработки прерываний – векторы прерываний . Для распределения устройств по номерам прерываний необходимо, чтобы от каждого устройства к контроллеру прерываний шла специальная линия, соответствующая одному номеру прерывания . При наличии множества устройств такое подключение становится невозможным, и на один проводник (один номер прерывания ) подключается несколько устройств. В этом случае процессор при обработке прерывания все равно вынужден заниматься опросом устройств для определения устройства, выдавшего прерывание , но в существенно меньшем объеме. Обычно при установке в систему нового устройства ввода-вывода требуется аппаратно или программно определить, каким будет номер прерывания , вырабатываемый этим устройством.
Рассматривая кооперацию процессов и взаимоисключения, мы говорили о существовании критических секций внутри ядра операционной системы, при выполнении которых необходимо исключить всякие прерывания от внешних устройств. Для запрещения прерываний , а точнее, для невосприимчивости процессора к внешним прерываниям обычно существуют специальные команды, которые могут маскировать (запрещать) все или некоторые из прерываний устройств ввода-вывода. В то же время определенные кризисные ситуации в вычислительной системе (например, неустранимый сбой в работе оперативной памяти) должны требовать ее немедленной реакции. Такие ситуации вызывают прерывания , которые невозможно замаскировать или запретить и которые поступают в процессор по специальной линии шины прерываний , называемой линией немаскируемых прерываний ( NMI – Non- Maskable Interrupt ).
Механизм обработки прерываний , по которому процессор прекращает выполнение команд в обычном режиме и, частично сохранив свое состояние, отвлекается на выполнение других действий, оказался настолько удобен, что зачастую разработчики процессоров используют его и для других целей. Хотя эти случаи и не относятся к операциям ввода-вывода, мы вынуждены упомянуть их здесь, для того чтобы их не путали с прерываниями . Похожим образом процессор обрабатывает исключительные ситуации и программные прерывания .
Для внешних прерываний характерны следующие особенности.
- Внешнее прерывание обнаруживается процессором между выполнением команд (или между итерациями в случае выполнения цепочечных команд).
- Процессор при переходе на обработку прерывания сохраняет часть своего состояния перед выполнением следующей команды.
- Прерывания происходят асинхронно с работой процессора и непредсказуемо, программист никоим образом не может предугадать, в каком именно месте работы программы произойдет прерывание .
Исключительные ситуации возникают во время выполнения процессором команды. К их числу относятся ситуации переполнения, деления на ноль, обращения к отсутствующей странице памяти и т. д. Для исключительных ситуаций характерно следующее.
- Исключительные ситуации обнаруживаются процессором во время выполнения команд.
- Процессор при переходе на выполнение обработки исключительной ситуации сохраняет часть своего состояния перед выполнением текущей команды.
- Исключительные ситуации возникают синхронно с работой процессора, но непредсказуемо для программиста, если только тот специально не заставил процессор делить некоторое число на ноль.
Программные прерывания возникают после выполнения специальных команд, как правило, для выполнения привилегированных действий внутри системных вызовов. Программные прерывания имеют следующие свойства.
- Программное прерывание происходит в результате выполнения специальной команды.
- Процессор при выполнении программного прерывания сохраняет свое состояние перед выполнением следующей команды.
- Программные прерывания , естественно, возникают синхронно с работой процессора и абсолютно предсказуемы программистом.
Надо сказать, что реализация похожих механизмов обработки внешних прерываний , исключительных ситуаций и программных прерываний лежит целиком на совести разработчиков процессоров. Существуют вычислительные системы, где все три ситуации обрабатываются по-разному.
С CPU ПК клавиатура взаимодействует через контроллер клавиатуры.
На рис. 3.3 приведена блок-схема подсоединения клавиатуры к системному интерфейсу. Контроллер клавиатуры предназначен для преобразования последовательно поступающего из клавиатуры значения скэн-кода в параллельный формат и формирования сигнала прерывания при наличии готовых для передачи в ЦПБ данных.
Данные в параллельном формате передаются программируемому параллельному интерфейсу 8255А в порт А, из которого поступают в CPU. Через биты В6 и В7 порта В этого интерфейса CPU передает в контроллер клавиатуры управляющие сигналы, которые предназначены для блокировки процессором связи с клавиатурой. Сигнал по В6 блокирует передачу синхронизирующих импульсов, а сигнал по В7 служит для блокировки передачи данных. Сигнал запроса прерывания с клавиатуры (ЗПр.) поступает в контроллер прерываний 8259А на вход IR1. Тактовые сигналы СLК от задающего генератора ПК поступают в контроллер клавиатуры для синхронизации работы CPU со входом от клавиатуры.
Блок-схема контроллера клавиатуры приведена на рис. 3.4. Основными элементами схемы контроллера клавиатуры являются: регистр сдвига, схема формирования строба и D-триггер. При передаче информации от клавиатуры в контроллер данные в последовательном коде поступают на вход DI регистра сдвига. Сдвиг в этом регистре происходит при подаче импульса из схемы формирования строба. Этот импульс формируется при наличии синхроимпульсов от клавиатуры и тактовых импульсов СLК.
При поступлении в контроллер клавиатуры очередного скэн-кода первый маркерный бит всегда равен "1". Его появление на выходе Р регистра сдвига свидетельствует об окончании преобразования этого скэн-кода, т.е. о наличии на выходе регистра данных для передачи в CPU. Этот сигнал подается на вход D-триггера, который изменяет свое состояние, формируя сигнал запроса на прерывание в БИС 8259А.
При необходимости CPU может заблокировать передачу данных с клавиатуры в контроллер путем подачи управляющих сигналов через биты В6 и В7 порта В БИС 8255А.
Рис. 3.3. Блок-схема соединения клавиатуры с системным интерфейсом
Рис. 3.4. Блок-схема контроллера клавиатуры
Билет №4 -СЕТИ
Протокол HDLC.
HDLC - протокол высокоуровнего управления каналом передачи данных, является опубликованным ISO стандартом и базовым для построения других протоколов канального уровня (SDLC, LAP, LAPB, LAPD, LAPX и LLC). Он реализует механизм управления потоком посредством непрерывного ARQ (скользящее окно) и имеет необязательные возможности (опции), поддерживающие полудуплексную и полнодуплексную передачу, одноточечную и многоточечную конфигурации, а так же коммутируемые и некоммутируемые каналы.
Существует три типа станций HDLC:
Первичная станция (ведущая) управляет звеном передачи данных (каналом). Несет ответственность за организацию потоков передаваемых данных и восстановление работоспособности звена передачи данных. Эта станция передает кадры команд вторичным станциям, подключенным к каналу. В свою очередь она получает кадры ответа от этих станций. Если канал является многоточечным, главная станция отвечает за поддержку отдельного сеанса связи с каждой станцией, подключенной к каналу.
Комбинированная станция сочетает в себе одновременно функции первичной и вторичной станции. Передает как команды, так и ответы и получает команды и ответы от другой комбинированной станции, с которой поддерживает сеанс.
Три логических состояния, в которых могут находиться станции в процессе взаимодействия друг с другом.
Состояние логического разъединения (LDS). В этом состоянии станция не может вести передачу или принимать информацию. Если вторичная станция находится в нормальном режиме разъединения (NDM - Normal Disconnection Mode), она может принять кадр только после получения явного разрешения на это от первичной станции. Если станция находится в асинхронном режиме разъединения (ADM - Asynchronous Disconnection Mode), вторичная станция может инициировать передачу без получения на это явного разрешения, но кадр должен быть единственным кадром, который указывает статус первичной станции. Условиями перехода в состояние LDS могут быть начальное или повторное (после кратковременного отключения) включение источника питания; ручное управление установлением в исходное состояние логических цепей различных устройств станции и определяется на основе принятых системных соглашений.
Состояние инициализации (IS). Это состояние используется для передачи управления на удаленную вторичную/комбинированную станцию, ее коррекции в случае необходимости, а также для обмена параметрами между удаленными станциями в звене передачи данных, используемыми в состоянии передачи информации.
Состояние передачи информации (ITS). Вторичной, первичной и комбинированным станциям разрешается вести передачу и принимать информацию пользователя. В этом состоянии станция может находится в режимах NRM, ARM и ABM, которые описаны ниже.
Три режима работы станции в состоянии передачи информации, которые могут устанавливаться и отменяться в любой момент.
Режим нормального ответа (NRM - Normal Response Mode) требует, чтобы прежде, чем начать передачу, вторичная станция получила явное разрешение от первичной. После получения разрешения вторичная станция начинает передачу ответа, который может содержать данные. Пока канал используется вторичной станцией, может передаваться один или более кадров. После последнего кадра вторичная станция должна снова ждать явного разрешения, прежде чем снова начать передачу. Как правило, этот режим используется вторичными станциями в многоточечных конфигурациях звена передачи данных.
Режим асинхронного ответа (ARM - Asynchronous Response Mode)позволяет вторичной станции инициировать передачу без получения явного разрешения от первичной станции (обычно, когда канал свободен, - в состоянии покоя). Этот режим придает большую гибкость работы вторичной станции. Могут передаваться один или несколько кадров данных или управляющая информация, отражающая изменение статуса вторичной станции. ARM может уменьшить накладные расходы, поскольку вторичная станция, чтобы передать данные, не нуждается в последовательности опроса. Как правило, такой режим используется для управления соединенными в кольцо станциями или же в многоточечных соединениях с опросом по цепочке. В обоих случаях вторичная станция может получить разрешение от другой вторичной станции и в ответ на него начать передачу. Таким образом разрешение на работу продвигается по кольцу или вдоль соединения.
Асинхронный сбалансированный режим (ABM - Asynchronous Balanse Mode) используют комбинированные станции. Комбинированная станция может инициировать передачу без получения предварительного разрешения от другой комбинированной станции. Этот режим обеспечивает двусторонний обмен потоками данных между станциями и является основным (рабочим) и наиболее часто используемым на практике.
Три способа конфигурирования канала для обеспечения совместимости взаимодействий между станциями, использующих основные элементы процедур HDLC и способных в процессе работы менять свой статус (первичная, вторичная, комбинированная):
Несбалансированная конфигурация (UN - Unbalanced Normal) обеспечивает работу одной первичной станции и одной или большего числа вторичных станций в конфигурации одноточечной или многоточечной, полудуплексной или полнодуплексной, с коммутируемым каналом и с некоммутируемым. Конфигурация называется несбалансированной потому, что первичная станция отвечает за управление каждой вторичной станцией и за выполнение команд установления режима.
Симметричная конфигурация (UA - Unbalanced Asynchronous) была в исходной версии стандарта HDLC и использовалась в первых сетях. Эта конфигурация обеспечивает функционирование двух независимых двухточечных несбалансированных конфигураций станций. Каждая станция обладает статусом первичной и вторичной, и, следовательно, каждая станция логически рассматривается как две станции: первичная и вторичная. Главная станция передает команды вторичной станции на другом конце канала, и наоборот. Несмотря на то, что станция может работать как в качестве первичной, так и вторичной станции, которые являются самостоятельными логическими объектами, реальные команды и ответы мультиплексируются в один физический канал. Этот подход в настоящее время используется редко.
Сбалансированная конфигурация (BA - Balanced Asynchronous) состоит из двух комбинированных станций, метод передачи - полудуплексный или дуплексный, канал - коммутируемый или некоммутируемый. Комбинированные станции имеют равный статус в канале и могут несанкционированно посылать друг другу трафик. Каждая станция несет одинаковую ответственность за управление каналом.
Протокол может использоваться в каналах доступа к хостам и маршрутизаторам. Обеспечивает гарантированную доставку кадров.
Программируемый микроконтроллер клавиатуры i8042 , KBC (keyboard controller), является посредником между клавиатурой, подключенной к нему по вышеописанному последовательному интерфейсу, и центральным процессором, с которым он связан через параллельный интерфейс. В микроконтроллере постоянно исполняется внутренняя микропрограмма, реагирующая на сигналы интерфейса клавиатуры и команды, поступающие от процессора. Эта микропрограмма (KBC BIOS) хранится во внутреннем масочном ПЗУ контроллера; внешне она недоступна, и контроллер можно рассматривать как устройство с заданными свойствами. Поскольку логика работы контроллера реализована программой, его реакция на команды процессора и сигналы интерфейса относительно медленная — время отклика измеряется десятками микросекунд. Помимо управления клавиатурой через программно-управляемые и программно-читаемые линии внешних портов контроллера формируются сигналы управления вентилем Gate A20, аппаратного системного сброса, а также считываются сигналы от конфигурационных джамперов системной платы. Контроллер 18242, кроме интерфейса клавиатуры, поддерживает аналогичный интерфейс дополнительного устройства — PS/2-Mouse. При инициализации (по аппаратному сбросу) контроллер установится в режим PS/2 или AT, в зависимости от состояния определенного вывода микросхемы. В режиме AT контроллер не выполняет функции интерфейса мыши и игнорирует все команды, относящиеся к мыши. Режим выбирается соответствующей настройкой BIOS Setup.
Таблица 8.1 . Назначение регистров контроллера клавиатуры
Контроллер имеет два внешних порта, с помощью которых и реализуются последовательные интерфейсы, а также управление вентилем GateA20, сигналом сброса процессора и чтением сигналов от джамперов системной платы и ключа блокировки клавиатуры. Эти порты не имеют непосредственного отображения в пространстве адресов ввода-вывода PC; доступ к ним осуществляется через команды контроллера. Кроме этих портов контроллер имеет два специальных входа T0 и T1, которые могут считываться его микропрограммой и использоваться в качестве источников его внутренних прерываний (это не прерывания CPU). Каждая из двунаправленных интерфейсных линий KB-Data, KB-Clock, MS-Data и MS-Clock реализуется битом порта вывода и битом ввода. В режиме PS/2 для чтения линий KB-Clock и MS-Clock используются входы T0 и T1, в режиме AT вход T1 используется для линии KB-Data.
Порт ввода P1 доступен по команде C0h; в режиме PS/2 имеет следующее назначение бит:
В современных ПК используются только биты 0, 1 и 7; в режиме AT биты 0 и 1 не используются.
Порт вывода (P2), доступный для записи и чтения по командам D1h и D0h соответственно, имеет следующее назначение бит:
Приняв посылку от клавиатуры, контроллер выполняет внутреннюю трансляцию скан-кода (если это не запрещено командным байтом) и устанавливает в регистре состояния OBF=1, что приводит к генерации запроса прерывания IRQ1 (если это не запрещено командным байтом). В ответ на это хост должен считать данные (транслированный скан-код, префиксы и т.п.) из порта данных (60h). Трансляция обеспечивает программную совместимость клавиатур XT и AT (см. ниже) по чтению скан-кодов из порта 60h. При получении посылки от мыши контроллер не выполняет никаких преобразований и устанавливает в регистре состояния Mouse_OВF=1, что приводит к генерации запроса прерывания IRQ12 (если это не запрещено командным байтом). По этому сигналу данные от мыши должны быть считаны хостом из того же порта 60h. To же самое происходит и при программной записи байта в выходной буфер клавиатуры (код D2h) или мыши (код D3h), с установкой соответствующих битов состояния и генерацией запросов IRQ1 или IRQ12.
После получения команды, по которой контроллер должен возвращать данные, он устанавливает в регистре состояния OBF=1, что приводит к генерации запроса прерывания IRQ1 (если это не запрещено командным байтом). После этого данные должны быть считаны из порта данных (по адресу 60h). Если команда возвращает несколько байтов данных, прерывание генерируется для каждого байта.
Взаимодействие с контроллером осуществляется подачей команд — записью в регистр команд (по адресу 064h). Перед посылкой команды необходимо убедиться в готовности контроллера к ее приему — бит 1 порта 64h должен иметь нулевое значение. Подробно команды контроллера описаны в литературе [2, 8]. Контроллеры клавиатуры различаются версиями встроенного ПО, поэтому замена контроллера другим, с отличающейся версией ПО (KBC BIOS), может оказаться проблематичной — микросхема BIOS системной платы должна знать особенности контроллера клавиатуры.
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.
8.1.2. Контроллер интерфейса клавиатуры и мыши 8042/8242
Программируемый микроконтроллер клавиатуры 18042, КВС (keyboard controller), является посредником между клавиатурой, подключенной к нему по вышеописанному последовательному интерфейсу, и центральным процессором, с которым он связан через параллельный интерфейс. В микроконтроллере постоянно исполняется внутренняя микропрограмма, реагирующая на сигналы интерфейса клавиатуры и команды, поступающие от процессора. Эта микропрограмма (КВС BIOS) хранится во внутреннем масочном ПЗУ контроллера; внешне она недоступна, и контроллер можно рассматривать как устройство с заданными свойствами. Поскольку логика работы контроллера реализована программой, его реакция на команды процессора и сигналы интерфейса относительно медленная — время отклика измеряется десятками микросекунд. Помимо управления клавиатурой через программно-управляемые и программно-читаемые линии внешних портов контроллера формируются сигналы управления вентилем Gate A 20, аппаратного системного сброса, а также считываются сигналы от конфигурационных джамперов системной платы. Контроллер 18242, кроме интерфейса клавиатуры, поддерживает аналогичный интерфейс дополнительного устройства — PS/2-Mouse. При инициализации (по аппаратному сбросу) контроллер установится в режим PS/2 или AT, в зависимости от состояния определенного вывода микросхемы. В режиме AT контроллер не выполняет функции интерфейса мыши и игнорирует все команды, относящиеся к мыши. Режим выбирается соответствующей настройкой BIOS Setup.
314 Глава 8. Специализированные интерфейсы периферийных устройств
Таблица 8.1. Назначение регистров контроллера клавиатуры Порт, R / W Назначение
0 60 RW Порт данных 8042
064 R Регистр состояния 8042 (R/O): бит 7 — ошибка четности при последнем обмене
с клавиатурой; бит 6 — тайм-аут приемника/общий тайм-аут 1 ; бит 5 — тайм-аут передатчика/выходной буфер интерфейса мыши полон (Mouse J DBF) 1 ; бит 4: 0 — клавиатура на замке; бит 3:1 — последняя запись была командой, 0 — данными; бит 2: системный флаг, устанавливается в 0 по включении питания, в 1 — программно (что означает состояние завершения системного сброса Reset OK); бит 1:1— входной буфер интерфейса клавиатуры полон, 0 — готовность к приему команды/данных; бит 0:1— выходной буфер интерфейса клавиатуры полон (DBF)
064 W Регистр команд 8042
1 Второе назначение бита относится к контроллеру i8242B, имеющему дополнительный интерфейс для подключения PS/2-Mouse.
Контроллер имеет два внешних порта, с помощью которых и реализуются последовательные интерфейсы, а также управление вентилем GateA20, сигналом сброса процессора и чтением сигналов от джамперов системной платы и ключа блокировки клавиатуры. Эти порты не имеют непосредственного отображения в пространстве адресов ввода-вывода PC; доступ к ним осуществляется через команды контроллера. Кроме этих портов контроллер имеет два специальных входа ТО и Т1, которые могут считываться его микропрограммой и использоваться в качестве источников его внутренних прерываний (это не прерывания CPU). Каждая из двунаправленных интерфейсных линий KB-Data, KB-Clock, MS-Data и MS-Clock реализуется битом порта вывода и битом ввода. В режиме PS/2 для чтения линий KB-Clock и MS-Clock используются входы ТО и Т1, в режиме AT вход Т1 используется для линии KB-Data.
Порт ввода Р1 доступен по команде C0h; в режиме PS/2 имеет следующее назначение бит:
бит 7 — ключ блокировки клавиатуры ( Keylock ): 0 — клавиатура заблокирована;
бит 6 — перемычка установки видеорежима: 0 — цветной (Color), 1 — монохромный (Mono);
бит 5 — системная перемычка: 0 —замкнута;
бит 4 — перемычка задания объема ОЗУ: 0 — 256 Кбайт, 1 — 512 Кбайт и более;
биты 3, 2 — не используются;
бит 1 — линия MS-Data;
бит 0 — линия KB-Data.
В современных ПК используются только биты 0,1 и 7; в режиме AT биты О и 1 не используются.
Порт вывода (Р2), доступный для записи и чтения по командам Dlh и D0h соответственно, имеет следующее назначение бит:
бит 7 — линия KB-Data;
бит 6 — линия KB-Clk;
8.1. Интерфейс клавиатуры 315
бит 5 — запрос прерывания от дополнительного интерфейса (IRQ12), в режиме AT не используется;
бит 4 — запрос прерывания от клавиатуры (IRQ1);
бит 3 — линия MS-Clk, в режиме AT не используется;
бит 2 — линия MS-Data, в режиме AT не используется;
бит 1 — вентиль линии адреса А20 ( Gate A 20, см. п. 12.3): 0 — А20 обнулен, 1 — управляется выводом процессора;
бит 0 — альтернативный сброс процессора (сигнала INIT, без формирования общего сигнала сброса).
Приняв посылку от клавиатуры, контроллер выполняет внутреннюю трансляцию скан-кода (если это не запрещено командным байтом) и устанавливает в регистре состояния OBF=1, что приводит к генерации запроса прерывания IRQ1 (если это не запрещено командным байтом). В ответ на это хост должен считать данные (транслированный скан-код, префиксы и т. п.) из порта данных (60h). Трансляция обеспечивает программную совместимость клавиатур XT и AT (см. ниже) по чтению скан-кодов из порта 60h. При получении посылки от мыши контроллер не выполняет никаких преобразований и устанавливает в регистре состояния Моusе_0ВF-1, что приводит к генерации запроса прерывания IRQ12 (если это не запрещено командным байтом). По этому сигналу данные от мыши должны быть считаны хостом из того же порта 60h. To же самое происходит и при программной записи байта в выходной буфер клавиатуры (код D2h) или мыши (код D3h), с установкой соответствующих битов состояния и генерацией запросов IRQ1 или IRQ 12.
После получения команды, по которой контроллер должен возвращать данные, он устанавливает в регистре состояния OBF=1, что приводит к генерации запроса прерывания IRQ1 (если это не запрещено командным байтом). После этого данные должны быть считаны из порта данных (по адресу 60h). Если команда возвращает несколько байтов данных, прерывание генерируется для каждого байта.
Взаимодействие с контроллером осуществляется подачей команд — записью в регистр команд (по адресу 064h). Перед посылкой команды необходимо убедиться в готовности контроллера к ее приему — бит 1 порта 64h должен иметь нулевое значение. Подробно команды контроллера описаны в литературе [2, 8]. Контроллеры клавиатуры различаются версиями встроенного ПО, поэтому замена контроллера другим, с отличающейся версией ПО (КВС BIOS), может оказаться проблематичной — микросхема BIOS системной платы должна знать особенности контроллера клавиатуры.
8.1.3. Системная поддержка и программный интерфейс
Клавиатура имеет системную поддержку на уровне BIOS — обработку фактов нажатия и отпускания клавиш и обеспечение сервисов ввода символов с клавиатуры, а также управления ее параметрами (задержка и частота автоповтора) и индикаторами. Коды, принятые от клавиатуры ее контроллером, считываются и обра-
316 Глава 8. Специализированные интерфейсы периферийных устройств
батываются обработчиком аппаратного прерывания IRQ1 (вектор 09h). Результат обработки помещается в клавиатурный буфер, из которого по программному прерыванию Int 16h этот результат для дальнейшей обработки может быть извлечен значительно позже. Нажатие «системной» комбинации Ctrl+Alt+Del, клавиши PrintScreen (SysRq) и некоторых других к записи в клавиатурный буфер не приводит, а вызывает специальные процедуры. Прикладной программе, для которой требуется нестандартное использование клавиатуры (например, в качестве музыкальной), придется самой заниматься обработкой аппаратного прерывания IRQ1, перехватывая вектор Int 09h. Перехват этого вектора требуется и для вызова каких-либо функций резидентных программ по «горячим» клавишам.
Для обслуживания клавиатуры используются ячейки ОЗУ из области данных BIOS (BIOS Data Area):
0:0417,0:418 — флаги клавиатуры;
0:0419 — аккумулятор кода Alt-набора;
0:041 А— указатель головы буфера (Buffer Head),2байта (модифицируется
при помещении символа в буфер);
0:041C — указатель хвоста буфера (Buffer Tail), 2 байта (модифицируется при
извлечении символа из буфера);
0:041E-0:042D — область кольцевого буфера (16 слов).
8.2. Интерфейсы мыши
Мышь является устройством, предназначенным для ввода координат и подачи команд. Интерфейс мыши применим для любого физического воплощения устройства (мышь, трекбол). По интерфейсу с компьютером различают три основных вида мышей: Bus Mouse, Serial Mouse и PS/2-Mouse. Появились мыши с интерфейсом USB, но они пока не получили широкого распространения (как и клавиатура USB, к порту которой удобно подключить мышь USB).
8.2. Интерфейсы мыши 317
С интерфейсами Serial Mouse и PS/2-Mouse иногда возникают недоразумения. Хотя оба они последовательные, но имеют существенные принципиальные различия в уровнях сигналов, способе синхронизации, частоте и формате посылок.
Интерфейс PS/2 использует однополярный сигнал с уровнями ТТЛ, питание мыши — однополярное с напряжением +5 В относительно шины GND. Интерфейс RS-232C, применяемый в Serial Mouse, использует двуполярный сигнал (см. п. 2.1) с уровнями срабатывания +3 В и -3 В, и для него требуется двупо-лярное (относительно шины GND) питание мыши.
Интерфейс PS/2 использует две раздельные сигнальные линии, одну для пе
редачи данных, другую — для сигналов синхронизации. Serial Mouse использует асинхронный способ передачи данных всего по одной линии.
Даже не рассматривая частоты и форматы посылок, становится ясно, что прямой совместимости между этими интерфейсами быть не может. Тем не менее выпускаются и продаются переходники (пассивные!), позволяющие выбирать способ подключения мыши. Эти переходники предназначены только для универсальных мышей, у которых встроенный контроллер по напряжению питания способен распознать, к какому интерфейсу его подключили, и установить соответствующий тип своего выходного интерфейса. Универсальные мыши не особо распространены, поэтому часто приходится слышать о неудачных попытках применения таких переходников к обычной мыши Serial Mouse или PS/2-Mouse.
Дополнительную путаницу вносят мыши для компьютера Macintosh, которые имеют разъем, с виду напоминающий разъем PS/2. Однако при ближайшем рассмотрении и неудачной попытке включения его в PC становится ясно, что разъемы эти разные, да и интерфейс совершенно иной.
8.2.1. Последовательные мыши — MS Mouse и PC Mouse
Serial Mouse — мышь с последовательным интерфейсом, подключаемая через 9- или 25-контактный разъем СОМ-порта (табл. 8.2). Эта мышь имеет встроенный микроконтроллер, который обрабатывает сигналы от координатных датчиков и кнопок. Каждое событие — перемещение мыши или нажатие-отпускание кнопки кодируется двоичной посылкой по интерфейсу RS-232C. Для передачи информации применяется асинхронная передача, а двуполярное питание, требуемое по протоколу RS-232, обеспечивается от управляющих линий интерфейса. Недостатком Serial Mouse является то, что она занимает СОМ-порт и требует монопольного владения его штатной линии прерывания (IRQ4 для СОМ1 и IRQ3 для COM2). Конечно, то, что для использования мыши порту СОМ1 требуется именно прерывание IRQ4, является недостатком не самой мыши, а ее программного драйвера, но для пользователя, не увлекающегося написанием «мышиных» драйверов, важен только факт этого ограничения. Две основные разновидности — MS Mouse (Microsoft Mouse) и PC Mouse (Mouse Systems Mouse) — требуют раз-
318 Глава 8. Специализированные интерфейсы периферийных устройств
ных драйверов, многие мыши имеют переключатель MS/PC. Эти два типа «мышей» при одинаковой скорости 1200 бит/с, одном стоп-бите и отсутствии контроля паритета используют различные форматы посылок.
MS Mouse : 1 бит данных, трехбайтный пакет (в «классическом» варианте), положительным значениям соответствует перемещение по координате X вправо, а по координате Y вниз. Для трехкнопочных мышей добавляется четвертый байт, передаваемый только при изменении состояния средней кнопки. Для 3D-мыши четвертый байт имеет иное назначение.
PC Mouse : 8 бит данных, пятибайтный пакет, положительным значениям соответствует перемещение по координате X вправо, а по координате Y вверх.
Из рассмотрения данных форматов становятся понятными беспорядочные перемещения указателя мыши на экране при несоответствии драйвера типу мыши. Несовместимость может проявляться и более неприятным образом: к примеру, ОС Windows 95 при загрузке (и установке) вообще не воспринимает мышь, работающую в режиме PC Mouse (ей «не нравится» идентификатор, сообщаемый мышью при инициализации). При загруженной ОС переключение режима приводит «только» к непредсказуемым прыжкам указателя мыши и ложным срабатываниям кнопок.
Таблица 8.2. Разъемы Serial Mouse
Сигнал Контакт DB 9 Контакт DB 25 ЦепьСОМ-порта
Читайте также: