[求助] MSP430F5529设置TA1定时中断,每次走到打开中断总使能就会出错

多大点事er   2016-4-17 14:35 楼主
主要程序如下,想做个对每生成一个PWM波就计数的中断,单步调试的时候每次走到中断总使能的时候就会进入ISR_TRAP.ASM文件,然后就定在这里不再跑下去
int main(void) {

    WDTCTL = WDTPW | WDTHOLD;
    WDT_init();
    UCS_init();

    P2SEL |= BIT0;
    TA1_PWM_Init('S',1,'F',0);
    TA1_PWM_SetPeriod(Period2);
    TA1_PWM_SetPermill(1,Bright2);

    __bis_SR_register(GIE);
    __no_operation();

    TA1CTL &=~TAIFG;
    TA1CTL |=TAIE;
        }
  while(1);
}


#pragma vector = TIMER1_A1_VECTOR
__interrupt void Timer1_A1(void)
{
        switch(__even_in_range(TA1IV,14))
        {
        case 2: break;                               
        case 14:
                        t++;
                        if(t>100)
                                t=0;
                        PWM_MircoControl(t);
                        break;
        default:break;
        }
        TA1CTL &=~TAIFG;

}


每次单步到中断总使能再往下走就会到下面这段的倒数第二条语句,然后就不能动了,PWM波是能输出的

           .sect        ".text:_isr:__TI_ISR_TRAP"
        .align        2
        .global        __TI_ISR_TRAP
__TI_ISR_TRAP:
        BIS.W     #(0x0010),SR
        JMP __TI_ISR_TRAP



回复评论 (4)

楼主找到解决方法了吗
点赞  2016-4-29 17:04
引用: crjmail 发表于 2016-4-29 17:04
楼主找到解决方法了吗

额,是因为开了WDT的中断,但是没有WDT的中断服务函数,把WDT_Init注释掉就好了这类问题差不多都是这种原因
点赞  2016-4-30 10:38
引用: 多大点事er 发表于 2016-4-30 10:38
额,是因为开了WDT的中断,但是没有WDT的中断服务函数,把WDT_Init注释掉就好了这类问题差不多都是这种原 ...

什么意思?我也遇到这个问题了。还没找到解决的方法。
点赞  2016-5-3 09:28
引用: crjmail 发表于 2016-5-3 09:28
什么意思?我也遇到这个问题了。还没找到解决的方法。

就是开了某个中断,但是进入这个中断后,没有后续程序了。
比方说,要用WDT做个定时中断,对这个中断的设置,一个是要中断使能,即WDTIE要置位,其次是要有服务函数,即
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR()
{
……
}
这个函数要有,如果中断服务函数没写,那程序就会死在那个位置,因为程序在进入中断后,没地方去了
点赞 (1) 2016-5-3 12:45
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复