MSP430G2553: Watchdog auch während LPM3?

Gast #6495724
Lesenswert?

Hallo Gemeinde,

kurze Frage:
Ich verwende derzeit einen MSP430 i2c-Treiber der momentan endlos auf 
entsprechende Status-Bits des I2C-Bausteins polled:
z.B.:

/* Wait for the start condition to be sent and ready to transmit 
interrupt */
while ((UCB0CTL1 & UCTXSTT) && ((IFG2 & UCB0TXIFG) == 0));

/* Wait for the data */
while ( (IFG2 & UCB0RXIFG) == 0 );

Mit dieser Lösung bin ich leider nicht ganz zufrieden.
Wenn nur ein Gerät am i2c-Bus sich aus welchen Gründen auch immer 
"verabschiedet" steht die SW halt für immer in einer der 
endlos-while()-Schleifen.

Zudem verbraucht der MSP430 in der Schleife so um die 300uA.
Ich würde die CPU daher gerne schlafen legen (LPM3) und von dem 
entsprechenden I2C-Interrupt wieder aufwecken.

Allerdings:
Was ist wenn der Interrupt niemals kommt, da ein angeschlossenes 
i2c-Gerät sich nicht meldet oder spinnt?

Ich würde daher gerne den Watchdog parallel mitlaufen lassen, sodass ich 
aus diesem Endlos-Wartezustand wieder rauskomme...
Den Watchdog würde ich vom ACLK speisen und auf 1000ms setzen.
Nach einer 1 Sekunde würde die SW dann komplett neustarten, den I2c 
baustein wieder neu-initialisieren und versuchen das i2c-Gerät wieder 
anzusprechen.

Die Frage ist, kann man das realisieren? Schlägt Watchdog auch zu, wenn 
man in LPM3 ist?
Wie würdet ihr einen Timeout realisieren OHNE polling?

Herzlichen Dank!!!

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