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