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