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