Generelle Fragen zum SPI bei AVR

Gast #1586120
Lesenswert?

Hallo,
ich habe folgende Fragen:

Wenn ein AVR Controller als Master definiert wird kann er dennoch Daten 
empfangen - ist das richtig?

In welchem Register wird das empfangene byte gespeichert? Ich vermute 
SPDR (mega8) - aber da ist doch das gesendete byte?

Wie sehe ich das, dass der empfang abgeschossen ist?

Danke für die Hilfe...
Gast #1586134
Lesenswert?

Der Master definiert den Clock, den muss nicht kontinuierlich sein.
Das SPDR register ist ein doppelregister, lesen sieht das angekommene 
Byte, schreiben tut's in den ausgehenden Buffer. Es gibt ein Complete 
Flag.
Gast #1586135
Lesenswert?

Philip schrieb:
> Wenn ein AVR Controller als Master definiert wird kann er dennoch Daten
> empfangen - ist das richtig?
Ja.

> In welchem Register wird das empfangene byte gespeichert? Ich vermute
> SPDR (mega8) - aber da ist doch das gesendete byte?
Nein, das hast du ja gerade durch die Slaves durchgeschoben. Aus dem 
SPDR liest du das Byte, welches wärend des Sendens empfangen wurde.

> Wie sehe ich das, dass der empfang abgeschossen ist?
Dazu gibt es Interrupts und Interrupt-Merker, die ausführlich im 
Datenblatt beschrieben sind, u.A. SPIF.
Gast #1586139
Lesenswert?

danke erst mal für die Antworten... helfen mir schon weiter...

Sehe ich es richtig, dass diese Funktion sowohl ein byte schreibt als 
auch liest?

char ReadByteSPI(char cData)
{
   SPDR = cData;               //Load byte to Data register
   while(!(SPSR & (1<<SPIF)));    // Wait for transmission complete
   cData = SPDR;
   return cData;
}
Gast #1586144
Lesenswert?

Jeder_ SPI-Transfer liest _und schreibt ein Byte, das hat SPI so an 
sich. Es bleibt lediglich dir überlassen, ob du das gerade gelesene oder 
empfangene Byte auch verwertest.

Es ist mit dem SPI unmöglich, nur_ ein Byte zu _senden; du musst in 
diesem Fall ein Dummybyte senden.

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