Max schrieb:
ich muss gerade eine TWI-Kommunikation mit einem AT32UC3A als Master
aufbauen.
Aha. Eine TWI-Kommunikation. Ich vermute mal, daß damit eigentlich ein I2C Bus gemeint ist.
Also: Der Verkehr auf einem I2C Bus erfolgt etwa so:
- ein/der Master appliziert eine Start-Kondition
- der Master sendet ein Adressierungsbyte, was die Adresse des anzusprechenden Slaves und ein Bit zum Unterscheiden, ob es im folgenden ein Lesen oder Schreiben sein soll, enthält.
- der Master sendet/empfängt Bytes. Der jeweilige Empfänger quittiert jedes Byte mit einem ACK oder er rührt sich nicht, was NAK bedeutet.
- der Master appliziert eine Stop-Kondition
Normalerweise darf sich das Datensignal (SDA) nur dann ändern, wenn das Clock-Signal (SCL) auf LOW liegt. Ändert man SDA, während SCL auf High ist, dann ist das eine Start- bzw. Stop-Kondition wie folgt:
SCL LOW-->HIGH = Stop
SCL HIGH-->LOW = Start
Und ein repeated Start ist nix anderes als eine erneute Start-Kondition ohne zuvorige Stop-Kondition.
Das ist eigentlich alles - was den I2C betrifft. Sowas wie Busherrschaft gewinnen oder abgeben lassen wir hier mal außen vor.
Zu diversen µC: oftmals haben die ein I2C-Interface eingebaut. Allerdings reicht deren Qualität von 'benutzbar' bis 'Katastrophe'.
Manche erzeugen bei jedem Zustandswechsel einen Interrupt und überlassen das eigentliche Handeln dem Programmierer der ISR. Ist häßlich, aber benutzbar.
Andere wollen ganz besonders oberschlau sein und alles selber machen. Ist zwar besonders genial gedacht, aber meistens so gut wie unbenutzbar. Wenn du an so einen µC geraten bist, dann laß das I2C-Interface links liegen und mache deine Abläufe in Software. Das ist übersichtlicher und benutzbarer.
W.S.