Forum: Mikrocontroller und Digitale Elektronik R8C13 UART1 Interrupt wird nur einmal aufgerufen


von Sven B. (v3rtex)


Angehängte Dateien:

Lesenswert?

Zur Zeit versuche ich mich etwas mit dem R8C/13 und einigen Interrupts 
anzufreunden, jedoch möchte das nicht so gut klappen.

Ich habe schon mehrere Tage hier und bei Google gesucht, aber mir ist 
keine mögliche Fehlerursache in meinem Code aufgefallen.


Zu meinem Projekt:

Es besteht lediglich aus einem Timer Interrupt der alle 0,5 Sekunden 
eine LED an und ausschaltet, und einem UART1 Receive Interrupt der ein 
'OK' sendet wenn etwas empfangen wurde.

Der Timer Interrupt mit dem LED blinken läuft einwandfrei.
Der UART1 Receive Interrupt wird jedoch nur ein einziges Mal, 
ausgeführt.

Beide Interrupts wurden korrekt in die Vector Tabelle eingetragen.

Der Code befindet sich im Anhang.


Hat jemand eine Idee?


Danke schoneinmal.

von Olaf (Gast)


Lesenswert?

> Der UART1 Receive Interrupt wird jedoch nur ein einziges Mal,
> ausgeführt.

Ich bin zu faul fuer dich das Datenblatt zu lesen, aber normalerweise 
deutet soetwas darauf hin das du irgend ein IRQ-Bit nicht zurueckgesetzt 
hast.

Olaf

von Tobyas (Gast)


Lesenswert?

Hallo Sven,

zusätzlich zu dem Kommentar von Olaf sind mir beim kurzen drüberschauen
über deinen Source Code foldende Dinge aufgefallen.

1. Eine while Schleife in einer ISR ist immer eine schlechte Idee.
Setze eine variable (volatile!) in serial_receive_int() und prüfe diese 
in Main um von dort send_serial_1('O') aufzurufen.

2. Laut deinen Kommentaren hast du auch einen UART1 Transmit Interrupt.
Eine passende ISR sollte auch in der Vektortabelle auftauchen...

von northernhessian (Gast)


Lesenswert?

Hallo,
schalt' mal das Empfangen in deiner Interrupt Routine wieder ein so in 
etwa:
re_u1c1 = 1;
Wenn das funktioniert, dann nimm Dir bitte Deine Initialisierungsroutine 
nochmal vor(Interrupt Priorität usw.)

von Walter F. (mrhanky)


Lesenswert?

Du solltes vor allem das Byte auch abholen, sonst bekommst Du einen 
Overrun error, wenn das nächste Byte kommt und dann geht garnix mehr.

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.