您的位置 首页 电源

ARM中止处理剖析

中断是CPU提供的一个基本的功能;中断的基本含义应该是允许CPU在执行某个代码序列的过程中停下来执行另外一个代码序列,这里有两层意思,一…

中止是CPU供给的一个根本的功用;

中止的根本意义应该是答应CPU在履行某个代码序列的进程中停下来履行别的一个代码序列,这儿有两层意思,一个是要切换到另一个场景,另一个是当履行结束之后有必要能够康复本来的场景。

首要评论怎么才干切换到一个新的场景,

当一条指令的履行完之后,CPU会查看有没有中止产生,假如有就halt当时流水线。重载PC寄存器后重新启动流水线。

ARM7一般为3级流水线价格,别离是取指、译码和履行。PC寄存器中寄存的是当时时间(CPU机器时钟周期)取指操作的方针地址,即CPU行将履行的指令的地址由PC寄存器指定,正常状况下PC指针的内容是CPU主动调整的——每个时钟周期主动+4,在产生跳转时,能够经过直接履行修正PC值的指令来完结。中止的实质便是一次跳转,跟函数调用其实没有什么别离(只不过增加了一些硬件支撑),所以这儿第一步是将PC值写成对应的中止进口地址,比方IRQ便是0x18.

接下来还需求切换ARM的内核形式到相应的中止形式。写完PC值今后,下一个时钟周期流水线就开端从0x18处取指,然后译码、履行。中止进口地址处寄存的是中止向量表,所谓中止向量便是另一个跳转指令,比方LDR PC, [PC,#24] ,履行完这个跳转之后理论上CPU就现已从一个新的地址开端履行了。这个进程的完结是软硬件结合的成果,硬件担任第一次加载PC,而软件担任再次修正PC值,将程序指向指定的代码序列。

还有必要考虑怎么康康复履行场景,这儿跟方才相同,一部分作业由硬件完结,另一部分有必要由软件担任完结。由于第一次修正PC到中止进口地址是硬件完结的,所以第一次保存中止现场的作业也只能由硬件完结,这个作业包含将PC被修正前的值保存到LR_irq寄存器中,并将当时PSR寄存器的值保存到SPSR_irq中。为了完结中止嵌套,或许硬件还需求将当时中止信息压栈(硬件栈,而不是内存)以便利嵌套产生时用于康复。

当程序履行到ISR后,硬件的作业根本完结,软件代码将在当时CPU形式下运转,这或许会修正LR和PSR等寄存器,所以在履行中止处理代码之前需求对这两个寄存器进行维护,不然一旦被损坏今后就无法康复。这儿相同需求维护的还包含作业寄存器等。

软件的责任还包含清掉设备中止标志。

最终,当ISR结束时,软件担任将CPU康复到中止前的状况,然后使用已保存的LR地址跳转到中止时履行代码的下一行代码开端持续履行。

当涉及到中止嵌套的状况时,重复上述进程,仅仅硬件此刻不需求在改动CPU的作业形式。

当涉及到有操作系统的时分,这个进程会变得略微杂乱一些。

首要在进入中止之前OS需求记载当时中止嵌套的层数,并且在中止退出之后康复到被中止上下文之前做一次判别,由于中止程序或许改动当时安排妥当态优先级最高的使命,假如此刻优先级最高的使命不再是从前被中止的使命时,得到康复并持续履行的将是该当时优先级最高的安排妥当态的使命。

这儿只要在中止嵌套层数为0时OS才会供给这样一次时机,不然将康复到被中止的ISR中持续履行中止处理程序。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/274896.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部