主要程序如下,想做个对每生成一个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
额,是因为开了WDT的中断,但是没有WDT的中断服务函数,把WDT_Init注释掉就好了这类问题差不多都是这种原因
什么意思?我也遇到这个问题了。还没找到解决的方法。
就是开了某个中断,但是进入这个中断后,没有后续程序了。
比方说,要用WDT做个定时中断,对这个中断的设置,一个是要中断使能,即WDTIE要置位,其次是要有服务函数,即
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR()
{
……
}
这个函数要有,如果中断服务函数没写,那程序就会死在那个位置,因为程序在进入中断后,没地方去了