了解什么是ARM中断的基本过程,以及ARM中断的代码分析

作者: 佚名   发布日期:2008-03-16 09:19   查看数:0   出自:互联网
了解什么是ARM中断的基本过程,以及ARM中断的代码分析
问题:
 

void ext_IRQ0_handler(void)&nbsp__attribute__ ((interrupt ("IRQ")));

//*----------------------------------------------------------------------------
//*Function&nbspName :&nbspext_IRQ0_handler
//*Object :&nbspIrq&nbspHandler&nbspcalled&nbspby&nbspthe&nbspIRQ0&nbspinterrupt
//*Input&nbspParameters :&nbspnone
//*Output&nbspParameters :&nbspnone
//*Functions&nbspcalled :&nbspat91_pio_read,&nbspat91_pio_write
//*----------------------------------------------------------------------------
voidext_IRQ0_handler(void)
{
//*read&nbspthe&nbspouput&nbspstate
if ( (at91_pio_read ( &PIO_DESC) &&nbspLED2 ) ==&nbspLED2 )
{
at91_pio_write ( &PIO_DESC,&nbspLED2,&nbspPIO_CLEAR_OUT );
}
else
{
&nbspat91_pio_write ( &PIO_DESC,&nbspLED2,&nbspPIO_SET_OUT );
}
//*Mark&nbspthe&nbspEnd&nbspof&nbspInterrupt&nbspon&nbspthe&nbspAIC
AIC_EOICR =&nbsp0;
}

我在主函数中设定IRQ0为上升沿触发,是不是在IRQ0脚给个上升沿它就进入中断啊???
还需不需要写汇编代码注册中断吗??
能给我讲讲ARM中断吗??

回答: ARM中断的基本过程,什么是ARM中断的基本过程
在IRQ0脚给个上升沿后,过程是这样的(比较通用的过程)。
1)如果你没有打开该中断的使能寄存器,没有任何反应。
2)如果你打开了使能寄存器,但在对应的屏蔽寄存器中屏蔽了该中断,也没有任何反应。
3)上述两个寄存器都设置正确了,中断产生了,CPU保存当前程序运行环境,跳到中断入口,ARM芯片一般是&nbsp0x?地址处。
4)如果你没有设置中断向量,即0x?处不是你的代码,程序就会飞掉,当然也可能正常运行,这种情况一般发生在正好飞到正常代码处。
5)设置好中断向量了,中断向量一般是个跳转语句,跳到你的正式的中断处理过程,在这里你可以关闭所有中断,清中断,处理等等,然后退出。记住某些处理器一定要清中断,否则下次再给个上升沿就没有反应了。
相关文章(最新&最热)