This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5529中断的问题

我用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;
}
}

  • 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~

  • sfesly sfesly,

    另外这个帖子是相关MSP430产品的,应该发至MSP430版块,可能会更多人回答。O(∩_∩)O~