LINUX.ORG.RU

Работа с LPT портом


0

0

Добрый день. Требуется получить сигнал, передаваемый внешним устройством. Оно выставляет байт данных на пинах. Никак не могу прочитать эти данные. Пробовал для перла модуль Device::ParallelPort с cpan.org, пробовал на С писать, используя inb(). Проблема одна: если я в другой консоли параллельно с компа пишу что-то в порт(выставляю состояние пинов), то программка все ловит. Если же подаю внешний сигнал с устройства - никак, ничего не видно. Играл с режимами работы порта (ECP, EPP, Bi-directional) - бесполезно :( Может, кто подскажет? А то гугл уже замучил, почти все примеры перепробовал - никак....

Ответ на: комментарий от vilfred

Это я уже читал - не пашет((( Проверил уже, порт не горелый, если выставляю 1 на пин - то вольтметр показывает, что она там есть!

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

И еще косяк появился: если на С то, что прочитал через Inb(), попробовать вывести на экран через printf(), то программка падает в Segmentation Error

NikitoZ
() автор топика

1. Запиши маску 0xff по адресу 0x378 (возможно, ещё и по адресу 0x37a). 2. Подай сигнала от внешнего устройства. 3. Пробуй читать.

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

Вот тестовая программка: нигде не накосячил?

#include <sys/io.h>
#include <sys/perm.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
 unsigned int x;
 int init = 0xff;
 if(ioperm(0x378,3,1))
 {
  printf("error opening lpt");
  exit(1);
 }
 outb(init, 0x378);
 outb(init, 0x37a);
 while(1)
 {
  x=inb(0x378);
  if(x != 255)
  {
   printf("%d\n", x);
  }
 }
 if(ioperm(0x378,3,0))
 {
  printf("error closing lpt");
  exit(1);
 }
}

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

Ура, работает!!! Спасибо josephson и всем остальным!

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