Hi All,
Could you please tell me why am I getting these spikes in the image below?
Here is the test code:
#include <msp430g2553.h>
const unsigned int halfcycle[51] = {100, 108, 115, 122, 129, 135, 141, 146, 151, 154, 157, 159, 160, 160, 159, 157, 154, 151, 146, 141, 135, 129, 122, 115, 108, 100, 92, 85, 78, 71, 65, 59, 54, 49, 46, 43, 41, 40, 40, 41, 43, 46, 49, 54, 59, 65, 71, 78, 85, 92 };
signed int index = -1;
unsigned int comp = 0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//Calibrate DCO for 1MHz operation
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
P2DIR |= BIT1 + BIT2;
P2SEL |= BIT1;
P2SEL &= ~(BIT2);
P2OUT &= ~(BIT1+BIT2);
TA1CCR0 = 200 - 1;
TA1CCTL0 = CCIE; // CCR0 interrupt
TA1CCTL1 = OUTMOD_2 + CCIE;
TA1CTL = TASSEL_2 + MC_3 + TACLR; // SMCLK, up-down mode
_BIS_SR(LPM0_bits + GIE); // Enter LPM0
}
#pragma vector=TIMER1_A1_VECTOR // ISR for CCR1 and CCR2 interrupts
__interrupt void Timer_A1 (void)
{
switch (__even_in_range(TA1IV, 10))
{
case 0: // no interrupt is pending
{
break;
}
case 2: // CCR1
{
TA1CCR1 = halfcycle [index] - 1;
break;
}
case 4: // CCR2
{
break;
}
case 10: // TA1IFG
{
break;
}
}
}
#pragma vector=TIMER1_A0_VECTOR // ISR for CCR0
__interrupt void Timer_A0 (void)
{
index = index + 1;
if(index == 25)
{
index = 0;
P2SEL ^= (BIT1 + BIT2);
}
}

