我用TA0的计数模块1试图输出脉冲波,现在的问题是,程序似乎进入不了中断了,是我的中断向量写错了,还是因为没有正确的开中断呢?
我觉得溢出中断应该是会产生的啊
#include <msp430.h>
/*
* main.c
*/
int i;
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P8DIR |=BIT1;
P8OUT&=~BIT1;
TA0CTL|=MC_1+TASSEL_2+ID_0;//定时器TA0设置为增量计数模式,SMCLK为时钟,无分频
//TA0CCR0=62914-1;
TA0CCR0=512-1;
TA0CCR1=384;
TA0CTL|=TAIE; //允许TA0溢出中断
TA0CCTL1|=CCIE; //允许比较捕获模块1的中断
_EINT();
LPM0;
while(1){
}
return 0;
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void){
P8OUT|=BIT1;
//delay(1000);
for(i=0;i<65535;i++){
;
}
switch(TA0IV){
case 2:
//P7OUT &=~BIT3;
//POUT|=BIT0;
break;
case 10:
//P7OUT|=BIT3;
//P1OUT|=BIT0;
break;
}
}
Lina Lian:
sfesly sfesly ,
关于你的程序,有以下几个建议:
1. 试着用__bis_SR_register(LPM0_bits + GIE);代码代替_EINT(); LPM0;试试;
2. 请问你的CCR1是用作什么功能的?是想输出脉冲吗?如果是的话,需要设置TA0CCTL1寄存器中的OUTMOD形式。
3. 关于中断,CCR0单独享有一个中断向量TIMER0_A0_VECTOR,CCR2, CCR3……,共享另一个中断向量TIMER0_A1_VECTOR,可查看user guide和头文件。
4. 在初始化Timer时,最好clear 一下TAR.
下面是相关Timer0_A5, Toggle P1.0, CCR0 Up Mode ISR, DCO SMCLK的例子,你参考一下。
#include <msp430.h>
int main(void){ WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= 0x01; // P1.0 output TA0CCTL0 = CCIE; // CCR0 interrupt enabled TA0CCR0 = 50000; TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts __no_operation(); // For debugger}
// Timer0 A0 interrupt service routine#pragma vector=TIMER0_A0_VECTOR__interrupt void TIMER0_A0_ISR(void){ P1OUT ^= 0x01; // Toggle P1.0}
另外你可以参考一下附件中输出PWM的code example.
希望对你有帮助!O(∩_∩)O~
Lina Lian:
sfesly sfesly,
另外这个帖子是相关MSP430产品的,应该发至MSP430版块,可能会更多人回答。O(∩_∩)O~