dear TI‘s fellows:
我正学习430TimerA,我现在想通过timerA 产生两路pwm波形。
1.当我没使用中断时,通过示波器观察到预期的波形,这没问题;
2.问题在于我想使用中断,我的思路是:通过中断服务程序分别改变CCR1,CCR2的值,这样就能很灵活的改变pwm的占空比等参数,但为何我在示波器上什么也看不到,连基本波形都没有;求解答
#include <msp430g2452.h>
unsigned char test1=0;
unsigned char test2=0;
unsigned char test=0;
int main()
{
//wdt
WDTCTL = WDTPW +WDTHOLD;//SHUTDOWN WDT
//basic clock system
DCOCTL = CALDCO_8MHZ;// calibration DCO ,8MHZ,(10FC)
BCSCTL1 = CALBC1_8MHZ;// calibration bcs, 8MHZ,(10FD)
//DISABLE INT
_DINT();
//P1.2,P1.4 FUNCTION
P1DIR |= BIT2 + BIT4;//P1.2,P1.4output
P1SEL |= BIT2 + BIT4;//TA1, TA2 function options
P1SEL2 |= BIT4;//DATASHEET :TA1(1,0),TA2(1,1)
//TIMER A
TA0CTL = TASSEL_2 + ID_3 + MC_1; // SMCLK,8DIV->1MHZ, UP MODE
CCR0 = 50000;//50ms;
TA0CCTL1 = OUTMOD_4 ;// mode 4: TOGGLE
CCR1 = 1000;//1000us
TA0CCTL2 =OUTMOD_4; // MODE 4: TOGGLE
CCR2 = 10000;//10ms
TA0CCTL1 &= ~CCIFG;
TA0CCTL2 &= ~CCIFG;
TA0CCTL1 |= CCIE;
TA0CCTL2 |= CCIE;
//ENABLE INT
_EINT();
while(1)
{
;
}
}
#pragma vector =TIMER0_A1_VECTOR // 0xFFF0
__interrupt void TMR0_A1_INT(void)
{
switch(TAIV)
{
case 02 : //CCR1 INT
TA0CCTL1 &= ~CCIFG;
CCR1 += 1000; /1000us 此处为P1.2的半周期
break;
case 04 : //CCR2 INT
TA0CCTL2 &= ~CCIFG;
CCR2 += 10000; //10ms 此处为P1.4的半周期
break;
}