Forum: Compiler & IDEs Grundsätzliches Problem mit UART Interrupt


von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich habe eine grundsätzliche Frage zur Verwendung bzw. Initialisierung
von Interrupts.

Ich verwende einen AT90S4433 Controller und arbeite mit WinAVR in
Verbindung mit GCC (Version 3.4.1).

Ich möchte, dass ein Interrupt ausgelöst wird, wenn über die serielle
Schnittstelle (UART) ein Datenbyte eingelesen wurde.
So wie ich das Programm geschrieben habe funktioniert aber der
RX-Interrupt leider nicht. Ich setze in der ISR den PIN2 von Port D auf
1 um das zu überprüfen.
Jetzt ist die Frage, ob die Interrupt Funktion "SIGNAL (UART_RXC)"
wie ich sie definiere richtig ist.

Die Angabe UART_RXC habe ich aus dem Datenblatt des Controller. Stimmt
diese so, oder wo kann ich den Handler eindeutig definieren und
zuweisen.

Vielen Dank

Markus

von OldBug (Gast)


Lesenswert?

SIGNAL(SIG_UART_RECV) wäre der korrekte Handler für UART-Receive
interrupts.
Du solltest übrigens vor dem schreiben in UDR das UDRE-Bit Prüfen!

while(!(UCSRA & (1 << UDRE));

von Markus (Gast)


Lesenswert?

Hallo "OldBug",

vielen Dank für Deinen Hinweis! Jetzt funktioniert es :-)
Kannst Du mir bitte sagen, wo ich die genaue Zuordnung der ISR-Handler
finde. In der Doku und in den Header Files habe ich leider nicht
gefunden.

Vielen Dank für Deine Hilfe.

Gruß
Markus

von Alex (Gast)


Lesenswert?

In meinem Fall:
C:\Programme\WinAVR\avr\include\avr\io4433.h

Also lieber nochmal suchen :-)

von Markus (Gast)


Lesenswert?

Hoppla,

du hast recht. Bei mir stehts doch drin ;-)

Danke nochmals

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.