tolle Antwort... im datenblatt ab Seite 170. Wissen wir alle!
hat schon mal jemand die Hardware TWI umgesetzt? die softwareroutinen
sind ja hinlänglich bekannt.
Ich mache ja mit Basic /FastAVR rum, da war das ganz schön aufwändig.
Im prinzip kommt der TWI-Interrupt bei "jedem Sch...", also immer,
wenn was auf'm TWI passiert. was genau passiert, steht im TWSR. Jetzt
muss man schauen, was da drinne steht, und entsprechend verzweigen.
Wenn Du den Atmel als Slave hast, wirst du erstmal 'ne 0x60 bekommen,
wenn der Master ihn auf seiner Slaveadresse erwischt hat, dann fliegen
die Daten ein: du bekommst eine 0x80. hier legst du jedes Byte (steht
im TWDR)in einem Puffer ab, und setzt das TWEA-Bit im TWCR- Register,
ist dein Puffer voll setzt du es nicht, du generierst somit das
Acknowletsch gg aufm 9.Bit oder eben nicht. Wenn Stop kommt, bekommst
Du ein 0xA0. Dann weisst du, dass du alle Daten hast. Ich verzweige
hier an dieser stelle zu meiner Empangsroutine. wo ich den Puffer leere
und meinen Variablen zuordne. Immer wenn ich fertig bin, und erst dann,
setze ich das TWINT-Bit. solange zieht sonst der Slave die TWI-Leitung
gegen Masse, damit der Master wartet. die anderen Bit's muss man auch
jedesmal setzen TWEN, TWEA(0der eben nicht),TWIE. Wenn ein Fehler auf
dem Buss passiert, bekommt man als Status 0x00. hier macht man
garnichts, sondern setzt zusätzlich noch das TWSTO-bit im TWCR.
Wie man als Master Daten absetzt, schreibt bitte jemand anders.
Ich würde es gut finden, wenn solche Kommentare, wie "steht im
Datenblatt" in Zukunft unterbleiben. Dann schreibt lieber garnichts!
Gruß
AxelR.