hehu8的笔记 https://bbs.21ic.com/?560500 [收藏] [复制] [RSS] 追求卓越,成功就会在不经意间追上你。。。

日志

ARM7中断嵌套的问题

已有 1122 次阅读2012-2-17 05:44 |系统分类:ARM| ARM7, 中断嵌套

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的值,总的一个中断服务函数执行结束。


 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)