/* Test des modes low-power ****************************************** Une fonction d’interruption sur les switches P1 permet de passer d’un mode basse consommation à l’autre. Une pression sur le bouton poussoir SW1 enclenchera le mode 1, sur SW2 le mode 2 et ainsi de suite. Comme indicateur du mode en cours, on a programmé l’allumage d’une LED parmi les quatre à droite (P1.0 à P1.3). **********************************************************************/ #include "msp430xG46x.h" #include "intrinsics.h" // fonctions intrinsèques #include "LCD.h" #include int main( void ) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer TACTL = TASSEL_1 + MC_1; // ACLK, upmode TACCR0 = 32768 - 1; // Définition d'un timer_A avec fréquence = 1 Hz TACCTL0 = CCIE; // CCR0 interrupt enabled TBCTL = TBSSEL_2 + MC_1 + ID_3; // SMCLK/8, upmode TBCCR0 = 32768 - 1; // Définition d'un timer_B avec fréquence = 4 Hz TBCCTL0 = CCIE; // CCR0 interrupt enabled P2DIR = 0xCF; P2OUT = 0x00; P1IE = 0x0F; __enable_interrupt(); LCD_init(); __low_power_mode_1(); // Boucle infinie low-power return 0; } #pragma vector= TIMERA0_VECTOR // Timer_A TACCR0 interrupt vector handler __interrupt void int_timerA(void) { P2OUT ^= BIT6; // Toggle P2.6 } #pragma vector= TIMERB0_VECTOR // Timer_B TBCCR0 interrupt vector handler __interrupt void int_timerB(void) { P2OUT ^= BIT7; // Toggle P2.7 } #pragma vector=PORT1_VECTOR // routine d'interruption sur P1 __interrupt void Port1_ISR (void) { char str[9]; P2OUT = P1IFG; LPM4_EXIT; sprintf (str, "LPM %d", P1IFG); LCD_print (str); if (P1IFG == 0x01) { __bis_SR_register_on_exit(LPM1_bits); } if (P1IFG == 0x02) { __bis_SR_register_on_exit(LPM2_bits); } if (P1IFG == 0x04) { __bis_SR_register_on_exit(LPM3_bits); } if (P1IFG == 0x08) { __bis_SR_register_on_exit(LPM4_bits); } P1IFG = 0; }