Forum: Mikrocontroller und Digitale Elektronik MSP430: UART im LPM3 fumktioniert nicht


von nobody0 (Gast)


Lesenswert?

Ich habe folgendes Problem: Über die serielle Schnittstelle am UART0 
kann ich den MSP430 zwar u. a. in den LPM3 setzen und die RTC läuft auch 
richtig weiter, aber ich kann nicht über den UART0 aufwecken; die 
Funktion

interrupt[UART0RX_VECTOR] void uart0_receive (void)

wird im LPM3 nicht erreicht, obwohl der UART0 vor dem LPM3 explizit 
aktiviert wird:

 // enable USART0
  ME1 |= URXE0;
  // enable USART0 RX Interrupt
  IE2 |= URXIE0;

Über den Debuger habe ich auch ME und IE überprüft und obwohl die 
richtig sind (nachdem ich die Werte über den Debuger gesetzt habe), 
funktioniert es nicht.
Woran kann das liegen?

von Haiko Schillert (Gast)


Lesenswert?

Hallo,

welchen Clk benutzt du denn für den UART, SMCLK oder ACLK? SMCLK wird im 
LPM3 abgeschaltet. Vielleicht liegt es daran, dass dein UART dann nicht 
mehr laufen kann. Obwohl ich gerade lese, dass der UART auf der 
fallenden Flanke von URXD getriggert wird und dann loslaufen soll. Es 
ist jedenfalls eine Untersuchung wert. Das BIT3 im U0TCTL hast du 
gesetzt? Das scheint notwendig zu sein, um den UART im Low-Pwer-Modes zu 
betreiben.

Gruss Haiko

von Rolf Freitag (Gast)


Lesenswert?

Danke, aber diese naheliegenden Sachen habe ich längst überprüft. Weil 
kein Systemtaktquarz verwendet wird, kann auch kein anderer Takt als 
ACLK verwendet werden.
Inzwischen habe ich die Ursache aber durch Nachsehen in dem User´s Guide 
gefunden:

 P3SEL = 0x20; /* P3.5 = USART0 RXD */

fehlte, weil vor dem Sleep-Modus 0x00 gesetzt wurde (vom Programmierer, 
vom dem der historisch gewachsene Code stammt).
Jetzt funktioniert LPM3 -> AM und AM -> LPM3 über die serielle 
Schnittstelle.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.