您现在的位置: 主页 > MCU > 单片机技术应用 > 2440外部中断实验遇到问题与总结 -
本文所属标签:
为本文创立个标签吧:

2440外部中断实验遇到问题与总结 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]
外部中断实验遇到问题: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)外部中断控制寄存器不设置的话,默认是低电平触发。

 

 



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > 2440外部中断实验遇到问题与总结 -
 

"2440外部中断实验遇到问题与总结 -"的相关文章

网站地图

围观()