ParallelPort/LPT1: Manche Bytes werden falsch übertragen

#1549816
Lesenswert?

Hi!

Ich will mittels Linux, Java und JNI einen Parallel Port ansteuern,
also die Datenleitungen.
Das funktioniert soweit ganz gut, allerdings werden nicht
alle Bytes richtig übertragen.

z.b. resultiert 33 in 255

Um das genauer zu untersuchen hab ich eine Schleife geschrieben,
die alle Werte von 0 bis 255 schreibt und anschließend ausliest.

Hier die Ausgabe (W= geschrieben, R: ausgelesen)

WriteData==ReadData for: 1 (1) - W:1 R:1
WriteData==ReadData for: 11111 (31) - W:31 R:31

Jetzt tritt das Problem auf:

WriteData==ReadData for: 100000 (32) - W:32 R:255
WriteData==ReadData for: 100001 (33) - W:33 R:255
WriteData==ReadData for: 100010 (34) - W:34 R:255
WriteData==ReadData for: 100011 (35) - W:35 R:255
WriteData==ReadData for: 100100 (36) - W:36 R:255
WriteData==ReadData for: 100101 (37) - W:37 R:255
WriteData==ReadData for: 100110 (38) - W:38 R:255
WriteData==ReadData for: 100111 (39) - W:39 R:255
WriteData==ReadData for: 101000 (40) - W:40 R:255
WriteData==ReadData for: 101001 (41) - W:41 R:255
WriteData==ReadData for: 101010 (42) - W:42 R:255
WriteData==ReadData for: 101011 (43) - W:43 R:255
WriteData==ReadData for: 101100 (44) - W:44 R:255
WriteData==ReadData for: 101101 (45) - W:45 R:255
WriteData==ReadData for: 101110 (46) - W:46 R:255
WriteData==ReadData for: 101111 (47) - W:47 R:255
WriteData==ReadData for: 110000 (48) - W:48 R:255
WriteData==ReadData for: 110001 (49) - W:49 R:255
WriteData==ReadData for: 110010 (50) - W:50 R:255
WriteData==ReadData for: 110011 (51) - W:51 R:255
WriteData==ReadData for: 110100 (52) - W:52 R:255
WriteData==ReadData for: 110101 (53) - W:53 R:255
WriteData==ReadData for: 110110 (54) - W:54 R:255
WriteData==ReadData for: 110111 (55) - W:55 R:255
WriteData==ReadData for: 111000 (56) - W:56 R:255
WriteData==ReadData for: 111001 (57) - W:57 R:255
WriteData==ReadData for: 111010 (58) - W:58 R:255
WriteData==ReadData for: 111011 (59) - W:59 R:255
WriteData==ReadData for: 111100 (60) - W:60 R:255
WriteData==ReadData for: 111101 (61) - W:61 R:255
WriteData==ReadData for: 111110 (62) - W:62 R:255
WriteData==ReadData for: 111111 (63) - W:63 R:255

Jetzt ist wieder alles normal:

WriteData==ReadData for: 1000000 (64) - W:64 R:64

Wieder falsch:

WriteData==ReadData for: 1011111 (95) - W:95 R:95
WriteData==ReadData for: 1100000 (96) - W:96 R:255
...
WriteData==ReadData for: 1111111 (127) - W:127 R:255
WriteData==ReadData for: 10000000 (128) - W:128 R:128

Normal...

Problem:

WriteData==ReadData for: 10011111 (159) - W:159 R:159
WriteData==ReadData for: 10100000 (160) - W:160 R:255
...
WriteData==ReadData for: 10111111 (191) - W:191 R:255
WriteData==ReadData for: 11000000 (192) - W:192 R:192
...
WriteData==ReadData for: 11011111 (223) - W:223 R:223
WriteData==ReadData for: 11100000 (224) - W:224 R:255
...
WriteData==ReadData for: 11111110 (254) - W:254 R:255

Meine JNI-Bibliotek sieht folgendermaßen aus:
1
...
2
JNIEXPORT void JNICALL Java_woehrbach_ParallelPort_writeOneByte
3
  (JNIEnv * algo, jclass otro, jint portData, jint oneByte)
4
{
5
if (ioperm(portData, 3, 1)){perror("ioperm error");}
6
outb(oneByte,portData);
7
  if (ioperm(portData, 3, 0)){perror("ioperm error");}
8
}

Ein Program, das ich in C geschrieben habe, mit denselben
Methoden wie die in der JNI-Bibliothek funktioniert einwandfrei.

Irgendwie gibt es ein Muster, wann Zahlen falsch übertragen werden.
Ich glaube, wenn die letzten Bits von 11111 auf 00000 springen,
dann werden, bis zum nächsten Wechsel von 11111 auf 00000 die Zahlen
falsch oder richtig übertragen.

Hat jemand von Euch eine Idee? Ich bin sowas von ratlos.
jones

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren