Forum: Mikrocontroller und Digitale Elektronik AVR SPI Interrupt


von Stephan S. (scoty6v)


Lesenswert?

Hallo!
Im Datenblatt des ATmega 32 steht, dass nach einem übertragenen Zeichen 
ein Interrupt ausgelöst wird. Da die SPI-Schnittstelle voll Duplex 
unterstützt, verstehe ich das nun so, dass nach Zeichen fertig gesendet 
und Zeichen fertig empfangen der gleiche Interrupt ausgelöst wird.
Sehe ich das richtig?
Oder bekomme ich im Mastermode nur einen Interrupt, nach einem fertig 
gesendeten Zeichen und im Slavemode nur nach einem fertig empfangenen?

von *.* (Gast)


Lesenswert?

Wie es sich im Slave-Modus verhält, weiß ich eigentlich gar nicht, es 
gab  bisher keine Notwendigkeit, das wissen zu müssen. Im Master-Modus 
zeichnet das gesetzte Interrupt-Flag eine abgeschlossene Übertragung 
aus. Um einen Slave auszulesen, muß dazu freilich ein Dummybyte gesendet 
werden. Falls irgend was SPI-artiges an MISO hängt, erhält man nach 
Versenden des Dummybytes tatsächlich ein ausgelesenes Byte jener Rödelei 
im SPDR-Register.

mfg

von Stephan S. (scoty6v)


Lesenswert?

Achso!
Also ist SPI tatsächlich nur ein Schieberegister. Um Daten von einem 
Slave zu bekommen, muss ich also ein Byte senden, ist dieses komplett 
herausgeschoben, ist ein Byte aus dem Slave hineingeschoben???

Ich versuche gerade mehrere Microcontroller auf einem Board miteinander 
zu verbinden, die jeder für sich Aufgaben erledigen, aber dennoch Ihre 
Daten abgleichen müssen.

Ich hatte es bis jetz so verstanden, ich sende genau wie bei einer 
RS232-Schnittstelle ein Byte an den Slave, dieser berechnet seine 
Antwort und sendet diese dann zurück.
Macht aber Sinn, das das nicht geht, dann woher soll in dem Fall der 
Master wissen, wann er takten soll.

von Matthias L. (Gast)


Lesenswert?

>lso ist SPI tatsächlich nur ein Schieberegister. Um Daten von einem
Slave zu bekommen, muss ich also ein Byte senden, ist dieses komplett
herausgeschoben, ist ein Byte aus dem Slave hineingeschoben???

JA.


>Ich versuche gerade mehrere Microcontroller auf einem Board miteinander
>zu verbinden, die jeder für sich Aufgaben erledigen, aber dennoch Ihre
>Daten abgleichen müssen.

Warum nicht nur einer?


>Macht aber Sinn, das das nicht geht, dann woher soll in dem Fall der
>Master wissen, wann er takten soll.

Ist das eine FRage, oder eine Antwort?

Falls ersteres: Die Slave_Select Leitung (\SS) zeigt den Slaves an, wenn 
die Übertragung für ihn ist. Ist \SS Low, dann muss der Slave empfangen 
und senden. WIRD \SS High, sind die (alle empfangenen) Daten gültig. Mit 
alle meine ich, es können auch mehrere Übertragen werden, in der Zeit, 
in der \SS low ist.

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.