micro2440 中断大全
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.中断分两大类:内部中断和外部中断。
2.外部中断。
24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG 15(EINT8-EINT23)。
用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。
具体参考datesheet数据手册。
寄存器:EXTINT0-EXTINT2:三个寄存器设定EINT0-EINT23的触发方式。
EINTFLT0-EINTFLT3:控制滤波时钟和滤波宽度。
EINTPEND:这个是中断挂起寄存器,清除时要写1,后面还有几个是写1清除。
当一个外部中断(EINT4-EINT23)发生后,那么相应的位会被置1。
为什么没有EINT0-EINT3,呵呵,看看SRCPND就知道了,里面没有EINT4-EINT23的位子,所以有了EINTPEND。
EINTMASK:这个简单,是屏蔽中断用的,也就是说位为1时,此次中断无效。
3.内部中断。
内部中断有8个寄存器,下面逐一来看。
寄存器:SUBSRCPND:当一个中断发生后,那么相应的位会被置1,表示一个中断发生了。
INTSUBMSK:与上一个是一伙的,中断屏蔽寄存器,具体屏蔽什么,自己看手册去吧。
INTMOD:中断的方式。
一个中断可以是普通中断,也可以是快中断,在这里设置,但只能有一个快中断。
PRIORITY :优先级寄存器,不说了。
SRCPND:当一个中断发生后,那么相应的位会被置1,表示一个或一类中断发生了。
INTMSK:中断屏蔽寄存器。
INTPND :中断发生后,SRCPND中会有位置1,可能好几个(因为同时可能发生几个中断),这些中断会由优先级仲裁器选出一个最紧迫的,然后吧把INTPND中相应位置1,所以同一时间只有一位是1。
也就是说前面的寄存器置1 是表示发生了,只有INTPND置1,CPU才会处理。
INTOFFSET:用来表示INTPND中哪一位置1了,好让你查询,普通中断跳转时查询用。
清除INTPND、SRCPND时自动清除。
4.各寄存器关系:
下面看图说明:
5.中断过程。
a 如果是不带子中断的内部中断:发生后SRCPND相应位置1,如果没有被INT MSK屏蔽,那么等待进一步处理。
b 如果是带子中断的内部中断:发生后SUBSRCPND相应位置1,如果没有被I NTSUBMSK屏蔽,那么SRCPND相应位置1,等待进一步处理,几个SUBSRCPN D可能对应同一个SRCPND,对应表如下:
SRCPND SUBSRCPND
INT_UART0 INT_RXD0,INT_TXD0,INT_ERR0
INT_UART1 INT_RXD1,INT_TXD1,INT_ERR1
INT_UART2 INT_RXD2,INT_TXD2,INT_ERR2
INT_ADC INT_ADC_S, INT_TC
INT_CAM INT_CAM_C, INT_CAM_P
INT_WDT_AC97 INT_WDT, INT_AC97
c 如果是外部中断:EINT0-EINT3发生后SRCPND相应位置1,如果没有被I NTMSK屏蔽,那么等待进一步处理。
EINT4-EINT23发生后EINTPEND相应位置1,如果没有被EINTMASK屏蔽,那么SRCPND相应位EINT4-7 或EINT8-23置1,如果没有被INTMSK屏蔽,等待进一步处理,几个EINTPEND对应同一个SRCPND,对应表如下:
SRCPND EINTPEND
EINT0 EINT0
EINT1 EINT1
EINT2 EINT2
EINT3 EINT3
EINT4-7 EINT4-EINT4
EINT8-23 EINT8-EINT23
三种中断都等待进一步处理了。
接下来从SRCPND往下看,看INTMSK。
如果中断被屏蔽了,就不用说了(注意:快中断也能被屏蔽)。
如果没有被屏蔽,那么会进一步到INTMOD。
如果是快中断,那么直接出来,进入FIQ(即CPU进入快中断模式处理)。
如果是普通中断,那么SRCPND可以有多为置1(FIQ只能有一个),这时就会经过PRIORITY选出一个优先级高的,然后把根据选出的中断把INTPND相应位置1(注意:只能选出一个),进入IRQ,让CPU处理。
6.中断的开启。
a.如果是不带子中断的内部中断,只需设置INTMSK,让它不屏蔽中断就可以了。
b 如果是带子中断的内部中断,需设置INTSUBMSK和INTMSK,让它门不屏蔽中断就可以了。
c 如果是外部中断,对于EINT8-23需要设置EINTMASK和INTMSK。
对于EI NT0-EINT3只需设置INTMSK。
7.中断的清除。
a.如果是不带子中断的内部中断,只需清除SRCPND,注意清除需位置1。
b 如果是带子中断的内部中断,需清除SRCPND和SUBSRCPND,注意先清除S UBSRCPND,再清除SRCPND。
因为,如果你先清除SRCPND的话,然后在清除SUBSRCPND的过程中,SRCPND会以为又有中断发生,又会置1。
也就是说一次中断会响应两次。
所以必须先掐断源头。
c 如果是外部中断,对于EINT8-23需要清除EINTPEND和SRCPND(同样注意顺序)。
对于EINT0-EINT3只需清除SRCPND。
本文详细分析了S3C2440的中断寄存器,对arm初学者有一定的帮助。
硬件篇:
S3C2440 是arm920T架构,先温习一下s3c2440中的中断控制器原理和相关硬件构架。
中断控制器(InterruptControler):
S3c2440A的中断控制器有60个中断源,如DMA中断,UART中断,IIC中断等,60个中断源在寄存器中用相应的位来表示。
当有多个中断要求到来时,经过仲裁过程后,中断控制器向CPU请求FIQ或者IRQ中断。
仲裁过程根据硬件中的优先级模块来决定,其结果最后写进中断未决(intterrupt pending)寄存器中,通过中断未决寄存器的值可以清楚哪个中断发生了。
S3c2440中断控制器流程图:
挂起
中断模式(InterruptMode):
ARM920T(CPU)中有两类中断模式:FIQ中断和IRQ中断,前者俗称快中断,后者称为普通中断。
所有中断源均可以指定采取何种中断模式。
程序状态寄存器(PSR)有F和I 标志位,当F 位置1 时,CPU不接受FIQ中断,同样,I位置1 时CPU不接受IRQ中断。
所以中断控制器需清零F位和I位,且将中断屏蔽寄存器(INTMSK)清零后,方可接收中断。
中断未决寄存器(InterruptPending Register)
S3C2440A有两个中断未决寄存器:中断源未决寄存器(SRCPND) 和中断未决寄存器(INTPND)。
这两个寄存器指明了是否有中断未决(产生)。
当中断源(一个或者多个同时发生)要求进行中断服务程序时,SRCPND寄存器中相应的位置1,同时自动地,在INTPND寄存器中只有1 位被置1(因为从上图中可以看出INTPND是经过仲裁过程之后的,所以根据优先级决定最高优先级的中断被置1)。
如果INTMSK中相应的中断置1,那么,SRCPND中相应位将被置1,而INTPND不会有变化。
当INTPND置位时,无论何时,只要I 或标志位为0,那么即可执行中断服务程序。
SRCPND 和INTPND 寄存器可读
可写,所以中断服务程序执行完后应当先写相应位的1到SRCPND寄存器,然后写相应位的1 到INTPND寄存器完成清零,以便CPU能响应下一次中断的发生。
中断屏蔽寄存器(InterruptMask Register)
中断屏蔽寄存器INTMSK用来指示中断是否并禁止(屏蔽)。
如果相应位置1 标明该中断源被屏蔽,置0 则中断可以正常服务。
如果某一中断MASK 为1且中断发生,SRCPND 中相应位会置1.
中断优先级模块(InterruptPrioprity Generating Block)
该模块可以服务32个中断要求,共由两级仲裁单元组成。
第一级有6个arbiter0 ~ 5,第二级为arbiter 6, 每个arbiter里的中断的优先级采取轮换机制改变优先级。
每个仲裁arbiter处理6个中断要求,规则由优先寄存器(PRIORTY)中相应的ARB_MODE (1位)和ARB_SEL(2位)来决定。
仲裁arbiter中REQ0总是最高优先级的,而REQ5总是最低的。
所以只能在REQ1~REQ4中设定优先级:
ARB_SEL位为00b时,优先级:REQ0,REQ1,REQ2,REQ3,REQ4,REQ5
ARB_SEL位为01b时,优先级:REQ0,REQ2,REQ3,REQ4,REQ1,REQ5
ARB_SEL位为10b时,优先级:REQ0,REQ3,REQ4,REQ1,REQ2,REQ5
ARB_SEL位为11b时,优先级:REQ0,REQ4,REQ1,REQ2,REQ3,REQ3
所谓优先级采用轮换机制,举例说是,例如REQ1发生时,这时ARB_SEL自动变成01b,所以,之后的优先级将为:REQ0,REQ2,REQ3,REQ3,REQ1,REQ5,可见,当某一中断发生后(REQ1~REQ4),它的优先级将放到最低(在REQ5前),不断轮回,同理REQ2发生时,ARB_SEL自动变成10b,之后的优先级将为:REQ0,REQ3,REQ4,REQ1,REQ2,REQ5。
但REQ0,或者REQ5发生时,ARB_SEL将维持不变。
以上是在相应地ARB_MODE为1的时候。
当ARB_MODE被置0的时候,将按照默认的模式也就是上图中所示。
关于外部中断:
s3c2440有24个GPIO输入触外部中断,可分为低电平触发,高电平触发,下降沿触发,上升沿触发,或者下降,上升时触发模式。
通过以上,s3c2440的中断控制器原理,硬件构架分析完了。
后面再来分析,ARM-Linux s3c2440之中断分析的软件实现原理。