www.mikrocontroller.net

Forum: Compiler & IDEs UART Interrupt löst nicht aus


Autor: Muli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich will auf einem ATmega32 eine UART/RS232 Verbindung einrichten. Ich 
nutze die Lib von P. Fleury
Soweit alles schön und gut. Kann wunderbar Zeichen empfangen und auch 
Senden. Allerdings will ich jetzt mit einem Interrupt arbeiten.

Ich will erstmal erreichen, dass mir mein Mega32 beim Receive Complete 
Interrupt, also dann wenn er ein neues Byte im Buffer hat, in eine ISR 
springt.


Folgendes haben ich bisher gemacht:
int main(void)
{
...
  sei();

  UCSRB |= (1<<RXCIE);          // Activate UART receive complete interrupt


...

   return 0;
}


ISR(UART0_RECEIVE_INTERRUPT)
{
  set_leds(LED_RECEIVING,LED_ON);
  _delay_ms(1000);
}

[c]

Das Synonym "UART0_RECEIVE_INTERRUPT" ist in der uart.c von Fleury zu finden:

[c]
 #define UART0_RECEIVE_INTERRUPT   SIG_UART_RECV

Es ist also ein Synonym für den Interruptvector in der Mega32 
Headerdatei.


So, egal was ich nun dem AVR schicke, der geht partou nicht in diese ISR 
rein. Woran kann das liegen?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast zwar den Receive-Interrupt freigeschaltet, aber den Receiver 
selber nicht eingeschaltet.

Autor: Muli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Stimmt, aber daran liegts nicht.
Soweit ich das im Kopf hab wird das von der Lib von P Fleury übernommen. 
Habs gerade auch "zu Fuß" probiert, ohne Ergebnis.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, du benutzt also "nebenbei" auch noch die Fleury-Lib weiter. Dann 
kann das auch nichts werden, weil die Fleury-Lib den Interrupt schon 
selber verwendet. Fehlermeldung vom Linker einfach ignoriert?

Autor: Muli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ja, hätte mir die Lib mal früher anschauen sollen ;-)

Stimmt. Naja, mal schauen ob ich da noch irgendwas verschlimmbessern 
kann ;-)

Autor: Werner A. (homebrew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
apropos verschlimmbessern...
Du könntest die delayroutine im Interrupt noch länger machen

Autor: Michael H* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sei();?

Autor: Chris L. (kingkernel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was habt ihr nur dauerns mit der delay-Routine? Die geht doch bei über 5 
sekunden noch genau, dachte ich. allerdings muss man dafür die 
util/delay.h einbinden!

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian L. wrote:
> Was habt ihr nur dauerns mit der delay-Routine?

Man verwendet kein delay in einer Interruptroutine (schon gar nicht in 
der Größenordnung). Interrupts sollen immer so kurz wie irgend möglich 
sein. Bei einem Test, ob der Interrupt überhaupt aufgerufen wird, ist es 
aber ok.

Autor: Chris L. (kingkernel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, es ging gar nicht im das delay selbst, sondern darum, wo es 
eingesetzt wird. Alles klar!

Autor: Muli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das delay war auch nur zum Test da und kam danach auch wieder artig raus 
;-)

Ansonsten ist die delay-Routine schon extrem genau, da kann man nicht 
meckern ;-)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ansonsten ist die delay-Routine schon extrem genau, da kann man nicht
>meckern ;-)

Nur legt sie praktisch den µC lahm. Und da muss man meckern..
=> Timer

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.