我用MSP430F5529LP的Timer_A1产生SPWM,会周期性出现一个错误值,求大佬指点一二,波形如下:

代码如下:
#include <msp430.h>
/*
* main.c
*/
int nSinTable[] = {255, 254, 246, 234, 219, 199, 177, 153, 128, 103, 79, 57, 37, 22, 10, 2, 1,
2, 10, 22, 37, 57, 79, 103, 128, 153, 177, 199, 219, 234, 246, 254};
int nCount;
void Init_CLK(void)
{P2DIR |= BIT2;// SMCLK set out to pinsP2SEL |= BIT2;P7DIR |= BIT7;// MCLK set out to pinsP7SEL |= BIT7;P5SEL |= BIT2+BIT3;// Port select XT2UCSCTL6 &= ~XT2OFF;// Enable XT2UCSCTL3 |= SELREF_2;// FLLref = REFO// Since LFXT1 is not used,// sourcing FLL with LFXT1 can cause// XT1OFFG flag to setUCSCTL4 |= SELA_2;// ACLK=REFO,SMCLK=DCO,MCLK=DCO// Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settlesdo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG;// Clear fault flags}while (SFRIFG1&OFIFG);// Test oscillator fault flagUCSCTL6 &= ~XT2DRIVE0;// Decrease XT2 Drive according to// expected frequencyUCSCTL4 |= SELS_5 + SELM_5;// SMCLK=MCLK=XT2
}
void Init_TimerA(void)
{
P2DIR |= BIT0;
P2SEL |= BIT0;
nCount = 0;
TA1CCTL1 |= OUTMOD_7;
TA1CCTL0 = CCIE;// CCR0 interrupt enabled
TA1CCR0 = (256- 1);
TA1CTL |= TASSEL_2 + ID_1 + MC_1;
TA1CCR1 = nSinTable[nCount];
TA1CTL |= TACLR;
}
int main(void)
{WDTCTL = WDTPW + WDTHOLD;// Stop WDTInit_CLK();Init_TimerA();
// _EINT();__bis_SR_register(LPM0_bits + GIE);// Enter LPM0, enable interrupts__no_operation();// For debugger
}
// Timer0 A0 interrupt service routine
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
{
nCount += 1;
if(nCount >= 32)
{
nCount = 0;
}
TA1CCR1 = nSinTable[nCount];
}
}
灰小子:
定位一下,看看出错时nCount是多少。
user4740510:
回复 灰小子:
用示波器抓波形之后发现nCount[14]=10和nCount[15]=2时的波形被那一段高电平取代了,那段错误的高低电平共用时两个TA1CCR0,占空比接近50%,那段错误的高低电平前后是nCount[13]=22和nCount[16]=1,波形正常。
还有一个问题想请教您,TA1CCR0计满之后再TAIV中对应哪个中断向量
user4740510:
回复 灰小子:
用示波器抓波形之后发现nCount[14]=10和nCount[15]=2时的波形被那一段高电平取代了,那段错误的高低电平共用时两个TA1CCR0,占空比接近50%,那段错误的高低电平前后是nCount[13]=22和nCount[16]=1,波形正常。
还有一个问题想请教您,TA1CCR0计满之后再TAIV中对应哪个中断向量
user4740510:
回复 灰小子:
又分析了一下波形,发现nCount[15]=2时的波形没有问题,只有nCount[14]=10时的波形有问题,错误的波形高电平加低电平共两个PWM周期(TA1CCR0=256),占空比将近50%
灰小子:
回复 user4740510:
你这个程序是CCR1计数到CCR0,是TAxCCR1 CCIFG
TI中文支持网





