nickelflippr
Member
Thought I would post some code for those Launchpad owners out there using CCS. I could become a convert,........ once I get the C syntax down. Actually using the debugger now, because I'm getting nailed left and right on stupid mistakes.
I was needing to put my chip to sleep, and wake up every 10 minutes or so to check on some inputs. So here is the code that comes within a handful of seconds of doing so.
I was needing to put my chip to sleep, and wake up every 10 minutes or so to check on some inputs. So here is the code that comes within a handful of seconds of doing so.
Code:
//A rough 10 minute timer example using the MSP430_Launchpad
//Utilizes TIMERA0 interrupt, and the low power VLOCLK (12khz)
//CCS v4.1.3.xx
#include "msp430g2211.h"
#define LED0 BIT0
unsigned char count = 0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0xFF; //All outputs
P1OUT = 0;
BCSCTL3 = LFXT1S1; //Select VLOCLK for ACLCK (i.e. 12khz intosc)
P1OUT |= LED0;
TACCTL0 = OUTMOD_2 + CCIE; // TACCR0 interrupt enabled
TACCR0 = 32768; //Compare to Timer_A register (approx. 25 sec for VLOCLK & 1/8 divider)
TACTL = TASSEL_1 + ID1 + ID0 + MC_1; // ACLCK, 1/8 DIVIDER, upmode to TCCR0 value
for(;;)
{
__bis_SR_register(LPM3_bits + GIE); //Enter LPM3 w/interrupt
__no_operation(); // For debugger, executes next instruction just like a PIC
}
}
#pragma vector=TIMERA0_VECTOR // Timer A0 interrupt service routine
__interrupt void Timer_A (void)
{
count += 1;
TACCR0 = 32768; // reset TACCR0 register
if (count==24){ //24 * 25sec is approx. 10 minutes
P1OUT ^= LED0; //Toggle LED
count = 0;
}
}