mikrocontroller.net

Forum: PC-Programmierung Problem mit Parallelport unter Linux


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem beim Programmieren der Parallelen Schnittstelle 
unter Linux:
Für die ersten Tests habe ich ein Programm erstellt, welches mit ioperm 
den Speicherbereich reserviert und dann direkt mit inb, outb auf die 
drei Register der Schnittstelle schreibt/liest. Das Programm 
funktioniert aber nur, wenn das Kernelmodul parport aktiv ist. Wenn ich 
das Modul entlade, so bekomme ich von den drei IO-Zelle (0x378, 0x379, 
0x37A) immer 0xFF.
Ich muss das Modul parport entladen, da ich mein Programm zu einem 
Treiber erweitern möchte. Dazu brauche ich u.a. den Interrupt der 
Schnittstelle, welcher aber durch das Modul belegt ist.

Muss ich zum Ansprechen der Schnittstelle sonst noch irgend ein Register 
beschreiben? - Ich habe im Internet diverse Programme zum Ansteuern der 
Schnittstelle gefunden, alle verwenden den selben Syntax wie ich.


Ich hoffe es kann mir jemand bei dem Problem helfen,
Vielen Dank,
Florian

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute das der Parport bei dir ein PCI/PNP Device ist, und der 
Parport-Treiber schaltet das Device beim Initialisieren erst ein, und 
beim Unload wieder aus.

Warum benutzt du nicht das /dev/parport0 interface, brauchst du ein 
spezielles Timing, das darüber nicht geht?

Autor: Michael Löffler (zvpunry)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach es über den Treiber, das ist am sichersten. Das rumgefrickel am 
System vorbei mit ioperm auf ioports die schon von Treibern verwendet 
werden ist mir schon immer unheimlich.

Ein Beispiel:
#include <sys/types.h>  /* open() */
#include <sys/stat.h>   /* open() */
#include <fcntl.h>      /* open() */
#include <sys/ioctl.h>  /* ioctl() */
#include <linux/ppdev.h> /* XXX die ioctl's für /dev/parport* */
#include <unistd.h>     /* close() */

int main(int argc, char *argv[])
{
        int fd = open("/dev/parport0", O_RDWR);
        if (fd == -1) {
                /* fehler behandeln */
        }

        if (ioctl(fd, PPCLAIM) == -1) {
                /* fehler behandeln */
        }

        /* hier wird dann erstmal alles eingeschaltet, 0xff halt */
        if (ioctl(fd, PPWDATA, 0xff) == -1) {
                /* fehler behandeln */
        }

        if (ioctl(fd, PPRELEASE) == -1) {
                /* fehler behandeln */
        }
        if (close(fd) == -1) {
                /* fehler behandeln */
        }
        return 0;
}

Was es nun mit PPCLAIM, PPRELEASE und PPWDATA auf sich hat überlass ich 
Dir. Ach ja, alles ungetestet und keine Garantie daß es tut. ;-)

Autor: Bernhard Walle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://cyberelk.net/tim/software/libieee1284/ ist noch besser. Verwendet 
intern ppdev. Es gibt sogar Python-Bindings.


    Bernhard

Autor: Michael Löffler (zvpunry)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard Walle wrote:
> http://cyberelk.net/tim/software/libieee1284/ ist noch besser. Verwendet
> intern ppdev. Es gibt sogar Python-Bindings.
Interessant, kannte ich noch garnicht. Selbst "apt-cache search 1284" 
spuckt die Namen dreier Pakete aus... werde ich mir sofort mal 
anschauen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.