LINUX.ORG.RU

Простое общение с аппаратным портом


0

0

Возникла необходимость получать с аппаратного порта (в моём случае LPT) байты данных через некоторый промежуток времени. Я нашёл в <sys/io.h> определения inb/outb, которые здесь подходят (нашёл в простой проге ledblink, управляющей какими-то лампочками на порту), оттуда же взял константу для параллельного порта - 0x378. А вообще где их брать-то?

Из документации (man outb):
 Эти функции специфичны для конкретного оборудования. Аргументы порт и значение находятся в порядке, обратном многим реализациям этих функций в DOS.  

Из кода ledblink, led.c:

  /* Parport stuff */
  #include <sys/io.h>
  /*
   Hmmm... FIXME, hardcoded... but I don't care as long as it works ;) 
  */
  #define DATA 0x378

комментарий я перевёл как "сорри, что значение взято наобум, то так как это, как ни странно, работает, то мне это до лампочки" ;)

Объясните кто-нибудь, откуда взять, например, значение для COM-порта? для USB-порта?


anonymous

в биосе посмотри номера портов. а ваще я когдато тут даже в новости кидал ссылку на прожку, как запрограммировать lpt порт... на перле :D

http://www.linux.org.ru/profile/vilfred/view-message.jsp?msgid=197415&bac...

по поводу угадал вспомнил:

"если посадить 1.000.000.000 обезъян за клавиатуры, то
есть некая конечная вероятность того, что одна из них накодит программу,
считающую число пи" (с) в каком то форуме было...

vilfred ☆☆
()

>  Объясните кто-нибудь, откуда взять, например, значение для COM-порта? для 
> USB-порта?

Для работы аппаратными средствами PC, желательно для начала ознакомиться с их
электрической и программной спецификацией. Тогда и многие вопросы отпадут
и узнаете, например, о существовании нескольких режимов LPT порта и  еще
много чего интересного :)

senjy
()
Ответ на: комментарий от senjy

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

если можно, расскажи поподробнее про эти самые режимы или хотя бы дай какой-нибудь линк, где почитать

anonymous
()
Ответ на: комментарий от senjy

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

если можно, расскажи поподробнее про эти самые режимы или хотя бы дай какой-нибудь линк, где почитать

anonymous
()
Ответ на: комментарий от anonymous

> если можно, расскажи поподробнее про эти самые режимы или хотя бы дай 
> какой-нибудь линк, где почитать

google = lpt port - Ну просто море инфы. 

> у меня 8 датчиков движения, и когда они срабатывают, на соотв. проводе 
> оказывается нуль. Провода я подключаю к контактам порта.

Не уверен, что вы правильно подключаете. Вообще без знания спецификаций - 
это бесполезное занятие. Ищите в инете ну или после праздников я вам смогу
скинуть, у меня инфа есть только на работе.

senjy
()

а чем read() и ioctl() на /dev/parport не устроили???

cvv ★★★★★
()
Ответ на: комментарий от binr

> http://www.linux.it/~rubini/docs/parallela/parallela.html

Главное -- не спаять по схеме, где реле нарисовано. Транзистор сгорит на... Да и не всякий светодиод от 3.5ма заводится (это ежели резистор килоомный, да на светодиоде вольта полтора сядет).

А чем с INB и OUTB мумукаться, не проще ли

#include <sys/ioctl.h>

#include<linux/ppdev.h>

использовать?

При этом можно не париться с портами, труднее завалить систему при ошибке, а также можно работать, скажем, c /dev/usb/parport? когда надо.

Ростислав

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.