||
ARM的中断管理体系和51系列微控制器的中断管理体系不太一样。熟悉51体系结构的用户需要特别
注意这一点。ARM的中断不会自动嵌套,实现ARM微控制器的中断嵌套比较烦琐,我们不提倡中断
嵌套。但不排除需要嵌套的应用,因而在启动代码中,有对中断嵌套的处理。模板中的文件IRQ.S
用于处理中断嵌套,是以下中断处理方法的依据。用户要根据自己的应用更改此文件,只需要在文
件末尾添加中断处理程序的句柄即可。
中断嵌套的原则:低优先级的中断嵌套高优先级的中断。
可嵌套中断服务程序编写方法:
1、保存当前中断使能寄存器VICIntEnable的值;
2、禁止当前中断和低优先级中断;
3、清除中断逻辑,使VIC能够响应更高优先级的中断;
4、中断处理服务程序;
5、恢复保存的中断使能寄存器的值。
声明需要嵌套的中断服务程序时,不能使用"__irq"关键字,而需要通过句柄的方式进行。
请注意IRQ.S中宏$IRQ_Label HANDLER $IRQ_Exception_的用法。
一般来说,ARM7并不支持硬件中断嵌套,如果真要嵌套,就必须采用软件嵌套,这就要涉及的底层汇编程序的编写的。总的中断嵌套的过程如下:
当发生IRQ中断。就会进入IRQ模式,而此时IRQ中断是被禁能的,PC就会跳转到中断向量表来查找该IRQ中断的入口地址来执行总的中断服务函数。而此时,我们可以对当前的任务环境、SPSR、链接寄存器进行压栈保存,然后系统切换为处理器模式,执行与中断相关的服务函数,此时IRQ中断自然被使能,同样在执行该相关程序也会被其他中断给打断,而当中断服务函数执行结束时,又进入IRQ模式,弹出进入时各个任务环境及SPSR的值,总的一个中断服务函数执行结束。