ATmega: SPI, while-Schleife und Rechenzeit

OP #1970868
Lesenswert?
• ▲
▼
Hallo,

ich benutze einen ATmega 644P und habe eine Frage zum Senden von Daten 
per SPI-Schnittstelle:

Und zwar sieht mein Code momentan so aus, dass ich ein Byte sende:

SPDR = cData;

und dann abwarte, bis das Byte übertragen wurde:

while(!(SPSR & (1<<SPIF)))
  ;

So ist es auch im Datenblatt als Beispiel geschrieben.

Jetzt hänge ich aber natürlich in der while-Schleife solange fest, bis 
das Byte übertragen wurde, ohne dass ich was anderes machen kann. Wäre 
es denn nicht sinnvoller die beiden Zeilen einfach umzudrehen:

while(!(SPSR & (1<<SPIF)))
  ;

SPDR = cData;

So kann ich direkt nach dem Senden weitere Rechnungen durchführen und 
falls es doch passieren sollte, dass ich ein weiteres Byte verschicken 
will, obwohl die aktuelle Sendung noch läuft, dann würde ich vor dem 
nächsten Senden in der while-Schleife hängen?

Also ist es für die Rechenzeit nicht besser die 2. Variante zu nehmen? 
Oder was wäre da der Nachteil?

Gruß
#1970892
Lesenswert?
• ▲
▼
@  Andreas Heil (heilinger)

>will, obwohl die aktuelle Sendung noch läuft, dann würde ich vor dem
>nächsten Senden in der while-Schleife hängen?

Ja.

>Also ist es für die Rechenzeit nicht besser die 2. Variante zu nehmen?

Ja.

>Oder was wäre da der Nachteil?

Keiner. Mann muss nur wissen, dass der AVR nen kleinen Bug hat. Nach dem 
Reset müsste das Bit gesetzt sein, weil die Übertragung ja nicht läuft 
bzw. abgeschlossen ist. Ist es aber nicht.

Abhilfe? Einfach am Programmanfang ein beliebiges Byte senden, ohne 
vorher das Statusbit abzufragen.

MFG
Falk
OP #1970900
Lesenswert?
• ▲
▼
Peter schrieb:
> und warum tauscht du es nicht?

das war ja meine Frage. Will ja nicht einfach was machen, was evtl. 
Konsequezen hätte, was ich nicht direkt erkenne und wie es aussieht

Falk Brunner schrieb:
> Keiner. Mann muss nur wissen, dass der AVR nen kleinen Bug hat. Nach dem
> Reset müsste das Bit gesetzt sein, weil die Übertragung ja nicht läuft
> bzw. abgeschlossen ist. Ist es aber nicht.
>
> Abhilfe? Einfach am Programmanfang ein beliebiges Byte senden, ohne
> vorher das Statusbit abzufragen.

ist mein Gedanke nicht ganz unbegründet gewesen. Daher werde ich die 
beiden Zeilen nun tauschen und beim Ersten Senden die while-Schleife 
weglassen (so kann es mir egal sein, ob das Bit gesetzt ist oder nicht).

Ich denke so habe ich die Antworten jetzt richtig interpretiert...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.