2440外部中断实验遇到问题与总结 -
[导读]
外部中断实验遇到问题:1、程序下载到内存(SDROM)中不可运行,下载到nand flash中就可以。其他程序下载到内存中可以直接运行,不会出现上面问题。2、外部中断 Eint8_23(共用一个中断向量表),程序中同
本文引用地址: http://www.21ic.com/app/mcu/201804/765856.htm
外部中断实验遇到问题:
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)外部中断控制寄存器不设置的话,默认是低电平触发。
查看评论 回复
"2440外部中断实验遇到问题与总结 -"的相关文章
- 上一篇:AVR单片机的相关总结 -
- 下一篇:ATmega16 熔丝位设定 -