MSP430 exit LPM45 fails

Gast #3898442
Lesenswert?

Hallo Zusammen,

ich versuche gerade den MSP430FR5729 in den LPM45 zu befördern, was mit 
folgender Funktion auch ohne Probleme gelingt:
1
void LPM5()
2
{
3
  PMMCTL0_H = PMMPW_H;                 // Open PMM Registers for write
4
  PMMCTL0_L |= PMMREGOFF;              // and set PMMREGOFF
5
  __bis_SR_register(LPM4_bits + GIE);  
6
}
7
[/]
8

9
Um ihn wieder aufzuwecken, habe ich Port 3.0 als Interrupt Eingang konfiguriert:
10

11
[code]
12
void init_ports()
13
{
14
  P3OUT &= ~BIT0;    // Initialize Input Value
15
  P3IES &= ~BIT0;    // P3.0 Low to High edge
16
  P3SEL0 &= ~BIT0;   //P3.0 selected as GPIO
17
  P3SEL1 &= ~BIT0;
18
  P3IE |= BIT0;      // P3.0 interrupt enabled
19
  P3IFG &= ~BIT0;    // P3.0 IFG cleared
20
  P3REN |= BIT0;     // P3.0 Pull-Down Resistor
21
}

Die Interrupt-Routine sieht wie folgt aus:
1
#pragma vector=PORT3_VECTOR
2
__interrupt void Port_3(void)
3
{
4
  PMMCTL0_H = PMMPW_H;
5
  PMMIFG  |= PMMLPM5IFG;
6
  PMMCTL0_L &= ~PMMREGOFF;
7

8
  P3IFG &= ~BIT0;
9
  __bic_SR_register_on_exit(LPM4_bits);
10
}

Nur wacht der gute MSP430 nicht mehr auf. Interrupts werden in der 
main() global aktiviert und sollten dies auch im Schlafmodus noch sein.

Jemand eine Idee?

Vielen Dank schon mal im Voraus.
Gast #3899269
Lesenswert?

Ja, in der ISR sind die Interrupts disabled. Du schickte den uC aber in 
der ISR wieder indem LPM. Wer soll ihn jetzt wecken?

Beim MSP wird nach der ISR der gleiche LPM wie vor dem Interrupt 
eingenommen. Also lass die letzte Zeile in der ISR weg.
Gast #3899563
Lesenswert?

Go MSP schrieb:
> Ja, in der ISR sind die Interrupts disabled. Du schickte den uC
> aber in der ISR wieder indem LPM. Wer soll ihn jetzt wecken?
>
> Beim MSP wird nach der ISR der gleiche LPM wie vor dem Interrupt
> eingenommen. Also lass die letzte Zeile in der ISR weg.

Ist natürlich Blödsinn, sorry. Das muss was anderes sein.

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