如果不按照如下設置,中斷將無法執行或者無法使下一個中斷進入。
/*中斷掛起設置,此過程加入到主函數中啟動時加載*/
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即可使用。其它設置部分不在此說明。
|