Опубликован: 24.04.2009 | Доступ: свободный | Студентов: 1180 / 358 | Оценка: 4.39 / 4.28 | Длительность: 18:45:00
Специальности: Программист
Лекция 3:

Стандарты интерфейса ввода/вывода для внешних устройств

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Программная поддержка последовательной коммуникации

Большинство операционных систем предоставляют драйверы устройств для последовательных портов. В системах X86 последовательные порты обычно имеют имя устройства COMx:, где x является номером последовательного порта. В Windows Embedded CE в C/C++ можно открыть порт COM с помощью функции CreateFile, прочитать данные с помощью ReadFile, и записать последовательные данные с помощью WriteFile. Чтобы закрыть последовательный порт, используйте CloseHandle. Скорость передачи, число битов данных, четность и другие параметры можно прочитать и задать с помощью функций GetCommStatus и SetCommStatus. COM1: часто используется для отладочной информации в Windows Embedded CE. Если обе операции последовательной передачи и получения нужны одновременно, обычно используются потоки. Один поток посылает последовательные данные, а другой поток получает последовательные данные. В этих потоках обычно используется специальная функция синхронизации WaitCommEvent.

Интерфейс PS/2 клавиатуры и мыши

Интерфейс Personal System 2 (PS/2) основывается на стандарте, который использовался для мыши и клавиатуры в первом ПК IBM в 1984 г. Многие встроенные компьютерные платы поддерживают использование мыши или клавиатуры с помощью коннектора PS/2 на плате. Сигнальный коннектор PS/2 имеет 6 контактов, включая заземление, питание (5V-VDD), данные PS/2, и линию синхронизации PS/2. Компьютер подает питание в микроконтроллеры мыши и клавиатуры.

Линия последовательных данных PS/2 несколько похожа на сигналы RS-232, но в этом случае тактовый сигнал пересылается между устройством и компьютером для синхронизации, и используются стандартные уровни напряжения логического вентиля. Это делает оборудование менее сложным, но требуется дополнительный сигнальный провод для синхронизации.

Линии синхронизации и данных PS/2 являются открытыми коллекторами выхода и двунаправленными. В системах с мышью и клавиатурой имеется набор линий синхронизации и данных PS/2 для каждого устройства. Линия синхронизации обычно управляется клавиатурой (или мышью), но также может управляться компьютерной системой, когда она захочет остановить передачу данных с клавиатуры. Клавиатура (или мышь) и компьютер могут управлять линией данных. Единственная линия данных передает все данные между двумя устройствами. Клавиатура (или мышь) и компьютер могут обмениваться несколькими командами и сообщениями.

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

Скан-коды клавиатуры PS/2 состоят из последовательностей кодов "Make" и "Break". Каждый раз при нажатии клавиши посылается код make. Код break посылается, когда клавиша освобождается. Для многих клавиш код break является потоком байтов 0xF0, за которым следует код make для клавиши. При печати распространено удерживание нажатыми нескольких клавиш одновременно, прежде чем освобождается первая клавиша. С помощью кодов make и break, компьютер может решить, была ли нажата клавиша, и что нажато более одной клавиши. Он может также различить, какая клавиша была освобождена. Это также происходит, когда используются клавиши shift или control. Когда нажимается клавиша shift, клавиша '1' должна вернуть значение для символа '!' вместо значения для символа '1'. 8-битные скан-коды передаются последовательно по линиям данных PS/2 с помощью 11-битного формата. Когда оба устройство PS/2 и компьютер не посылают никакие данные, линия данных PS/2 и линия синхронизации PS/2 будут в состоянии High (неактивными).

Рисунок 3.3 показывает передачу одного байта скан-кода клавиатуры, и он состоит из следующих битов:

  1. Старт-бит ('0')
  2. 8-битные данные, содержащие скан-код клавиши в порядке от младших к старшим битам.
  3. Бит контроля нечетности.
  4. Стоп-бит ('1')

Во время передачи данных из устройства PS/2 происходит следующее:

  • Устройство PS/2 проверяет, что линии синхронизации и клавиатуры являются неактивными. Неактивность указывается состоянием сигнала High. Если обе линии неактивны, клавиатура готовит 'стартовый бит', делая состояние линии данных Low.
  • Устройство PS/2 затем переводит линию синхронизации в состояние Low примерно на 35 мкс.
  • Устройство PS/2 затем пересылает остальные 10 битов на скорости около 70 мкс за такт. Устройство PS/2 управляет данными и линией синхронизации.
  • Компьютер распознает ‘старт’ бит и такты в последовательных данных. За 8-битами последовательных данных следует бит контроля нечетности, и наконец High стоп-бит. Если устройство PS/2 хочет послать еще данные, то сразу за 11-тым битом следует следующий ‘старт’ бит. Эта схема повторяется пока клавиатура не закончит посылать данные, и тогда линии синхронизации и данных вернуться в свое неактивное состояние High.
Передача PS/2 скан-кода клавиатуры

Рис. 3.3. Передача PS/2 скан-кода клавиатуры

На рисунке 3.3 клавиатура посылает скан-код 16 для клавиши "1", и он имеет нулевой бит четности.

Клавиатура PS/2 и мышь PS/2 используют один и тот же протокол синхронной последовательной коммуникации. Внутренне первоначальная мышь содержала шарик, который вращал два колесика с прорезями. Колесики были соединены с двумя оптическими датчиками положения. Два оптических датчика сообщали о движении по осям x и y, подсчитывая импульсы при движении колесиков. Она содержала также две или три кнопки для нажатия, которые могут считываться системой и однокристальным микроконтроллером. После включения питания посылается команда PS/2, приказывающая мыши начать посылать специальные пакеты данных. Встроенная в микроконтроллер программа в мыши затем начинает периодически посылать в компьютер 3-байтные пакеты данных по сигнальным линиям PS/2. Трехбайтные пакеты данных мыши сообщают относительные движения XY и статус кнопок.

Программное обеспечение интерфейса PS/2 клавиатуры и мыши

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

В настольной ОС Windows и в Windows Embedded CE, активность ввода клавиатуры и мыши автоматически создают посылаемое событие Windows, которое обрабатывается функцией обратного вызова приложения окна. Приложение обрабатывает сообщения, которые ему посланы. Он не читает непосредственно ввод клавиатуры и мыши.

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >