Hallo, ich versuche eine PCI-IO_Karte(LCS-6019) in Linux(Suse 11.1) zum laufen bringen und anschließend diesen mit einem C-code steuern. im alten Rechner mit integriertem Port war es kein proplem. Auf der Herstellerseite habe ich eine Beschreibung gefunden(Anhang) wie man das unter Linux machen muss. Alles gemacht leider funzt es nicht. Muss noch dazu einfügen, dass ich die komplette Beschreibung ins terminal eingehackt habe also den part für den Serial sowol für den Parallelport :-( brauchen tu ich nur den Parallelport. <--ist das schlimm? unter C spreche ich den port so an. . . int main (int argc, char *argv[]) { . . ParallelTimerSwitch(0x01); // bsp. für pin 1 . . } void ParallelTimerSwitch(unsigned char PinNu) { unsigned char current; current = inb(888); //<-- neue Adresse 0x4a00 und nicht 888-->0x378 current ^= PinNu; outb(current, 888); } ich habe keinen weiteren Parallelport kann man nicht eigentlich die 0x378 weiter verwenden?? Bzw sieht irgend jemand was ich falsch mache?? thanks for help
Für ports von 0-0x3ff musst du das port vorher mit ioperm freischalten. Für höhere ports musst du iopl verwenden, um den Zugriff freizuschalten. Beide Sachen benötigen root Berechtigung.
Achso, legacy ports 0-0x3ff brauchen legacy waitstates, sind also (viel) langsamer als andere Ports, welche Memory-mapped sind.
chris schrieb: > Für ports von 0-0x3ff musst du das port vorher mit ioperm freischalten. hab ioperm eingebaut: int main (int argc, char *argv[]) { . . if( ioperm(0xa400,1,1) ) { printf("Couldn't get port 0x0xa400\n"); return 1; } . . ParallelTimerSwitch(0xff); // datenpins sollen auf hight . . } void ParallelTimerSwitch(unsigned char PinNu) { unsigned char current; current = inb(0xa400); current ^= PinNu; outb(current, 0xa400); } leider klappt das auch nicht. was meinst du eigentlich mit "legacy ports" wie das aussieht liegt meine karte auf einen anderen adressbereich. "/sbin/modprobe parport_pc io=0x3f8,a400 irq=4,18 " <-- port = 0xa400
Alf schrieb: > "/sbin/modprobe parport_pc io=0x3f8,a400 irq=4,18 " <-- port = 0xa400 Wenn du sowieso direkt auf den IO-Registern rummachen willst, ist der Kernel-Treiber doch eher Kontraproduktiv? Nicht das dir der dazwischenfunkt... Frage: Spricht eigentlich was dagegen, statt dem direktem Port-Gefriemel aus DOS-Zeiten direkt das dafür vorgesehene (ppdev-) Interface zu nehmen? /dev/partport* öffnen, darauf arbeiten? http://people.redhat.com/twaugh/parport/html/x623.html
Der erste Port (+0) ist eigentlich nicht dafür vorgesehen, gelesen zu werden. Manche Parallelports unterstützen das, müssen dies aber nicht tun. Der Zugriff inb(0x378) ist also laut Hardwaredefinition nicht erlaubt und das solltest du erstmal austesten. Der zweite Port (+1) ist ein reiner Leseport und der dritte "RW". Versuch erstmal nur eine Ausgabe zu machen und wenn das nicht klappt den Parport-Treiber (falls er geladen ist) zu entladen.
Klar geht das nicht, ioperm gilt ja nur für port von 0-0x3ff und du benutzt 0xa400, da brauchst du schon iopl, hatte ich auch so geschrieben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.