#include "msp430x22x4.h"
void main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 |= XTS; // ACLK= LFXT1= HF XTAL BCSCTL3 |= LFXT1S1; // LFXT1S1 = 3-16Mhz
do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0xFF; i > 0; i--); // Time for flag to set } while (IFG1 & OFIFG); // OSCFault flag still set? BCSCTL2 |= SELM_3; // MCLK = LFXT1 (safe)
P1SEL |= 0x0E; // P1.1 - P1.3 option select P1DIR |= 0x0F; // P1.0 - P1.3 outputs TACCTL0 = OUTMOD_4 + CCIE; // TACCR0 toggle, interrupt enabled TACCTL1 = OUTMOD_4 + CCIE; // TACCR1 toggle, interrupt enabled TACCTL2 = OUTMOD_4 + CCIE; // TACCR2 toggle, interrupt enabled TACCR0 = 200; TACCR1 = 1000; TACCR2 = 10000; TACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, contmode, interrupt enabled
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupts }
// Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A0 (void) { TACCR0 += 200; // Add Offset to TACCR0 }
// Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A1(void) { switch (TAIV) // Efficient switch-implementation { case 2: TACCR1 += 1000; // Add Offset to TACCR1 break; case 4: TACCR2 += 10000; // Add Offset to TACCR2 break; case 10: P1OUT ^= 0x01; // Timer_A3 overflow break; } }
|