[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[DDL-ML] Neues vom loconet device
Hallo Stefan,
ich kann erste Erfolge und gleich auch erste Rückschläge vermelden.
Mein loconet device driver funktioniert im Prinzip wie gewünscht; er
gebärdet sich wie eine normale serielle Schnittstelle, füttert aber solange
der eigentliche LocoNet Masterprozeß die Antworten noch nicht aufbereitet
hat, den LocoNet-Bus mit OPC_IDLE. Alles wäre schön, wenn ich nicht in der
Interrupt-Routine für den UART eine Latenzzeit von ca. 5ms hätte!
Ich bin in meiner Interrupt Service Routine darauf eingestellt, alle Bytes
einzeln zu bekommen; nach dem ersten Loco Opcode, der ein OPC_IDLE erfordern
könnte, lege ich mir das schon mal zurecht, um sobald CD inaktiv wird,
diesen sofort rauszuschicken. Leider bekommt die ISR die Kontrolle erst,
nachdem alle Daten (hier: 4 Bytes) angekommen sind. Soll heißen: erst 5 ms
nach dem Eintreffen des ersten Bytes erfolgt überhaupt der Interrupt! Eine
Verkürzung der CD-Backoff Zeit im MS-SH auf 0,5 ms bringt nix, die Antwort
kommt dann eben nicht 1,8 ms nach CD low, sondern 2,3ms. Und das obwohl ich
UART_LOW_LATENCY angefordert habe. Was ist denn wohl high latency?!? Ich
weiß nicht so recht wo ich da ansetzen soll, für mein Verständnis sollte der
UART (16550A) trotz FIFO bereits beim ersten eintreffenden Byte den
Interrupt auslösen. Der UART hat seinen persönlichen Interrupt,
Wechselwirkungen mit dem Standard-serial sollte es daher nicht geben.
Irgendwelche Ideen dazu? Kennt irgend jemand irgend jemanden der unter Linux
mit der seriellen in Realtime (erfolgreich) rumgespielt hat?
Andreas