ATMEGA16: Feststellen ob der TWI gerade in Benutzung ist ...

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
Hi NG,
bie meinem ATMEGA16 wird intensiv der TWI genutzt.

Insbesondere erfolgt alle 100ms ein Interrupt und in der Interrupt-Routine
wird wiedrum auch der TWI genutzt.
Es ist also möglich, dass während der Übertragung (es werden immer viele
Bytes an ein LCD-Display übertragen) der Interrupt kommt und der ATMEGA den
TWI für etwas anderes nutzen will. Ich störe also gelegentlich eine laufende
Übertragung.

Wie kann ich nun feststellen ob sich der TWI gerade in Benutzunng befindet ?
Aktuell benutze ich eine globale Variable, die den Status wiedergibt.

Kann ich auch den TWSR benutzen ? Der STatus code $F8 erschien mir
geeignet - er besagt wohl "nothing to do".
Das Manual hört sich allerdings so an, als könne der TWSR auch zwischendrin
diesen Code annehmen, obwohl der Übertragungsvorgang läuft.

Hat jemand eine Idee ?

Gruss Nico



Re: ATMEGA16: Feststellen ob der TWI gerade in Benutzung ist ...
Quoted text here. Click to load it


semophores
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff /
We've slightly trimmed the long signature. Click to see the full one.
Re: ATMEGA16: Feststellen ob der TWI gerade in Benutzung ist ...
Quoted text here. Click to load it

Meinst du Semaphoren? Die sind aber doch eher für gegenseitigen
Ausschluß gedacht. Ich denke, das blockierende Verhalten der P()
Operation ist hier auch nicht gewünscht.

Gruß,
Johannes

Re: ATMEGA16: Feststellen ob der TWI gerade in Benutzung ist ...
Quoted text here. Click to load it

cli(); ... ; sei(); um den entsprechenden Block?

Jan

Re: ATMEGA16: Feststellen ob der TWI gerade in Benutzung ist ...
Ich glaube, die Idee mit den Semaphoren ist noch am realistischsten
Ich werde es mal probieren.
Vielen Dank erstmal

Quoted text here. Click to load it



Re: ATMEGA16: Feststellen ob der TWI gerade in Benutzung ist ...
Quoted text here. Click to load it

Hmm, muss man um beim Atmel Semaphoren zu realisieren nicht auch
Interrupts abschalten (sei, cli), weil der keine 'test and inc/dec'
Instruktion hat?
Ich habe zumindest in dem Instruction Set [1] nichts derartiges
gefunden und auch avrX [2] schaltet Interrupts ab um das zu machen.
Du kannst ja sonst auch selektiv den einen stoerenden Interrupt
abschalten und nicht alle.

Jan

[1] http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF
[2] http://www.barello.net/avrx/overview.htm

Re: ATMEGA16: Feststellen ob der TWI gerade in Benutzung ist ...

Quoted text here. Click to load it

Nach der Benutzung einfach TWEN ausschalten, dann kannst du das
testen.
--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/ NIC: JW11-RIPE
We've slightly trimmed the long signature. Click to see the full one.

Site Timeline