您的位置 首页 基础

S3C2410中断寄存器

S3C2410有24个外部中断引脚:EINT0~EINT23,但是对于EINT0~EINT3这4个外部中断而言,使用比较简单;对于其它20个而言,使用稍稍复杂一些。…

S3C2410有24个外部中止引脚:EINT0~EINT23,可是关于EINT0~EINT3这4个外部中止而言,运用比较简单;关于其它20个而言,运用稍稍杂乱一些。

首要,来看S3C2410的中止控制器,有6个中止判决器分为2级,第1级5个, 第2级1个。第1级的5个判决器办理32个中止源,在这32个中止源中有2个是保存的,24个是给内部中止源的,而外部中止只给了6个中止:EINT0、 EINT1、EINT2、EINT3、EINT4~7、EINT8~23。EINT4~EINT7、EINT8~EINT23都是同享一个中止。

中止控制器中首要的相关寄存器有:INTMSK、SRCPND、PRIORITY、INTPND,还有一个INTMOD。可是关于外部中止还有几个寄存器:EXTINTn、EINTMSK、EINTPEND等。

关于外部中止EINT0~EINT3因为没有同享,因而外部寄存器中只需EXTINT0和它们有关,进行中止触发电平信号的设置。

可是关于其他的20个外部中止而言,一切上面说到的寄存器都有联系。实际上关于 EINT4~EINT23,实际上能够看作有3级屏蔽,第1级屏蔽是CPSR中的I-Bit和F-Bit,第2级屏蔽是EINTMASK([4:23]每 一位对应一个相应的外部中止),第3级屏蔽是INTMSK(Bit4、Bit5);关于EINT0~EINT3而言,仅仅INTMSK中的 Bit0~Bit3,因而在变成初始化时应该要特别留意。

在外部中止有中止请求时,因为EINT4~7、EINT8~23别离同享中止,因 此在SRCPND中别离对应Bit4、Bit5,终究导致INTPND中的相应方位1(在任何时间只能有一个方位1),可是怎么分辩这些同享的中止?能够 经过查询EINTPEND来进行(Bit4~Bit23别离对应1个外部中止)。因为在相应中止后在服务例程中应将挂起寄存器中相应的位清0来铲除未处理 状况,因而关于EINT4~7、EINT8~23这20个外部中止的铲除挂起寄存器的次序是:

1. EINTPEND(或许多位搭档为1),办法:向要清0的位写1,其它位写0,但要留意因为第4位保存,因而不要企图向第4位写1,或许会导致不行意料的成果。

2.SRCPND(或许多位一起为1),办法:向要清0的位写1,其它位写0。

3.INTPND,办法:向其写自身的数据(即INTPND=INTPND)。

下面详细介绍各个寄存器的功用:

SRCPND(Source Pending Register)寄存器有用位32位,可读写,每一位涉及到一个中止源,SRCPND是主中止源引脚寄存器,某个位被置1表明相应的中止被触发,但咱们知道在同一时间内体系能够触发若干个中止,只需中止被触发了,SRCPND的相应位便被置1,也就是说SRCPND 在同一时间能够有若干位一起被置1,别的,此寄存器不受中止控制器的优先权逻辑的影响。假设此中止没有被INTMSK寄存器屏蔽、或者是快中止(FIQ)的话,它将被进一步处理。经过写数据到这个寄存器能铲除SPCPND相应的位。

INTMODE(Interrupt Mode Register)寄存器有用位为32位,可读写,每一位与SRCPND中各位相对应,它的效果是指定该位相应的中止源处理形式(IRQ仍是FIQ)。若某位为0,则该位相对应的中止按IRQ形式处理,为1则以FIQ形式进行处理,该寄存器初始化值为0x00000000,即一切中止皆以IRQ形式进行处理。此中止控制器中只需一个中止源能用FIQ mode(在紧迫中止下运用FIQ mode),因而INTMODE仅有一位能置1。

INTMSK(Interrupt Mask Register)寄存器有用位为32位,可读写,INTMSK为主中止屏蔽寄存器与SRCPND寄存器对应,它的效果是决议该位相应的中止请求是否被处理。若某位被设置为1,则该位相对应的中止发生后将被疏忽(CPU不处理该中止请求),设置为0则CPU对其进行处理。该寄存器初始化值为0xFFFFFFFF,既默许状况下一切的中止都是被屏蔽的。

PRIORITY(IRQ PRIORITY Control Register)寄存器有32位,有用位[20:0],可读写,此寄存器的效果是假设有几个中止源一起触发,依照图2.2.1的流向,假设这几个中止源都没被屏蔽,而且都是IRQ形式,因而就要断定哪个中止源的优先级最高,使其在INTPND寄存器中对应方位1,CPU转向相应的中止服务程序,让中止服务程序来处理相应的中止请求。

INTPND(Interrupt Pending Register)寄存器有用位为32位,可读写,看起来和SRCPND寄存器相同,其实他们在功用上有着严重的差异。他在某一时间只能有1个位被置1,INTPND 某个位被置1(该位对应的中止在一切已触发的中止里具有最高优先级且该中止没有被屏蔽),则表明CPU行将或现已在对该位相应的中止进行处理。因而SRCPND寄存器阐明有什么中止被触发了,而INTPND寄存器阐明CPU行将或现已在对某一个中止进行处理。

INTOFFSET(Interrupt Offset Register)寄存器有用位为32位,只读,此寄存器的值显现IRQ mode的哪个中止请求在INTPND寄存器中,经过清SRCPND和INTPND这位能主动铲除,FIQ mode中止不会影响INTOFFSET寄存器,因而此寄存器仅对IRQ mode中止有用。

SUBSRCPND(Sub Source Pending Register)寄存器有32位,有用位[10:0],可读写,它们中的每一位别离代表一个中止源,SRCPND是主中止源引脚寄存器,它是副中止源引脚寄存器,状况相似SRCPND。 INTSUBMSK(Interrupt Sub Mask Register)寄存器有32位但有用位为11位,可读写,假设mask bit位是0,此中止请求被服务,状况相似INTMSK。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部