Forum: Compiler & IDEs Probleme UART Receive Interrupt


von Dominik (Gast)


Lesenswert?

Hallo,

ich habe ein Problem mit dem Interrupt beim Receive einer 
UART-Schnittstelle.

Wenn ich die UART initialisiert habe, und ich schicke ein zeichen zum 
Controller, so reagiert der Interrupt. Allerdings nur beim ersten mal. 
Danach kommt es zu einem Time Out und das wars. Ich kann das Board 
wieder neu verbinden.

Mein erster Gedanke war, dass ich ein Flag vergessen habe zu setzen. Bis 
jetzt konnte ich aber keines finden, welches ich vergessen hätte.


  u0brg = (BSP_CPU_CLKFREQ  16  Baudrate) -1;
  u0mr = 0x05;  //Transmit/Receive Mode Register
  u0c0 = 0x10; //Interrupt Control Register 0
  u0tb = u0rb; //Transmit Buffer
  u0tb = 0; //Transmit Buffer
  DISABLE_IRQ
  s0ric = 0x05;
  s0tic = 0x04;
  ENABLE_IRQ
  u0c1 = 0x05; //Interrupt Control Register 1

ich verwende einen Renesas R32C/111.

Habt Ihr eventuell Vorschläge, was ich vergessen haben könnte?

Liebe Grüße
Dominik

von Olaf (Gast)


Lesenswert?

> Allerdings nur beim ersten mal. Danach kommt es zu einem
> Time Out und das wars. Ich kann das Board wieder neu verbinden.

Mit anderen Worten die gesamte Verbindung zum E8a bricht zusammen?

> Mein erster Gedanke war, dass ich ein Flag vergessen habe zu setzen.

Ich glaub eher du musst nochmal ganz kraeftig die Datenblaetter zum 
Compiler lesen da etwas in deiner ISR oder beim Aufruf der ISR schief 
laeuft.
Setzt doch einfach mal einen Breakpoint an den Anfang der ISR und step 
dich mal durch. Und behalte dabei mal PC und ISP im Auge.

Olaf

von Dominik (Gast)


Lesenswert?

Danke für deine Antwort Olaf,

Ja, die gesammte Verbindung zum E8a bricht zusammen. Funktioniert erst 
wieder nach einem Disconnect und einem frischen Connect.

Jetzt hab ich einfach mal versucht, bei jedem Interrupt diesen neu zu 
initialisieren (ist mir schon klar, dass dies nicht notwendig ist). 
Danach hab ich das Programm laufen gelassen und ich konnte den Interrupt 
5-6mal erfolgreich durchführen. Danach brach die Verbindung erneut 
zusammen.

Ich verwende auf dem Controller ein Echtzeitbetriebsystem (uC/OS II ).

Bin schon ziemlich verzweifelt. Hab schon viel ausprobiert, aber ohne 
Erfolg.

Schöne Grüße
Dominik

von Olaf (Gast)


Lesenswert?

> Ja, die gesammte Verbindung zum E8a bricht zusammen. Funktioniert erst
> wieder nach einem Disconnect und einem frischen Connect.

Das ist sehr ungewohnlich. Sowas kenne ich nur wenn man wirklich etwas 
ganz extremes falsch macht und dem Debugger die Datenbasis wegzieht. 
Oder wenn man externes Ram verwendet und man programmiert das Timing 
falsch.
Der Debugger ist sonst sehr robust und uebersteht es sogar wenn du am 
Prozessor den Resetknopf druecken wuerdest.

> Ich verwende auf dem Controller ein Echtzeitbetriebsystem (uC/OS II ).

Da habe ich keine Erfahrung mit.

> Bin schon ziemlich verzweifelt. Hab schon viel ausprobiert, aber ohne
> Erfolg.

Weisst du wo im Speicher deine Variablen und dein Stack liegen? Wo dein 
Betriebsystem seine Daten hat, und ganz wichtig wo der Debugger seinen 
Speicherbereich hat? Pruef mal ob du da irgendwo eine Ueberschneidung 
hast.

> Danach hab ich das Programm laufen gelassen und ich konnte den Interrupt
> 5-6mal erfolgreich durchführen. Danach brach die Verbindung erneut
> zusammen.

Normalerweise deutet soetwas eher auf ein Hardwareproblem hin. Wenn du 
einen Programmfehler hast dann sollte das Programm immer an derselben 
Stelle und reproduzierbar abstuerzen. Allerdings kann dein 
Echtzeitbetriebsystem da natuerlich was reinpfuschen.

Olaf

von Dominik (Gast)


Lesenswert?

Ich habe heute nach erneuten 4 Stunden Fehlersuche den Fehler gefunden. 
Leider war der Fehler für mich nicht sofort klar, da ich noch nie eine 
ISR in einem RTOS verwendete.

Der Fehler war, dass ich die ISR nicht in der Datei bsp_a.a30 
eingetragen habe. Was dort genau passiert ist mir auch noch nicht klar. 
Jedenfalls muss ich dort die ISR eintragen.

Vielen Dank für deine Hilfe Olaf

Dominik

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
Noch kein Account? Hier anmelden.