Forum: Mikrocontroller und Digitale Elektronik Frage zu USART in SPI


von joe (Gast)


Lesenswert?

Hallo,

ich benutze von nem ATMEGA48 die USART im SPI Betrieb.
Nun möchte ich gern die folgende Abfolge durchführen.:

-Einen Bestimmten Pin runterziehen (CS)
-Daten in den Sendepuffer laden
-Warten bis die Daten gesendet wurden
-Einen Bestimmten Pin hochziehen (CS)

Mein Problem ist die Warteschleife, die warten soll bis die Daten den 
Controller verlassen haben. Ich habe es mit dem TXC0 Flag im UCSR0A 
Register probiert. Leider hat das nicht funktioniert.

whle (!(UCSR0A &(1<<TXC0)));

Gibt es evtl. ne andere Möglichkeit? Ich möchte halt von einem Baustein 
Chip Select runterziehen, Daten senden und danch CS wieder hochziehen.


Vielen Dank.

von Johannes M. (johnny-m)


Lesenswert?

Nimm das UDRE0-Flag.

von joe (Gast)


Lesenswert?

>Nimm das UDRE0-Flag.

Das Geht auch nicht, weil dieses Flag ist dann gesetzt, wenn die Daten 
aus dem UDR0 Buffer in das Schieberegister geladen wurden. Das heisst 
aber nicht, dass die Daten schon gesendet worden sind.

von sechs ueber drei (Gast)


Lesenswert?

Falls die Moeglichkeit besteht, den SPI auf den maximalen speed laufen 
zu lassen, dh das Zieldevice das auch so kann, kann man die 8 
clockzyklen pollen bis das Byte draussen ist. Der Overhead ist geringer.

von Johannes M. (johnny-m)


Lesenswert?

Hmmm, ich versteh jetzt nicht ganz, warum das mit dem TXC0 nicht 
funktionieren soll. Da scheint noch was Anderes schief zu laufen. Wenn 
in Deinem Programm nicht auch "whle" steht, sondern "while", dann sollte 
es klappen.

von Ralph (Gast)


Lesenswert?

Nimm das Receive Flag ( keine Ahnug wie das bei den Atmels heißt) , nach 
dem Übertragen des Bytes ist immer auch ein Byte im RX buffer.

von joe (Gast)


Lesenswert?

Man muss nach
while (!(UCSR0A &(1<<TXC0)));
das TXC0 Flag einmal setzen um den Mechanismus neu vorzubereiten.

von Johannes M. (johnny-m)


Lesenswert?

joe wrote:
> Man muss nach
> while (!(UCSR0A &(1<<TXC0)));
> das TXC0 Flag einmal setzen um den Mechanismus neu vorzubereiten.
Aaah, Du hast das Flag gar nicht wieder gelöscht? Na, dann ist natürlich 
alles klar...

von joe (Gast)


Lesenswert?

Ja mein Fehler.

die Tatsache, dass man ein Flag löscht, indem man es setzt is ja acuh 
erstmal komisch.

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.