Hi,
I am making a code with TimerA. On it I encountered a curious thing.
I made a 1-second-count-up timer with TimerA0 interrupt and TACCR0 = 32768.
The code below doesn't go well. The valiable 'second ' doesn't increase correctly. It looks like two-beat walking, 0 ->1->2->1->2->...
But, after uncommenting TimerA1 interrupt codes, which is useless now, the code goes well without a problem.
Why does it go well after enabling TimerA1 interrupt code? I can't understand it.
Would anybody please give me suggestion? Thank you in advance.
Regards,
#include "msp430x22x4.h"
unsigned int second = 0;
unsigned int minute = 0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
// CLK set DCO = 8MHz, CPUCLK(MCLK) = 4MHz, SMCLK = 4MHz
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ; // Set DCO to 8MHz
BCSCTL2 = DIVM_1 + DIVS_1; // MCLK Divider 1: /2, SMCLK Divider 1: /2
BCSCTL3 |= (LFXT1S_0 + XCAP_1); // Mode 0 for LFXT1 : Normal operation
//// TimerA set
TACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, contmode
TACCTL0 = CCIE; // TACCR0 interrupt enabled
// TACCTL1 = CCIE; // uncomment here
TACCR0 = 32768;
// TACCR1 = 100 + 32768; // uncomment here
// port set
P1DIR |= 0x03; // Set P1.0, P1.1 to output
// ADC set port- A0, A1, A2, A6, A7
ADC10AE0 = 0xC7; // P2.0/1/2,P3.6/7 ADC port enable
while (1)
{
if (second == 60)
{
second = 0;
minute++;
}
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3, enable interrupts
}
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
P1OUT ^= 0x01; // Set P1.0
second++;
TACCR0 += 32768; // Add Offset to TACCR0
__bic_SR_register_on_exit(LPM3_bits); // Exit LPM
}
//// Timer A1 interrupt service routine
//#pragma vector=TIMERA1_VECTOR // uncomment below
//__interrupt void Timer_A1 (void)
//{
// switch (TAIV)
// {
// case 2:
// TACCR1 += 32768;
// break;
// }
//}