Karsten K. schrieb:
> das zunächst die ISR
> UDRE aufgerufen wird, da UDR0 ja 0 ist.
UDR ist in gewisser Hinsicht ein geteiltes Register. Schreiben und Lesen
gehen zwar auf dieselbe Adresse, aber landen tatsächlich auf zwei
verschiedenen Ressourcen. Schreiben adressiert den TX-Teil, Lesen den
RX-Teil.
Außerdem heißt "USART Data Register Empty" nicht zwingend, dass da eine
0x00 drin steht. Das ist vielmehr ein Signal bzw. Flag, welches aus der
Sendehardware generiert wird. Das passiert genau dann, wenn die Daten
vom TX-Teil aus dem UDR, auf das gerade geschrieben wurde,
abgeholt/weiter gepuffert worden ist.
Der TX-Vektor wird angesprungen, wenn er mit dem Senden fertig ist, der
UDRE-Vektor, wenn das Register durch die Pufferung(das geht intern mit
D-Flipflops) fürs Senden kopiert worden ist.
Warum nimmst du nicht nur einen Interrupt und definierst dir ein Flag,
das markiert, ob dein Lesevorgang aus dem Daten-Array schon erfolgt ist?
Warum nimmst du nicht gleich nur den UDRE-Vektor, schneller Senden wirst
du durch beide Interrupt-Routinen auch nicht können...
Es dauert ja eine gewisse Zeit, bis der Kram mit 57,6kBaud rausgeschoben
ist.
mfg mf