当前位置:首页 > 单片机 > 单片机
[导读] 外部中断实验遇到问题:1、程序下载到内存(SDROM)中不可运行,下载到nand flash中就可以。其他程序下载到内存中可以直接运行,不会出现上面问题。2、外部中断 Eint8_23(共用一个中断向量表),程序中同

 

外部中断实验遇到问题:

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)外部中断控制寄存器不设置的话,默认是低电平触发。

 

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭