mega64, RS232-Receiv-Interrupt und Polling

Gast #281837
Lesenswert?
• ▲
▼
Hallo zusammen,

über die RS232-Schnittstelle möchte ich in unregelmäßigen Abständen
wenige(4-7) Bytes empfangen.

Der Receiver-Interrupt(1.Byte) soll der Start für die Empfangsroutine
sein. Alle weiteren Bytes sollen im Pollingverfahren empfangen werden.

Wie sieht die Pollingroutine(Codevision) aus?

Reicht dieses für das 2. 3. und 4.-Zeichen:?

   while(!(UCSR0A & 1<<7)) {}
   data = UDR0; // 2.Zeichen holen
   while(!(UCSR0A & 1<<7)) {}
   data = UDR0; // 3.Zeichen holen
   while(!(UCSR0A & 1<<7)) {}
   data = UDR0; // 4.Zeichen holen

Also, prinzipiell funktioniert das, aber manchmal hängt sich das
Programm in der while-Funktion zum 3.Zeichen auf.

Gibt es da eine Lösung? Vielen Dank für eure Mühe!

Tobis
Gast #281838
Lesenswert?
• ▲
▼
Der Code schaut für mich auf den ersten Blick eigentlich richtig aus.
Vielleicht gibt es ein Problem in Verbindung mit der Interrupt-Logik
des   UART. Probier doch mal in der ISR nach dem Lesen des ersten
UDR-Inhalts den RXC-Interrupt des UART abzuschalten und am Ende der ISR
wieder zu aktivieren.
Alternativ ohne Polling und einem globalen Puffer arbeiten.

Stefan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren