2440外部中斷實驗遇到問題與總結
外部中斷實驗遇到問題:
1、程序下載到內存(SDROM)中不可運行,下載到nand flash中就可以。
其他程序下載到內存中可以直接運行,不會出現上面問題。
2、外部中斷 Eint8_23(共用一個中斷向量表),程序中同時設置好幾個中斷,每個中斷服務函數執(zhí)行不同內容,但是每個外部中斷的相應卻只有一個。
void __irq Eint8_Isr(void)
{
Led1_On();//Delay_Ms(1000);Led1_Off();
rSRCPND |= (1<<5);//先清除rSRCPND
rINTPND |= (1<<5);//清除EINT8_23中斷標志位
rEINTPEND |= (1<<8);//清除EINT8中斷標志位
}
void __irq Eint11_Isr(void)
{
Led2_On();Delay_Ms(1000);Led2_Off();
rSRCPND |= (1<<5);//先清除rSRCPND
rINTPND |= (1<<5);//清除EINT8_23中斷標志位
rEINTPEND |= (1<<11);//清除EINT9中斷標志位
}
以上是兩個中斷服務函數。
如果中斷服務函數入口地址這樣寫的話,兩個中斷的執(zhí)行的結果是Led1_On
void Isr_Init(void)//中斷服務入口函數(傳遞中斷向量表)
{
pISR_EINT8_23 = (U32)Eint11_Isr;
pISR_EINT8_23 = (U32)Eint8_Isr;
}
如果中斷服務函數入口地址這樣寫的話,兩個中斷的執(zhí)行結果是Led2_On
void Isr_Init(void)//中斷服務入口函數(傳遞中斷向量表)
{
pISR_EINT8_23 = (U32)Eint8_Isr;
pISR_EINT8_23 = (U32)Eint11_Isr;
}
總結:
1、每個中斷服務函數執(zhí)行完需要清除中斷標志位。
先清除寄存器SRCPND,然后清除寄存器INTPND中斷標志位,最后清除寄存器EINTPEND具體的外部中斷標志位。
2、EXTINTn (External Interrupt Control Register)外部中斷控制寄存器不設置的話,默認是低電平觸發(fā)。