您的位置 首页 培训

关于arm中的中止处理

中断处理的流程1.cpu内部的中断控制器收集外部各个中断,经过一个的处理以后在报给cpu2.然后cpu保存现场,调用中断服务程序(ISR)3.用ISR去…

中止处理的流程
1.cpu内部的中止控制器搜集外部各个中止,通过一个的处理今后在报给cpu
2.然后cpu保存现场,调用中止服务程序(ISR)
3.用ISR去辨认相应的中止,然后调用相应的中止处理程序
4.处理完今后就进行铲除中止
5.康复被中止的程序

这便是中止处理的流程,下面是对第一步的进程进行具体的介绍。
依据2440手册上的介绍,把这一部分用一副图进行描绘

request sources:中止请求源.
这儿的中止请求源被分成了2个不同的类型,一个是有子中止(with sub-register),一个是没有子中止的,从图中能够得知不同的类型在中止的处理进程也是不一样的。

1.with sub-register 的处理进程
SUBSRCPND
这个寄存器的每一位都对应着一个子中止源,假如呈现相应的中止,则会将相应的方位位为”1″,假如要铲除这个中止,则向相应方位”1″就能够(我也很不理解,不过手册上是这么写的)
SUBMASK
这个寄存器的效果是假如对应位是1则就屏蔽这个中止,假如是0的话就答应这个中止往上去
SRCPND
这个寄存器与SUBSRCPND这个寄存器的效果差不多,不过差异在所以SUBSRCPND是指示子中止,而SRCPND则是用来指示某一类的中止,能够说是一大类的。
MASK
这个也有寄存器的,便是INTMASK 这个寄存器的效果其实和SUMMASK的效果差不多,也是用来屏蔽SRCPND上报的几个中止,不过不一样的是,假如中止是FIQ的话是不行屏蔽的,RIQ是能够屏蔽的
MODE
这个寄存器是INTMODE,这个寄存器很简单的,他是用来对应SRCPND中的中止的,假如某一方位为”1“的话,那就阐明这个中止是FIQ的,那cpu就会当即进入FIQ形式的,不过这个通常是用在紧迫的中止的.从图中也能够看出来这个联系

Priority(优先级)
不行能每一次都只要一个中止会呈现,所以关于多中止出来的时分应该怎样处理….


这便是arm的中止裁定器
总共有7个裁定器,每一个裁定器都能够处理6个中止源(REQ0,REQ1,REQ2,REQ3,REQ4,REQ5)
那关于优先级又是怎样差异的?
Each arbiter can handle six interrupt requests based on the one bit arbiter mode control (ARB_MODE) and two
bits of selection control signals (ARB_SEL) as follows:
If ARB_SEL bits are 00b, the priority order is REQ0, REQ1, REQ2, REQ3, REQ4, and REQ5.
If ARB_SEL bits are 01b, the priority order is REQ0, REQ2, REQ3, REQ4, REQ1, and REQ5.
If ARB_SEL bits are 10b, the priority order is REQ0, REQ3, REQ4, REQ1, REQ2, and REQ5.
If ARB_SEL bits are 11b, the priority order is REQ0, REQ4, REQ1, REQ2, REQ3, and REQ5.
Note that REQ0 of an arbiter always has the highest priority, and REQ5 has the lowest one. In addition, by
changing the ARB_SEL bits, we can rotate the priority of REQ1 to REQ4.
Here, if ARB_MODE bit is set to 0, ARB_SEL bits doesn’t change automatically changed, making the arbiter to
operate in the fixed priority mode (note that even in this mode, we can reconfigure the priority by manually
changing the ARB_SEL bits). On the other hand, if ARB_MODE bit is 1, ARB_SEL bits are changed in rotation
fashion, e.g., if REQ1 is serviced, ARB_SEL bits are changed to 01b automatically so as to put REQ1 into the
lowest priority. The detailed rules of ARB_SEL change are as follows:
If REQ0 or REQ5 is serviced, ARB_SEL bits are not changed at all.
If REQ1 is serviced, ARB_SEL bits are changed to 01b.
If REQ2 is serviced, ARB_SEL bits are changed to 10b.
If REQ3 is serviced, ARB_SEL bits are changed to 11b.
If REQ4 is serviced, ARB_SEL bits are changed to 00b.

每一个裁定器能够处理6个中止请求,这些裁定器是根据1位的(ARB_MODE)和2位的(ARB_SEL)
假如ARB_SEL是00,那么优先级便是REQ0, REQ1, REQ2, REQ3, REQ4, and REQ5.
下面顺次类推
不过咱们发现REQ0 和REQ5是优先级最高和最低是不变的。
关键是ARB_MODE这个值是有什么用的,关于这个值的首要的效果是优先级是否会主动改变,假如ARB_MODE是0的话,那么这个优先级的不会主动改变的,优先级是你一开始自己要设定要的,假如是1的话,那么这个优先级是会主动改变的,这个改变是循环的,让ARB_SEL循环改变的
规矩:
假如是REQ0 或者是REQ5的话,那么ARB_SEL则不改变
假如是REQ1服务,那么ARB_SEL就会变成01,就这样顺次持续。关于这个在寄存器PRIORITY这个寄存器中设置。

INTPND 这个是通过来了中止优先级裁定器优先级选定过今后的中止,让这个寄存器是用来标识这个中止的,这样cpu就能够知道有什么中止了。不过这个寄存器很特别便是同一个时刻它只能一个位为1…

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部