我想用TACCR0和TACCR1中断来实现产生一个时间脉冲,编译能通过,但是无法产生相应的波形,单步调试着看发现经过几次正常进入中断后,出现各异常问题,始终无法再进入中断,状态寄存器中的SCG0、SCG1自动置1,不知道什么原因,跪求高手指教。
代码如下:
#include "msp430x22x4.h"
// MSP430F2274
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->波形
int main( void )
{ WDTCTL=WDTPW+WDTHOLD; //关看门狗 BCSCTL1 =CALBC1_12MHZ; //设定DCO为12MHZ DCOCTL =CALDCO_12MHZ; BCSCTL2 |= DIVS_2; //SMLK 4分频 频率为3MHz P1DIR |=BIT0; //LED使能 TACTL=TASSEL_2+TACLR; //定时器A时钟源为SMCLK,并清TAR TACCTL0 |=CCIE; //TACCR0中断使能 TACCR0 =60000; //计数值为60000个SMCLK周期 即20ms的PPM总信号周期 TACCR1=1500; //间隔信号为0.5ms 的高电平 TACTL |=MC_1; //动定时器A为单增模式 _BIS_SR(GIE+CPUOFF); return 0;
}
#pragma vector = TIMERA0_VECTOR //TACCR0中断服务
__interrupt void ta0_isr(void)
{ TACCTL1 |=CCIE; //TACCR1中断使能 //TACTL |=TACLR; //TAR清零 //TACCR1=TAR+1500; //间隔高电平信号0.5ms P1OUT |=BIT0; //拉高电平
}
#pragma vector = TIMERA1_VECTOR //TACCR1中断服务
__interrupt void ta1_isr(void)
{ switch( TAIV ) { case 2: P1OUT &=~BIT0; //拉低电平 TACCTL1 &=~CCIE; //TACCR1中断关闭 break; case 4: // CCR2 break; case 10: // TAR break; }
}
另外,说明一下,我是想利用msp430实现产生六通道PPM总信号,这只是第一步工作,由于初学msp430,估计这段程序忽视了某些东西,如果有高人写过类似程序,跪求啊!!! |