Difference between revisions of "MSP430F2013 TICK"

From emboxit
Jump to: navigation, search
 
m (1 revision)
 
(No difference)

Latest revision as of 16:51, 11 September 2015

  • Single source-file IAR project

<cpp> ///nx 2011.12.08 // using 32768 ACLK // tick using WDG timer // led2 toggles at tick // led1 toggles at NET_PERIOD x tick // TODO: // do not use led2

// 200ms tick TOGGLE using VLO at LED1 of Launchpad // TOGGLE at NET_PERIOD at LED2 of Launchpad // DCO 1MHZ // ACLK 32768 XTAL OR 12KHz VLO

//slau144h = MSP430x2xx Family Users Guide // 10.3.1 WDTCTL, Watchdog Timer+ Register: page 349 // WDTPW is the password // WDTTMSEL 1 selecets TICK_COUNTERr instead watchdog // WDTCNTCL clears the counter // WDTHOLD stops watchdog TICK_COUNTERr // WDTIS1 01 Watchdog clock source /8192 // WDTSSEL selects ACLK for WDT clock

// 5.3.1 DCOCTL, DCO Control Register: page 283

// 5.3.2 BCSCTL1, Basic Clock System Control Register 1: page 283 // // 5.3.4 BCSCTL3, Basic Clock System Control Register 3: page 285 // LFXT1S_2 selects VLO // LFXT1S_0 selects LFXT1 (32.768KHz)

  1. include <msp430x20x3.h>

unsigned int TICK_COUNTER; unsigned int NET_PERIOD = 100;

void init_clock_system(void); void init_gpio(void);

int main( void ) {

 WDTCTL = WDTPW + WDTHOLD;    // Stop watchdog TICK_COUNTERr to prevent  reset 
 init_clock_system(); 
 init_gpio(); 
 USICTL1 |= USIIFG;                 // Set flag and start communication   
 _BIS_SR(LPM3_bits + GIE);          // Enter LPM3 with interrupts
 _NOP();                            // Used for IAR 

}

/****************************************************** // Watchdog Timer interrupt service routine

                                                                                                            • /
  1. pragma vector=WDT_VECTOR

__interrupt void watchdog_TICK_COUNTERr(void) {

 TICK_COUNTER ++;
 P1OUT ^= 0x40; 
 if (TICK_COUNTER == NET_PERIOD) {
     TICK_COUNTER = 0;
     P1OUT ^= 0x01;    // TOGGLE Launchpad LED2
}//if end         

}//int end

void init_clock_system(void){

 DCOCTL = CALDCO_1MHZ;                       // Set DCO to 1MHz
 BCSCTL1 = CALBC1_1MHZ;                      // Set DCO to 1MHz
 //BCSCTL3 |= LFXT1S_2;                        // Select VLO for ACLK
 BCSCTL3 |= LFXT1S_0;                      // Select 32768 XTAL for ACLK
 BCSCTL1 |= DIVA_1;                          // ACLK Divider /4
//0.25 second TICK_COUNTERr ACLK=32768/4 = 8192Hz, Divider 32768--> 4Hz
//TIMER instead Watchdog, Clear counter, ACLK as source, Divider 32768
 WDTCTL = WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1; 
 IE1 |= WDTIE;                               // Enable WDT interrupt

}

void init_gpio(void){

 P1DIR |= 0x01;    //P1.0 out
 P1DIR |= 0x40;    //P1.6 out

} </cpp>