|
又是中断问题!
之前有 xuanyu 和 lsdfae11 告知小弟中断嵌套,需要重新用_EINT()重新开启总中断。之后可以了。但是,最近我又写一个程序,同样用到中断嵌套。结果就大不一样了。下面是我的程序结构。
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
Inisys(); //初始化,包括各种端口中断、各种定时器中断、捕获比较中断等初始化等
while(1)
{
LPM3;
}
}
#pragma vector=PORT1_VECTOR
__interrupt void Port1()
{
if((P1IFG&BIT1)==BIT1)
{
启动捕获中断;
E_INT(); //开启总中断
……;
其他语句;
处理捕获中断处理返回的数据;
P1IFG &= ~BIT1;
}
}
#pragma vector=TIMERA1_VECTOR
__interrupt void TimerA1()
{
int i;
switch(__even_in_range(TAIV,10))
{
case 2:
if((CCTL1&CCI)==0)
{
中断处理程序;
break;
}
}
如果在端口1的中断程序中不加"_EINT();"语句,则捕获中断不会产生。但加了之后――我把“
_EINT();"语句加在开启捕获中断语句之后,没有问题吧――捕获中断的程序运行完之后,直接跳到主程序等待端口中断了。郁闷呀,为什么不是返回端口中断位置?
请求帮助!
|
|