mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wann SPDR schreiben als SPI SLAVE


Autor: Aufnehmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe hier einen Mega8 verbunden mit einem Chip, der als SPI 
Master arbeitet. Der Mega8 ist also der Slave. Wenn ich Daten vom Master 
lese, habe ich kein Problem, ich muß ja nur auf das SPIF achten, und 
wenn es gesetzt wird, lese ich sofort.

Wie ist es aber wenn ich Daten senden will (der Master erwartet mehrere 
Bytes direkt hintereinander) - wann kann ich das SPDR füllen? Beim 
ersten Byte ist es kein Problem, ich schreibe direkt nachdem der Master 
das SS aktiviert hat. Aber wann das zweite? wenn ich ein SPIF kriege 
(=erstes Byte übertragen), ist evtl. schon zu spät, weil Clock ja nicht 
stehenbleibt und der Master kontinuierlich weiterliest? Oder habe ich 
ein Byte als Puffer?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aufnehmer wrote:
> Wie ist es aber wenn ich Daten senden will (der Master erwartet mehrere
> Bytes direkt hintereinander) - wann kann ich das SPDR füllen?

Nach der letzten Taktflanke des alten Bytes, aber vor der ersten 
Taktflanke des neuen Bytes.
Mit einem AVR geht es also nicht.

Du brauchst nen MC mit gepuffertem SPI, z.B. den AT89LP4052, das ist ein 
8051-Derivat.


Peter

Autor: Aufnehmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na so schnell will ich nicht aufgeben. Wenn es gar nicht anders geht, 
baue ich 32 Bit als Schieberegister dazwischen (4 Byte muß ich 
nacheinander schreiben). Der SPI-Takt ist ca. 3,6 MHz, der AVR läuft mit 
12MHz.

Mal angenommen, es wären sogar 4MHz (rechnet sich besser) und das SPIF 
kommt zeitgleich mit der letzten fallenden Flanke - alle 4 CPU-Takte 
käme dann eine neue fallende Flanke. Ich hätte also 4 Takte Zeit um das 
SPDR neu zu befüllen:

   Loop:
      sbis spsr,spif   '3(a) Takte im Erfolgsfall, 2(b) Takte im 
Fehlerfall
      rjmp Loop        '2(b) Takte im Fehlerfall
      Out SPDR , R17   '1(a) Takt

   'dann hab ich wieder Zeit..

Naja ich seh schon, bei oberhalb 2 MHz SPI-Takt wird es eng..

Autor: Aufnehmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
statt Schieberegister meinte ich wohl eher ein FIFO oder Buffer mit 
mind. 4 Byte - welches kann ich nehmen, das für Bastler verfügbar ist?

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Beim SPI im Slave-Mode ist das 'Senden' eines Bytes auch der Empfang 
eines Bytes (Schieberegisterprinziep). D.h. du kannst das Abholen des 
Bytes durch den Master genauso detektieren wie den Empfang. Nur die 
Daten im Epfangsregister sind halt irrelevant.

MfG Spess

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.