技术文章: 基于ARM Cortex-A9中断详解
一、中断概念
操作系统中,中断是很重要的组成部分。出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
有了中断系统才可以不用一直轮询(polling)是否有事件发生,系统效率才得以提高。
一般在系统中,中断控制分为三个部分:「模块、中断控制器和处理器」。
其中模块通常由寄存器控制是否使能中断和中断触发条件等;中断控制器可以管理中断的优先级等,而处理器则由寄存器设置用来响应中断。
二、GIC
作为 ARM 系统中通用中断控制器的是 GIC(Generic Interrupt Controller),目前有四个版本,V1~V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64系统结构)。
【注意】对于一些老的ARM处理器,比如ARM11,Cortex-A8,中断控制器一般是VIC(向量中断控制器)。
1. GIC-400
下面以GIC-400为例,它更适合嵌入式系统,符合v2版本的GIC architecture specification。GIC-400通过AMBA(Advanced Microcontroller Bus Architecture)片上总线连接到一个或者多个ARM处理器上。
GIC中断控制器全局图
从上图可以看出, GIC 是联系外设中断和 CPU 的桥梁,也是各 CPU 之间中断互联的通道(也带有管理功能),它负责检测、管理、分发中断,可以做到:
使能或禁止中断;把中断分组到Group0还是Group1(Group0作为安全模式使用连接FIQ ,Group1 作为非安全模式使用,连接IRQ );多核系统中将中断分配到不同处理器上;设置电平触发还是边沿触发方式(不等于外设的触发方式);虚拟化扩展。
ARM CPU 对外的连接只有2 个中断:「IRQ和FIQ」 ,相对应的处理模式分别是一般中断(IRQ )处理模式和快速中断(FIQ )处理模式。所以GIC 最后要把中断汇集成2 条线,与CPU 对接。
GIC中断控制器结构
分发器:负责各个子中断使能,设置触发方式,优先级排序,分发到哪个 CPU 上;接口:负责总的中断的使能,状态的维护。
2. 分发器功能
分发器的主要的作用是检测各个中断源的状态,控制各个中断源的行为,分发各个中断源产生的中断事件到指定的一个或者多个CPU接口上。虽然分发器可以管理多个中断源,但是它总是把优先级最高的那个中断请求送往CPU接口。分发器对中断的控制包括:
(a)中断使能或禁能控制。分发器对中断的控制分成两个级别,一个是全局中断的控制(GIC_DIST_CTRL),一旦禁止了全局的中断,那么任何的中断源产生的中断事件都不会被传递到CPU接口;另外一个级别是对针对各个中断源进行控制(GIC_DIST_ENABLE_CLEAR),禁止某一个中断源会导致该中断事件不会分发到CPU接口,但不影响其他中断源产生中断事件的分发。(b)控制将当前优先级最高的中断事件分发到一个或者一组CPU接口。(c)优先级控制。(d)中断属性设定,例如是电平触发还是边沿触发。(e)中断的设定。
分发器可以管理若干个中断源,这些中断源用ID来标识,我们称之interrupt ID。
3. CPU接口功能
CPU接口主要用于和CPU进行接口。
主要功能包括:
(a)使能或者禁止CPU接口向连接的CPU提交中断事件。对于ARM,CPU接口和CPU之间的中断信号线是nIRQCPU和nFIQCPU。如果禁止了中断,那么即便是分发器分发了一个中断事件到CPU接口,但是也不会提交指定的nIRQ或者nFIQ通知CPU。(b)ackowledging中断。CPU会向CPU接口应答中断,中断一旦被应答,分发器就会把该中断的状态从pending状态修改成active,如果没有后续pending的中断,那么CPU 接口就会deassert nIRQCPU和nFIQCPU信号线。如果在这个过程中又产生了新的中断,那么分发器就会把该中断的状态从pending状态修改成pending and active。此时,CPU接口仍然会保持nIRQ或者nFIQ信号的asserted状态,也就是向CPU通知下一个中断。(c)中断处理完毕的通知。当中断处理器处理完了一个中断的时候,会向写CPU 接口的寄存器从而通知GIC已经处理完该中断。做这个动作一方面是通知分发器将中断状态修改为deactive,另外一方面,可以允许其他的pending的中断向CPU接口提交。(d)设定优先级掩码。通过优先级掩码可以mask掉一些优先级比较低的中断,这些中断不会通知到CPU。(e)设定中断抢占的策略。(f)在多个中断事件同时到来的时候,选择一个优先级最高的通知CPU。
key中断管理模块图
以上图为例,该图是按键产生的中断信号要到达cpu所要经过的路径。
外设中断源有很多,通常芯片厂商会设计若干个第一级中断控制器,进行第一次处理,key连接的是GPX1中断控制器,寄存器EXT_INT41_MASK用于使能该中断;GIC主要包括分排气和cpu interface;ICDISER用于使能分派器,ICDIPTR用于将中断信号分发给对应的cpu interface;ICCICR用于使能CPU interface;CPU上有两个引脚irq、fiq,gic最终会连接到CPU的irq,所有寄存器配置完毕后,按键一旦按下,那么就会给CPU的irq发送一个中断信号,cpu紧接着就会执行“4大步3小步”,进入中断异常处理流程。
图片新闻
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
11月29日立即预约>> 【上海线下】设计,易如反掌—Creo 11发布巡展
-
11月30日立即试用>> 【有奖试用】爱德克IDEC-九大王牌安全产品
-
即日-12.5立即观看>> 松下新能源中国布局:锂一次电池新品介绍
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论