Difference between revisions of "MSP430F2013 TICK"
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)
- 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
- /
- 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>