原创 ARM中断的基本过程

2007-5-16 14:43 2550 4 4 分类: MCU/ 嵌入式
问题:void ext_IRQ0_handler(void) __attribute__ ((interrupt ("IRQ")));  

//*----------------------------------------------------------------------------  
//* Function Name        : ext_IRQ0_handler  
//* Object                : Irq Handler called by the IRQ0 interrupt  
//* Input Parameters    : none  
//* Output Parameters   : none  
//* Functions called    : at91_pio_read, at91_pio_write  
//*----------------------------------------------------------------------------  
void ext_IRQ0_handler(void)  
{  
    //* read the ouput state  
    if ( (at91_pio_read ( &PIO_DESC) & LED2 ) == LED2 )  
    {  
         at91_pio_write ( &PIO_DESC, LED2, PIO_CLEAR_OUT );  
    }  
    else  
    {  
          at91_pio_write ( &PIO_DESC, LED2, PIO_SET_OUT );  
    }  
    //* Mark the End of Interrupt on the AIC  
    AIC_EOICR = 0;  
}   
我在主函数中设定IRQ0为上升沿触发,是不是在IRQ0脚给个上升沿它就进入中断啊??? 
还需不需要写汇编代码注册中断吗?? 
能给我讲讲中断吗??


 


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

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条