TWI mit AVR311 betreiben

OP #600638
Lesenswert?

Hallo Leute,
hat einer von euch evtl Erfahrung mit der AppNote "AVR311: Using the TWI 
module as I2C slave" von Atmel?
Ich habe mir die Dokumentation angesehen und nach ein bisschen 
Einarbeitungszeit, steige ich dahinter wie das ganze funktioniert. Einen 
Problem habe ich aber noch, was ich nicht verstehe:

Mein Slave soll mehrere Datenbytes an einem Stück empfangen (Menge wird 
bestimm aus dem ersten Datenbyte). Maximal sind es 10Byte inklusive 
Adresse.

Wenn ich jetzt das TWI-Modul richtig verstanden habe, springt er bei 
jeder aktion des TWI in die ISR. Wie weiß ich aber nun in meinem 
Hauptprogramm, wann die Datenbytes alle vollständig empfangen wurden? 
Ich möchte ja nicht schon das 3.Byte abfrage, obwohl dieses eigentlich 
noch garnicht empfangen wurde, also noch ein alter Wert darin steht?

MfG
Muecke
Gast #600652
Lesenswert?

Du kannst die Funktion " TWI_Transceiver_Busy" benutzen -- die liefert 
True (d.h. !=0) zurück, sobald sich die ISR abgeschaltet hat, d.h. eine 
Stop-condion auf dem Bus war. Diese Funktion return'ed gleich, muss also 
regelmäßig aufgerufen werden (z.B. in der Mainloop).

hth. Jörg
OP #600673
Lesenswert?

OK. Habe mir die Funktion nochmal genau angeschaut... Mit dem 
Zusammspiel der anderen Funktionen. Verstehe das jetzt auch soweit.

Jetzt habe ich nur ein #include problem.
Ich habe die Files TWI_slave.c und TWI_slave.h in meinem Projektordner 
(AVR Studio4). Jetzt mache ich den Befehl #include "TWI_slave.h" wie in 
der Beschreibung Implementation beschrieben. Wenn ich jetzt aber eine 
Funktion aufrufe bekomme ich einen Error: undefined reference to 
<Funktionsname>.

Wenn ich die TWI_slave.c zusätzölich includiere bekopmme ich auch wieder 
errors mit dem Inhalt, dass ich zwei Definitionen der selben Funktion 
habe.
Aber in dem Besipielprogramm, was debei ist, wird doch auch nur die 
TWI_slave.h includiert...

Wie löse ich diese Problem?

MfG
Muecke
Gast #600686
Lesenswert?

Du musst die C-Datei zu deinem Projekt hinzufügen. Ich weiß aber nicht 
welchen Compiler/IDE du nutzt (IAR wahrscheinlich?), aber irgendwo kann 
man zusätzliche C-Dateien einbinden - include't werden normalerweise 
nicht. Beim GCC kommen die ins Makefile, bei AVR-Studio unter "external 
source files".

hth. Jörg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren