Порт программирование это

Следующее Предыдущее Содержание


Вот некоторая программная информация для общих портов. Которые могут быть непосредственно использованы для общего назначения TTL (или CMOS) логического ввода-вывода. Если вы хотите использовать эти или другие общие порты по назначению (например. Для управления обычным принтером или модемом), вам. Скорее всего. Следует использовать существующие драйверы (которые обычно включены в ядро) вместо того. Чтобы программировать порты напрямую. Как описано в этом руководстве. Этот раздел предназначен для тех. Кто хочет подключить жидкокристаллические дисплеи. Шаговые двигатели или другую пользовательскую электронику к стандартным портам ПК.

Если вы хотите управлять массовым устройством. Таким как сканер (который уже некоторое время существует на рынке). Поищите для него существующий драйвер Linux. Аппаратное обеспечение-это хорошее место для начала.

http://www.hut.fi/Misc/Electronics/ является хорошим источником для получения дополнительной информации о подключении устройств к компьютерам (и об электронике в целом).

Базовый адрес параллельного порта (называемый `BASE/dev/lp0, 0x378 for /dev/lp1и 0x278 for /dev/lp2. Если вы хотите управлять только тем, что работает как обычный принтер, обратитесь

к ИНСТРУКЦИИ по печати.

В дополнение к стандартному режиму только для вывода. Описанному ниже. В большинстве параллельных портов существует Для получения информации об этом и более новых режимах ECP/EPP (и стандарте IEEE 1284 в целом) см. http://www.fapo.com/ и http://www.senet.com.au/~cpeacock/parallel.htm. Помните, что поскольку вы не можете использовать IRQ или DMA в программе пользовательского режима. Вам, вероятно. Придется написать драйвер ядра для использования ECP/EPP; Я думаю, что кто-то пишет такой драйвер. Но я не знаю подробностей.

Порт BASE+0(Порт данных) управляет сигналами данных порта (D0 — D7 для битов от 0 до 7 соответственно; состояния: 0 = низкий (0 В), 1 = высокий (5 В)). Запись в этот порт фиксирует данные на выводах. Чтение возвращает данные. Последние записанные в стандартном или расширенном режиме записи. Или данные в выводах с другого устройства в расширенном режиме чтения.

Порт BASE+1(Status port) доступен только для чтения и возвращает состояние следующих входных сигналов:

  • Биты 0 и 1 зарезервированы.
  • Бит 2 IRQ status (не pin-код, я не знаю. Как это работает)
  • ОШИБКА бита 3 (1=высокий)
  • Бит 4 SLCT (1=высокий)
  • Бит 5 PE (1=высокий)
  • Бит 6 ACK (1=высокий)
  • Бит 7 -ЗАНЯТ (0=высокий)

Порт BASE+2(порт управления) предназначен только для записи (чтение возвращает данные. Записанные последним) и управляет следующими сигналами состояния:

  • Бит 0 -СТРОБОСКОП (0=высокий)
  • Бит 1 -AUTO_FD_XT (0=high)
  • Бит 2 INIT (1=высокий)
  • Бит 3 -SLCT_IN (0=high)
  • Бит 4 включает IRQ параллельного порта (который происходит при переходе ACK от низкого уровня к высокому) при установке значения 1.
  • Бит 5 управляет направлением расширенного режима (0 = запись, 1 = чтение) и полностью доступен только для записи (чтение не возвращает ничего полезного для этого бита).
  • Биты 6 и 7 зарезервированы.

Распиновка (25-контактный женский разъем D-shell на порту) (i=вход, o=выход):

1io -STROBE, 2io D0, 3io D1, 4io D2, 5io D3, 6io D4, 7io D5, 8io D6, 9io D7, 10i ACK, 11i -BUSY, 12i PE, 13i SLCT, 14o -AUTO_FD_XT, 15i ERROR, 16o INIT, 17o -SLCT_IN, 18-25 Ground 

Спецификации IBM говорят, что контакты 1, 14, 16 и 17 (управляющие выходы) имеют драйверы открытого коллектора. Вытянутые до 5 В через резисторы 4,7 килоом (приемник 20 мА. Источник 0,55 мА. Высокоуровневый выход 5,0 В минус подтягивание). Остальные контакты поглощают 24 мА. Источник-15 мА. А их высокоуровневый выход равен мин. 2.4 В. Низкое состояние для обоих составляет максимум 0.5 В. Параллельные порты Не IBM, вероятно. Отклоняются от этого стандарта. Для получения дополнительной информации об этом см. http://www.hut.fi/Misc/Electronics/circuits/lptpower.html.

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

Игровой порт расположен по адресам портов 0x200-0x207. Если вы хотите управлять обычными джойстиками. Вам, вероятно. Лучше использовать драйверы. Распространяемые вместе с ядром Linux.

Распиновка (15-контактный разъем D-shell на порту):

  • 1,8,9,15: +5 В (мощность)
  • 4,5,12: Земля
  • 2,7,10,14: Цифровые входы BA1, BA2, BB1 и BB2 соответственно
  • 3,6,11,13: `Аналоговые

Контакты +5 В. По-видимому. Часто подключаются непосредственно к линиям питания материнской платы. Поэтому они могут быть источником довольно большого количества энергии. В зависимости от материнской платы. Источника питания и игрового порта.

Цифровые входы используются для кнопок двух джойстиков (джойстик А и джойстик В. По две кнопки в каждом). Которые можно подключить к порту. Они должны быть обычными входами уровня TTL. И вы можете считывать их состояние непосредственно из порта состояния (см. Ниже). Реальный джойстик возвращает низкое (0 В) состояние при нажатии кнопки и высокое (5 В от контактов питания через резистор 1 Ком) состояние в противном случае.

Так называемые аналоговые входы фактически измеряют сопротивление. Игровой порт имеет четырехъядерный одновибратор (чип 558). Подключенный к четырем входам. На каждом входе имеется резистор 2,2 Ком между входным выводом и выходом мультивибратора и конденсатор синхронизации 0,01 мкФ между выходом мультивибратора и землей. Реальный джойстик имеет потенциометр для каждой оси (X и Y). Подключенный между +5 В и соответствующим входным контактом (AX или AY для джойстика A. Или BX или BY для джойстика B).

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

R = (t — 24,2) / 0,011,

где R — сопротивление (ом) потенциометра. А t — длительность высокого периода (микросекунды).

Таким образом. Чтобы считывать аналоговые входы. Вы сначала активируете мультивибратор (с записью порта; см. ниже). Затем опрашиваете состояние четырех осей (с повторными считываниями порта) до тех пор. Пока они не перейдут из высокого состояния в низкое. Измеряя продолжительность их высокого периода. Этот опрос использует довольно много процессорного времени. И в системе многозадачности не в реальном времени. Например (обычный пользовательский режим) Linux. Результат не очень точен. Потому что вы не можете постоянно опрашивать порт (если только вы не используете драйвер уровня ядра и не отключаете прерывания во время опроса. Но это тратит еще больше ресурсов процессора время). Если вы знаете. Что сигнал будет идти долго (десятки мс). Вы можете вызвать usleep() перед опросом. Чтобы дать процессорное время другим процессам.

Единственный порт ввода-вывода. К которому вам нужно получить доступ. — это порт 0x201 (остальные порты либо ведут себя одинаково. Либо ничего не делают). Любая запись в этот порт (неважно. Что вы пишете) активирует мультивибратор. Считывание с этого порта возвращает состояние входных сигналов:

  • Бит 0: AX (состояние (1=высокое) выхода мультивибратора)
  • Бит 1: AY (статус (1=высокий) выхода мультивибратора)
  • Бит 2: BX (состояние (1=высокое) выхода мультивибратора)
  • Бит 3: BY (статус (1=высокий) выхода мультивибратора)
  • Бит 4: BA1 (цифровой вход, 1=высокий)
  • Бит 5: BA2 (цифровой вход, 1=высокий)
  • Бит 6: BB1 (цифровой вход, 1=высокий)
  • Бит 7: BB2 (цифровой вход, 1=высокий)

Если устройство, с которым вы разговариваете, поддерживает что-то похожее на RS-232, вы должны иметь возможность использовать последовательный порт для разговора с ним. Последовательного драйвера Linux должно быть достаточно почти для всех приложений (вам не нужно программировать последовательный порт напрямую. И вам, вероятно. Придется написать драйвер ядра для этого); он довольно универсален. Поэтому использование нестандартных скоростей bps и так далее не должно быть проблемой.

Смtermios(3). страницу руководства. Исходный код последовательного драйвера (linux/drivers/char/serial.c) и http://www.easysw.com/~mike/serial/ для получения дополнительной информации о программировании последовательных портов в системах Unix.


Следующее Предыдущее Содержание