Ich beschäftige mich gerade mit dem Uart und hab da mal Fragen. Um eine Einwandfreie Nutzung vorrauszusetzen müssen alle Register konfiguriert werden. Am Anfang setze ich den DLAB, da ich dann auf die Register für den Baud Generator zugreifen kann. Danach wird DLAB resettet, damit ich dann auf die anderen 3 Register (Receiver Buffer Register, Transmitter Holding Register Interrupt enable Register) zugreifen kann. So danach wird dann das Interrupt enable Register konfiguriert, wobei ich dann bit 2 (Enable Transmitter Holding Register Empty Interrupt) aktiviere. Anschließend wird dann das Stick Parity Bit auf Low gestellt. Dann wird ein Byte reingeschrieben. Ich mach dann eine Abfrage nach dem Interrupt, falls einer stattfindet, soll dann Interrupt Ident Register angesprochen(nur bei Lese Modus) und mit 0 wird Interrupt zurückgesetzt und das Stick Parity wieder auf High (Line Control Register). Als letztes schiebe ich dann wieder 12 Datenpakete a 1 Byte durch und mach wieder eine Abfrage nach dem Interrupt. So nun mein Problem, ich nutze vpn Phytec die Platine mit dem UART drauf, 2 Usb Controller und einem FPGA. Über ein Ethernet Anschluss sende ich die Befehle, der treiber wir jedoch vorher mit allen registern vorgeladen. Nun wenn ich das Oszi anschließe, kann ich die Transmit, Receive und Interrupt Signale ansehen, das Problem ist dies, wenn ich Daten sende, tut er auch empfängt auch, setzt den Interrupt (wegen dem Parity bit) und setzt ihn wieder zurück, ab und zu also willkürlich passiert es, dass der Interrupt zwar kommt aber dann nicht wieder zurückgesetzt wird, dann können die restlichen Datenpakete nicht reingeschrieben werden. Hab einiges ausprobiert, aber ich finde den Fehler nicht, weder im treiber noch an der HArdware. Wäre super wenn jemand solch ein Problem kennt und mir dabei weiterhelfen kann, oder zumindest Tipps geben, wo ich noch nach dem Fehler suchen kann. Danke im voraus.
kann mir hier keiner helfen, keiner ne Erfahrung mit dem chop gemacht.
TI PC16550D Universal Asynchronous Receiver/Transmitter with FIFOs http://www.ti.com/lit/ds/symlink/pc16550d.pdf Der IC hat fünf Interrupts. Hast du schon versucht herauszufinden, welcher IRQ ansteht, wenn die eine INTR Leitung einen IRQ signalisiert? Und passt das zu deiner Programmlogik mit Enable/Disable des jeweiligen IRQ?
Danke erstmal für deine Antwort. Ja genau er hat 5 interrupts, da komische ist, dass der Fehler nur beim 5ten Interrupt kommt, wie gesagt, willkürlich, hab bisher nicht feststellen können warum er dieses Verhalten durchführt. Mal funktioniert der Interrupt richtig, dann passiert es dass er nicht zurück auf High gesetzt wird und die restlichen Daten werden dann nicht gesendet. Ich kann dir ja mal ein Plot zeigen wie das so aussieht. Gelb = Interrupt Rosa = Tx+ blau = Rx+ In Lecroy9 sieht man den Interrupt Fehler, Interrupt kommt wird aber nicht zurückgesetzt. Im Lecroy10 ist ein ganz normaler Verlauf. Ach nochwas, das wichtigste hatte ich ja fast vergessen. bei 500Kbaud funktioniert alles Tadellos, nur bei 1 Mbaud kommt dieses Fehlverhalten, kannst du dir da einen Reim draus machen.Danke.
Hallo, kannst du mir vielleicht weitere Tipps geben wonach ich suchen kann. Hab nochwas ausprobiert. Nachdem der Interrupt erfolgt ist und der Fehlerfall auftritt, lege ich dann manuell 5V an den INTR Pin an und der Interrupt wird dann wieder auf High gelegt. Kann das sein, dass dies auf einen Hardware fehler hindeutet. Danke für deine Hilfe.
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.