ATmega32 nur UART Interrupt deaktivieren

Gast #5006708
Lesenswert?

Hi,

ist es möglich nur die UART interrupts zu deaktivieren und nach gewisser 
Zeit wieder zu aktivieren?
Habe den Befehl UCSRB &= ~(1<<RXEN); mal getestet, allerdings wird hier 
der komplette UART ausgeschaltet.. Bzw. der RX channel.
Habe auch alle anderen BITs vom UCSRB getestet, auf Seite 161 im 
Datasheet zu finden.

Warum? - Weil ich in der Main schleife ein Zeichen empfangen will, im 
Hintergrund ein Timer laufen soll, aber nicht in die UART ISR gesprungen 
werden soll.

Danke im voraus.

mfg
Umbrecht
#5006720
Lesenswert?

Umbrecht schrieb:
> bei RXCIE = 0 wird zwar der Interrupt unterdrückt aber sobald RXCIE = 1
> wird der Interrupt ausgelöst.
Du musst vorher einfach den Reciever deaktivieren, dann wird alles 
vorherige verworfen:
If the Receiver is disabled, the receive buffer will be flushed and 
consequently
the RXCn bit will become zero. The RXCn Flag can be used to generate a 
Receive Complete interrupt (see
description of the RXCIEn bit).
Zitat aus nem Megaxx8 DB.
Gast #5006721
Lesenswert?

Umbrecht schrieb:
> hi,
>
> bei RXCIE = 0 wird zwar der Interrupt unterdrückt aber sobald RXCIE = 1
> wird der Interrupt ausgelöst.
>
> mfg
> Umbrecht

Dass ist richtig, da must du vorher das UDR auslesen, damit der 
Interrupt gelöscht wird. Dann kannst du RXCIE auf 1 setzen. Ohne das du 
sofort in die ISR springst.
#5006743
Lesenswert?

Peter D. schrieb:
> Mit RXEN = 1 werden bis zu 3 Bytes gepuffert.
Das wusste ich auch nicht, aber wenn man genauer liest findet man es:
Bit 3 – DOR: Data OverRun
This bit is set if a Data OverRun condition is detected. A Data OverRun 
occurs when the receive buffer is
full (two characters), it is a new character waiting in the Receive 
Shift Register, and a new start bit is
detected. This bit is valid until the receive buffer (UDR) is read. 
Always set this bit to zero when writing to UCSRA.

Nur doof, dass man das erst merkt, wenn es zu spät ist bzw. das 4. Byte 
schon unterwegs ist. Besser wäre doch ein Flag zu setzen, wenn der 
Buffer voll ist und auch das Input-Shift-Register voll ist...
Gast #5006847
Lesenswert?

hi,

Peter D. schrieb:
> Du mußt Dich mal entscheiden, empfangen oder verwerfen.

beides..

Es sollen Zeichen empfangen werden, aber kein Interrupt ausgelöst 
werden.


Allerdings habe ich bereits eine Lösung gefunden, nach dem Prinzip von 
C.K. und Ingo Less - vielen dank euch

mfg
Umbrecht

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