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


von Aufnehmer (Gast)


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?

von Peter D. (peda)


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

von Aufnehmer (Gast)


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..

von Aufnehmer (Gast)


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?

von Spess53 (Gast)


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

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.