Автор Тема: проблем с четенето от паралелния порт  (Прочетена 1305 пъти)

Boiler

  • Напреднали
  • *****
  • Публикации: 48
    • Профил
Опитвам да чета данни от паралелния порт, посредством програма на С, но четенето не се осъществява. Адресът от който чета е BASEPORT+1, като BASEPORT = 0x378 (в биоса го проверих че е толкова). Осигурявам си права над порта чрез ioperm() и записа е успешен, но прочитането на 4 байта от гореспоменатия регистър не става. Да знае някой, дали няма несто което пропускам да направя. Четенето извършвам чрез inb().
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
проблем с четенето от паралелния порт
« Отговор #1 -: Aug 26, 2006, 15:22 »
Примерен код
/*
 * Simple parallel port output control program for Linux
 * Written and copyright by Tomi Engdahl 1998
 * (e-mail: tomi.engdahl@hut.fi)
 *
 * The program output the data value to PC parallel port data pins
 * (default lpt1 I/O address 0x378). The data values are given as the
 * command line parameter to the program. The number can be
 * in decimal (0..255) or hexadecimal format (0x00..0xFF).
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>

#define base 0x378           /* printer port base address */

main(int argc, char **argv)
{                    
  int value;

  if (argc!=2)
    fprintf(stderr, "Error: Wrong number of arguments. This program needs one argument which is number between 0 and 255.\n"), exit(1);
  if (sscanf(argv[1],"%i",&value)!=1)
    fprintf(stderr, "Error: Parameter is not a number.\n"), exit(1);
  if ((value<0) || (value>255))
    fprintf(stderr, "Error: Invalid numeric value. The parameter number must be between 0 and 255\n"), exit(1);
  if (ioperm(base,1,1))
    fprintf(stderr, "Error: Couldn't get the port at %x\n", base), exit(1);

  outb((unsigned char)value, base);
}                                            


Това е за четене, ама ти го давам за да попитам защо BASE+1 адрес?
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Boiler

  • Напреднали
  • *****
  • Публикации: 48
    • Профил
проблем с четенето от паралелния порт
« Отговор #2 -: Aug 28, 2006, 18:02 »
това не е за четене, а за запис! BASEPORT+1, защото там има 5 бита които могат да се четат и ми трябват. Намерих решение на проблема, трябваше да направя шифт надясно с 3 позиции за да чета вярно.
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
проблем с четенето от паралелния порт
« Отговор #3 -: Aug 28, 2006, 18:06 »
Така де, запис е '<img'>
Ще дадеш ли сорса да го видя?
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Boiler

  • Напреднали
  • *****
  • Публикации: 48
    • Профил
проблем с четенето от паралелния порт
« Отговор #4 -: Aug 29, 2006, 16:53 »
фрагмента от програмата е:
temp0 = inb(BASEPORT+1);
temp0=temp0>>3;

Така се прочитат четирите байта които ми трябват и се слагат в младшата тетрада. Готово! Благодаря за отговорите.
Активен