PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : USART, ATMega8 -->UDR laden ohne zu senden?



pacer_one
25.01.2008, 19:22
Hallo,
ich wollte mal fragen ob es möglich ist, den Puffer der USART-Schnittstelle zu laden ohne jedoch zu senden?

Hintergrund: ich möchte eine Eingabe (Zeichen) per Interrupt erkennen und dann einen Zeichenkette ausgeben, das Versenden soll ebenfalls interruptgesteuert werden. Nun muss ich einen Weg finden wie ich den Interrupt für das senden aktiviere und das aus der ISR beim Empfangen.
Im Hauptprogramm soll nix stehen.

Hoffe das ich mich verständlich ausgedrückt habe, und nicht fragen wozu ich das brauche, weil brauchen tue ich es nicht ;-)

Gruß, pacer

McJenso
25.01.2008, 20:05
Hallo,


ich wollte mal fragen ob es möglich ist, den Puffer der USART-Schnittstelle zu laden ohne jedoch zu senden?


als erstes, ich habe es nicht ausprobiert! Man kann TXEN in UCSRB auf 0 setzen. Wenn man nun UDR einen Wert zuweist, wird er nicht gesendet. Aber UDRE ist dann auch die ganze Zeit 0. Beim nächsten klasischen Sendeversuch mit


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

bleibt das Programm hängen. Man muss sicherstellen, dass TXEN vorher auf 1 gesetzt wird. UDR sollte dann sofort gesendet werden.
Ist sicher ein nette Versuch. Probier es mal aus und schreib, ob es so läuft wie ich es vermute.

Gruß

Jens

pacer_one
25.01.2008, 20:17
ja klar, wenn TXEN auf null ist, wird das register nicht beschrieben, und wenn ich TXEN auf eins setze dann sendet er auch, aber wozu brauche ich dann einen Puffer??

McJenso
25.01.2008, 20:22
Hm, UDR wird imo bechrieben, auch wenn TXEN auf null ist. Er sendet nur nicht. Ist das nicht das, was du wolltest? Oder ich habe dich missverstanden.

Gruß

Jens

pacer_one
25.01.2008, 20:37
Das hier habe ich gefunden, also müsste es eigelntlich funktionieren. ich muss wohl nochmal probieren...

The transmit buffer can only be written when the UDRE Flag in the UCSRA Register is
set. Data written to UDR when the UDRE Flag is not set, will be ignored by the USART
Transmitter. When data is written to the transmit buffer, and the Transmitter is enabled,
the Transmitter will load the data into the Transmit Shift Register when the Shift Register
is empty. Then the data will be serially transmitted on the TxD pin.