mager schrieb:
> Soll ich dann in der ISR ein Flag abfragen, also write und read? und
> dementsprechend die buffer inkrementieren etc?
Was für ein Flag?
Beim SPI gibt es doch sowieso nur ein einziges Ereignis.
Der Transfer ist fertig.
Punkt.
Mehr gibt es da nicht. Wenn also der Interrupt kommt, dann weißt du, das
das letzte zeichen komplett draussen ist (und im Gegenzug ein Zeichen
von der Gegenseite rübergeschoben wurde). Was also wirst du machen?
Es gibt 2 Möglichkeiten
* entweder gibt es noch was zu transferieren, dann stopfst du das
nächste
Zeichen ins SPDR Register, damit das ebenfalls transferiert wird
* oder es gibt nichts mehr zu tun. IN dem Fall macht dann eben die ISR
nichts.
Wo ist da jetzt das Problem?
>
> Gibts dazu evtl ein beispiel?
Wie wärs, wenn du mal selber ein wenig nachdenkst, was da eigentlich vor
sich geht. Wie das SPI System funktioniert?
> Interrupt driven spi fand ich nichts passendes im web.
Googeln können ist wichtig. Aber noch wichtiger ist es, sich selbst mal
ein bischen was zu überlegen.
SPI funktioniert so, wie wenn sich 2 Personen am Tisch gegenüber sitzen.
Jeder hat ein Kuvert, in welches er eine Nachricht stecken kann (die nur
aus einer einzigen Zahl im Bereich 0 bis 255 besteht). Die eine der
Personen ist der Master. Der hat das sagen.
Der Master nimmt sein Kuvert in die rechte Hand (genauso wie der Slave).
Beide strecken nun ihre rechte Hand aus und schieben das Kuvert über den
Tisch zum jeweiligen Gegenüber. Und zwar gleichzeitig. Der Master nimmt
mit seiner linken das Kuvert vom Slave und der Slave nimmt mit seiner
linken das Kuvert vom Master.
Damit ist der Datenaustausch vollzogen. Jeder der beiden (Master und
Slave) können jetzt ins Kuvert schauen und nachsehen, was der jeweils
andere mitteilt.
Aber Auslöser des Ganzen ist immer der Master. Der Slave kann seinen
Namen tanzen wenn er will, das hilft nichts. Der Master ist der, der das
sagen hat. Er beginnt damit den Kuvertaustausch anzustossen.
Jetzt kommen Interrupts ins Spiel. Der Interrupt wird genau dann
ausgelöst, wenn das Kuvert komplett ausgetauscht wurde. Kunststück. Was
anderes erwähnenswertes gibt es da ja auch nicht. Und das ist jetzt der
Punkt, an dem die Ehefrau ins Spiel kommt (das Hauptprogramm in Form der
ISR). Sobald der Master das Kuvert hat, läutet eine Glocke, die Ehefrau
tritt hinzu und macht, was immer sie für richtig hält. Sie kann sich
ansehen was im Kuvert stand, sie kann dem Master auftragen, dass er was
neues ins Kuvert schreiben und rüberschieben soll, sie kann aber auch
nichts dergleichen tun. Je nachdem.
Zack: Das ist im wesentlichen SPI. Mehr ist da nicht. Es gibt kein
dezidiertes 'Senden' oder 'Empfangen'. Die beiden SPI Teilnehmer
tauschen Bytes aus, wobei der Master der ist, der alles anstösst und
taktet.
Und aus dieser Basisfunktionalität musst du jetzt eben was machen, so
das du die Funktionalität kriegst, die du brauchst. Der grundlegende
Transfermechanismus ist da, alles weitere ist jetzt dein Bier.