Forum: Mikrocontroller und Digitale Elektronik SPI auslesen


von charly (Gast)


Lesenswert?

Hi ich kenne bisher nur Softwareseitiges SPI und habe mich leider noch 
nicht mit dem Hardware technischen auseinander gesetzt. Weil ich auch 
nicht ganz verstehe wie ich da damit die entsprechenden Register eines 
Chips auslese. Habe bisher nur einen Display mal damit angesteuert, und 
da habe ich das nicht zwingend gebraucht.

Beim senden packe ich ja die Info in den SPDR und warte, bis das SPIF 
nicht mehr gesetzt ist dann wurde mein Byte über den SPI Bus gesendet.

Wenn ich jetzt aber was empfangen will kommt die entsprechende 
Information dann auch in den selben Register und wie stelle ich das 
fest, das ich jetzt die Info auslesen kann?

Ist wahrscheinlich nur ein kleines Verständnisproblem aber wäre super 
wenn ihr mir da weiter helfen könnt. Ich kenne die Beispiele für den 
Master und Slave aus den Atmel Datenblättern von diversen Controllern 
aber da gehts nur ums schreiben als Master nicht ums Empfangen. Ein 
Beispiel in C wäre echt super

Lieben Gruß

von Thomas E. (thomase)


Lesenswert?

charly schrieb:
> Beim senden packe ich ja die Info in den SPDR und warte, bis das SPIF
> nicht mehr gesetzt ist dann wurde mein Byte über den SPI Bus gesendet.
>
> Wenn ich jetzt aber was empfangen will kommt die entsprechende
> Information dann auch in den selben Register und wie stelle ich das
> fest, das ich jetzt die Info auslesen kann?
Zum Empfangen von einem Slave sendet der Master ein Byte. Entweder etwas 
Vernünftiges oder ein Dummy-Byte. Damit bekommt der Slave 8 Takte und 
schickt sein Byte raus. Wenn der Master fertig ist, ist auch das 
empfangene Byte im SPDR. Das sind physikalisch natürlich 2 Register, 
eins zum Senden, eins zum Empfangen. Lesend/Schreibend zugreifen kann 
man aber nur auf das jeweils sinnvolle.
1
SPDR = sdata;
2
while(!(SPSR & (1 << SPIF)));
3
SPSR |= (1 << SPIF);
4
rdata = SPDR;

Interrupt lohnt sich meistens nicht.

mfg.

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.