2440外部中断实验遇到问题与总结
扫描二维码
随时随地手机看文章
外部中断实验遇到问题:
1、程序下载到内存(SDROM)中不可运行,下载到nand flash中就可以。
其他程序下载到内存中可以直接运行,不会出现上面问题。
2、外部中断 Eint8_23(共用一个中断向量表),程序中同时设置好几个中断,每个中断服务函数执行不同内容,但是每个外部中断的相应却只有一个。
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中断标志位
}
以上是两个中断服务函数。
如果中断服务函数入口地址这样写的话,两个中断的执行的结果是Led1_On
void Isr_Init(void)//中断服务入口函数(传递中断向量表)
{
pISR_EINT8_23 = (U32)Eint11_Isr;
pISR_EINT8_23 = (U32)Eint8_Isr;
}
如果中断服务函数入口地址这样写的话,两个中断的执行结果是Led2_On
void Isr_Init(void)//中断服务入口函数(传递中断向量表)
{
pISR_EINT8_23 = (U32)Eint8_Isr;
pISR_EINT8_23 = (U32)Eint11_Isr;
}
总结:
1、每个中断服务函数执行完需要清除中断标志位。
先清除寄存器SRCPND,然后清除寄存器INTPND中断标志位,最后清除寄存器EINTPEND具体的外部中断标志位。
2、EXTINTn (External Interrupt Control Register)外部中断控制寄存器不设置的话,默认是低电平触发。