Hallo Spezies,
mir fällt nichts mehr ein, warum meine Uart zwar sauber schreibt aber
keinen IRQ auslöst.
Testweise habe ich einen Software IRQ erzwungen und der wird auch
ausgelöst
VICSoftInt = (1<<UART2_INT);
test = U2IIR;
test = U2IIR;
Die Bits in test verändern sich exakt nach Vorschrift, beim zweiten
Lesen ist das THRE Bit wieder gelöscht. Trotzdem springt er die IRQ
nicht an. Das funktioniert bei allen anderen ISRs einwandfrei.
Wenn ich schnell nacheinander Zeichen in U2THR schreibe nimmt er 16 an
und "vergisst" die anderen, auch klar, weil der TX Fifo nur 16 Bytes
hat. Er müsste aber einen IRQ auslösen, sobald zB der TX Fifo leer wird.
Tut er aber nicht, die Bits, die das anzeigen sind aber gesetzt. Bei
anderen ISR springt der Debug Cursor sofort nach einem Software INT
direkt in die jeweilige ISR rein.
Gibt es noch irgendwo ein geheimnes Bit, was ich vergessen habe?
Es gibt die geheinmisvolle Funktion bei Rowley __ARMLIB_enableIRQ() die
dafür sorgt, dass überhaupt ISR laufen. Aber ich habe kein Bit finden
können, was einen globalen INT Stop auslöst. Die anderen ISR arbeiten ja
auch.
Idee?
Hier die Init
Die Pinsel-Bits stimmen garantiert? Immerhin hat der Chip mehr als eine
UART und hier wird die zweite verwendet - aber das steht da nicht in den
Namen der Bits drin.
Das vor dir gesuchte globale Disable-Bit befindet sich im Statusregister
des Prozessors. Und muss üblicherweise explizit im Code freigegeben
werden, denn ab Reset sind IRQs und FIQs abgeschaltet. Aber wenn der
Soft-Int funktioniert ist das bereits ok.
Es wäre toll, die Masken dazu zu sehen (sprich: die #defines). Der UART
auf P0.10 und P0.11 ist die erste alternative Beschaltung. Kommt das mit
deinen Masken so hin?
Und dann das hier: (weiss aber nicht, obs nur n Tippfehler is)
>
Was denn nu? Isr_UART2 oder Isr_UART20? Ist mir nur so aufgefallen. Da
Der Interrupt ja scheinbar gar nicht erst auslöst wird dies der Fehler
nicht sein.
Danke,
ich habs schon, ich habe Init_VIC(); vergessen, bzw stand das unter dem
init_uart und hat daher alle Einstellungen wieder platt gemacht. Kein
Wunder.... (zwei Stunden Suchen fürn A..... kopfvordiewandschlag)
Aber danke für den Hinweis mit dem Lesen, das scheiben aber viele
Beispiele falsch zu haben, die klar in RO Register schreiben.
PCLKSEL habe ich überall für alle APB Geräte auf 1/4 gesetzt und
verändere das auch nicht um kein Chaos zu erzeugem.
Christian J. wrote:
> Wunder.... (zwei Stunden Suchen fürn A..... kopfvordiewandschlag)
Für'n A* wäre es gewesen, wenn du es nicht gefunden hättest.
Nur: Wieso soll dann der Soft-Int funktioniert haben?
Christian J. wrote:
> PCLKSEL habe ich überall für alle APB Geräte auf 1/4 gesetzt und> verändere das auch nicht um kein Chaos zu erzeugem.
Chaos erzeugst du, wenn ohne Not der Takt an anderer Stelle definiert
wird als der daraus abgeleitete Teiler für die Bitrate. Was zusammen
gehört, das gehört zusammen.
Dudelt einwandfrei jubelhochdrei die in der Konsole eingegeben
Zeichen taucht im RX Fifo wieder auf.
Ich betreibe den uC mit 60 Mhz, habe auch tausendmal überlegt ob ich das
variabel gestalte und die APB Clocks immer neu berechne. Das gab nur
Chaos, vor allem mit ohne ohne PLL. Also alle Peripherals auf 1/4 Fcclk
gesetzt und diesen Wer fassen die Init Routinen nur an, wenn notwendig.
Die Uart funktioniert zB für 56700 nicht mehr unter 12 Nhz APB Takt.