Im Datenblatt des ATmega8 zu SPI heisst es folgendes: "The system is single buffered in the transmit direction and double buffered in the receive direction. This means that bytes to be transmitted cannot be written to the SPI Data Register before the entire shift cycle is completed. When receiving data, however, a received character must be read from the SPI Data Register before the next character has been completely shifted in. Otherwise, the first byte is lost." Kann mir das mal jemand erklären, was das bedeutet, kappiere es nicht ganz?
Wenn per SPI Daten reinkommen, dann werden diese alle 8 (SPI)-Takte in ein Register geschrieben, welches man dann ausliest. Vorteil: Man hat ein wenig Zeit die daten einzulesen bis sie von eventuellen weiteren Daten überschrieben werden. In Senderichtung ist das aber anders. Es gibt zwischen dem Sende-Register und dem "Programm" keinen weiteren Puffer. Das heisst, wenn du SPDR beschreibst, während eine Transaktion im Gange ist, wird das momentan zu sendende Byte direkt überschrieben. Solange man den AVR als Master betreibt ist das relativ egal, da dieser dann auch den Takt vorgibt. Als Slave hat man dann aber das Problem das man kaum Takte zur verfügung hat in denen man beim schreiben das SPDR setzen kann. Um einen AVR als sendenen SPI Slave zu nutzen muss man also immer noch einen Warte-mechanismus beim Master haben. Entweder mit festen Zeiten oder über eine Signalisierungsleitung vom Slave zum Master.
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.