mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR SPI Interrupt


Autor: Stephan Schmidt (scoty6v)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: *.* (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan Schmidt (scoty6v)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.