Hallo,

Zu 1:
Das ist relativ egal da beide Variablen sehr selten gesetzt werden aber NUR dann wenn in dem writeRegister was drin steht auch was gemacht werden soll (und nur DANN wird auch geschaut ob das gerade geht oder ob noch ein Schreibvorgang läuft).


Zu 2:

> ... dann dient das Zurücksetzen dazu, dem Master zu signalisieren, ...

Nö. Das ist damit beim nächsten Aufruf von getCommand in

I2CTWI_writeRegisters[I2C_REGW_CMD]

eine 0 drin steht. Sonst würde das gleiche Kommando ja nochmal ausgeführt.
Der Master bekommt davon nix mit der hat auch gar keinen lesenden Zugriff auf die writeRegister (read und write Regsiter sind zwei verschiedene Arrays!)


> So wie oben könnte doch ein ungeduldiger Master die Parameter schon wieder überschrieben haben.

Eigentlich nicht, da vorher getestet wird (writeBusy) ob gerade irgendwas geschrieben wird (die Variable ist solange 0 bis Adresse+W empfangen wurde).
Wenn nicht wird sehr schnell der Code ausgeführt und der aktuelle Befehl in Variablen zwischengespeichert.
Der I2C Bus läuft nur mit maximal 400kHz versus den 8MHz des ATMEGA selbst wenn direkt nach der if Abfrage writeBusy = 1 werden sollte käme
des I2C Bus nicht so schnell hinterher. Der schreibt ja da auch erstmal welches Register überhaupt beschrieben werden soll und erst danach
kommen die Daten und die Register werden tatsächlich geändert...


MfG,
SlyD