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?
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
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.