看到资料上说430的多源中断(多个中断源共用一个中断向量),中断标志为不会自动复位,必须要软件复位,否则会再次中断,进入中断嵌套。
但是我之前用了定时器B的主计数器计数中断,并没有在中断里清零中断标志,一直也可以。这是什么原因呢?
请大家看下下面的代码:(注释20100806的是今天新加上去的)
/*===================================================================*/
//名称:TimerB初始化
//功能:定时器B0.1s产生一次中断,用于控制LED灯的闪烁频率
//参数:
//返回值:
//说明:
/*===================================================================*/
void init_TimerB(void)
{
//TBCLGRP CNTLx TBSSELx IDx MCx TBCLR TBIE
TBCTL = TBCLGRP_0 + 0 + TBSSEL_1 + ID_0 + MC_1 + 0 + 0;
TBCCR0 = 3276; //输0.1s产生一次中断
TBCTL |= TBIE; //开定时中断,用于改变TB2的周期和占空比。
}
/*===================================================================*/
//名称:TimerB中断1
//功能:用于控制LED灯的闪烁频率
//参数:
//返回值:
//说明:
/*===================================================================*/
#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B (void)
{
static unsigned int time_counter=0;
switch(TBIV)
{
case 14: //时钟溢出中断
{
LED2 ^= LED2_B;
TBCTL &= ~TBIFG; //20100806
//由于是多源中断,中断标志位需要软件清零
}break;
}
} |