如果不按照如下设置,中断将无法执行或者无法使下一个中断进入。
/*中断挂起设置,此过程加入到主函数中启动时加载*/
void Eint_wait()
{
rSRCPND=rSRCPND; //中断挂起寄存器清除
rINTPND=rINTPND; //中断源挂起寄存器清除
rEINTPEND|=0x1<<13; //外部中断挂起寄存器,Eint挂起等待中断
rSRCPND=BIT_EINT8_23; //中断源挂起寄存器相应位置1等待中断
rINTPND=BIT_EINT8_23; //中断挂起寄存器相应位置1等待中断
}
/*中断挂起设置结束*/
/*以下为响应中断时的处理过程,为pISR指针中的函数*/
void __irq Eint_Isr(void)
{
if(rEINTPEND == (1<<13)) //判断Eint13有响应时执行如下
{
rGPBDAT=0x0<<6; //led6亮
delay(10000); //说明:由于使用边沿出发方式,故按钮按完后会完成边沿过程,完成后会立刻进入else处理过程中灭灯,肉眼可能无法看出来。为使其见到效果,需要让led亮一会儿!
rEINTPEND=(1<<13); //将中断挂起寄存器Eint13置1等待下一个中断到来,如果不设置下一个中断无法进入
}
else //当不为Eint13时,执行如下
{
rGPBDAT=0x1<<6;
rEINTPEND=(1<<13); //将中断挂起寄存器Eint13置1等待下一个中断到来,如果不设置下一个中断无法进入
}
}
以上两部分为简化了的中断处理过程中的重要内容,可根据输出引脚修改rGPBDAT和rEINTPEND即可使用。其它设置部分不在此说明。
|