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

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

Reply to
Nicolas Nickisch
Loading thread data ...

"Nicolas Nickisch" schrieb im Newsbeitrag news:42fed93f$0$6989$ snipped-for-privacy@newsread2.arcor-online.net...

semophores

-- Manfred Winterhoff, reply-to invalid, use mawin at despammed.com homepage:

formatting link
de.sci.electronics FAQ:
formatting link
Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

Reply to
MaWin

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

Jan

Reply to
Jan Dittmer

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

Reply to
Johannes Bauer

Ich glaube, die Idee mit den Semaphoren ist noch am realistischsten Ich werde es mal probieren. Vielen Dank erstmal

"Jan Dittmer" schrieb im Newsbeitrag news: snipped-for-privacy@ppp0.net...

Reply to
Nicolas Nickisch

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]
formatting link
[2]
formatting link
Reply to
Jan Dittmer

"Nicolas Nickisch" schrieb:

Nach der Benutzung einfach TWEN ausschalten, dann kannst du das testen.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Reply to
Joerg Wunsch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.