6.3 中断控制器
6.3.1 S3C2410A的中断
S3C2410A的中断控制器可以接受多达56个中断源(对S3C2440来说,则增加到60个)的中断请求.S3C2410A的中断源可以由片内外设提供,比如DMA、UART、IIC等,其中UARTn中断和EINTn中断是逻辑或的关系,它们共用一条中断请求线.
S3C2410A的中断源也可以由处理器的外部中断输入引脚提供,这部分中断源如下所示(11个):
INT_ADC ADC转换中断
INT_TC 触摸屏中断
INT_ERR2 UART2收发错误中断
INT_TXD2 UART2发送中断
INT_RXD2 UART2接收中断
INT_ERR1 UART1收发错误中断
INT_TXD1 UART1发送中断
INT_RXD1 UART1接收中断
INT_ERR0 UART0收发错误中断
INT_TXD0 UART0发送中断
INT_RXD0 UART0接收中断
当S3C2410A收到来自片内外设和外部中断请求引脚的多个中断请求时,S3C2410A的中断控制器在中断仲裁过程后向S3C2410A内核请求FIQ或IRQ中断.中断仲裁过程依靠处理器的硬件优先级逻辑,处理器在仲裁过程结束后将仲裁结果记录到INTPND寄存器,以告知用户中断由哪个中断源产生.S3C2410A的中断控制器的处理过程如图6-14所示.
图6-14 S3C2410A的中断控制器(Interrupt Controller Logic)
S3C2410A的中断控制器的任务是在有多个中断发生时,选择其中一个中断通过IRQ或FIQ向CPU内核发出中断请求.
实际上最初CPU内核只有FIQ(快速中断请求)和IRQ(通用中断请求)两种中断,其他中断都是各个芯片厂家在设计芯片时,通过加入一个中断控制器来扩展定义的,这些中断根据中断的优先级高低来进行处理,更符合实际应用系统中要求提供多个中断源的要求.例如,如果你定义所有的中断源为IRQ中断(通过中断模式寄存器设置),并且同时有10个中断发出请求,这时可以通过读中断优先级寄存器来确定哪一个中断将被优先执行.
S3C2410A的中断处理流程:当有中断源请求中断时,中断控制器处理中断请求,并根据处理结果向CPU内核发出IRQ请求或FIQ请求,同时,CPU的程序指针PC将指向IRQ异常入口(0x18)或FIQ异常入口(0x1C),程序从IRQ异常入口(0x18)或FIQ异常入口(0x1C)开始执行.
6.3.2 中断优先级判决
中断优先级判决逻辑由6个一级仲裁逻辑和1个二级仲裁逻辑组成,如图6-15所示.
图6-15 中断优先级判决逻辑
6.3.3 S3C2410A的中断控制
(1)程序状态寄存器的F位和I位.
如果CPSR程序状态寄存器的F位被设置为1,那么CPU将不接受来自中断控制器的FIQ(快速中断请求),如果CPSR程序状态寄存器的I位被设置为1,那么CPU将不接受来自中断控制器的IRQ(中断请求).因此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄存器的F位和I位清零,并且中断屏蔽寄存器INTMSK中相应的位也要清零.
(2)中断模式(INTMOD).
ARM920T提供了两种中断模式:FIQ模式和IRQ模式.所有中断源在中断请求时都要确定使用哪一种中断模式.
6.3.4 S3C2410A的中断源
表6-30 S3C2410A的中断源
续表
在56个中断源中,有30个中断源提供给中断控制器,其中外部中断EINT4/5/6/7通过逻辑“或”的形式提供给中断控制器,EINT8-EINT23也通过逻辑“或”的形式提供给中断控制器.
6.3.5 S3C2410A的中断控制寄存器
S3C2410A的中断控制器有5个控制寄存器:源挂起寄存器(SRCPND)、中断模式寄存器(INTMOD)、中断屏蔽寄存器(INTMSK)、中断优先权寄存器(PRIORITY)、中断挂起寄存器(INTPND).
中断源发出的中断请求首先被寄存在中断源挂起寄存器(SRCPND)中,INTMOD把中断请求分为两组:快速中断请求(FIQ)和中断请求(IRQ),PRIORITY处理中断的优先级.
S3C2410A有两个中断挂起寄存器:源中断挂起寄存器(SRCPND)和中断挂起寄存器(INTPND),用于指示对应的中断是否被激活.当中断源请求中断的时候,SRCPND寄存器的相应位被置1,同时INTPND寄存器中也有唯一的一位在仲裁程序后被自动置1,如果屏蔽位被设置为1,相应的SRCPND位会被置1,但是INTPND寄存器不会有变化,如果INTPND被置位,只要标志I或标志F一被清零,就会执行相应的中断服务程序.在中断服务子程序中要先向SRCPND中的相应位写1来清除源挂起状态,再用同样的方法来清除INTPND的相应位的挂起状态.
可以通过INTPND=INTPND来实现清零,以避免写入不正确的数据引起错误.
(1)源挂起寄存器(SRCPND).
中断控制寄存器INTCON共有32位,每一位对应着一个中断源,当中断源发出中断请求的时候,就会置位源挂起寄存器的相应位.反之,中断的挂起寄存器的值为0.源挂起寄存器如下表所示.
表6-31 源挂起寄存器(SRCPND)
(2)中断模式寄存器(INTMOD).
中断模式寄存器INTMOD共有32位,每一位对应着一个中断源,当中断源的模式位设置为1时,对应的中断会由ARM920T内核以FIQ模式来处理.相反的,当模式位设置为0时,中断会以IRQ模式来处理.中断模式寄存器如下表所示.
表6-32 中断模式寄存器(INTMOD)
注意:中断控制寄存器中只有一个中断源可以被设置为FIQ模式,因此只能在紧急情况下使用FIQ.
如果INTMOD寄存器把某个中断设为FIQ模式,FIQ中断不影响INTPND和INTOFFSET寄存器,因此,这两个寄存器只对IRQ模式中断有效.
(3)中断屏蔽寄存器(INTMSK).
这个寄存器有32位,分别对应一个中断源.当中断源的屏蔽位设置为1时,CPU不响应该中断源的中断请求;反之,等于0时CPU能响应该中断源的中断请求.中断屏蔽寄存器如下表所示.
表6-33 中断屏蔽寄存器(INTMSK)
表6-34 中断屏蔽寄存器(INTMSK)中对各位的描述
续表
(4)中断挂起寄存器(INTPND).
中断挂起寄存器INTPND共有32位,每一位对应着一个中断源,当中断请求被响应的时候,相应的位会被设置为1.在某一时刻只有一个位能为1,因此在中断服务子程序中可以通过判断INTPND来判断哪个中断正在被响应,在中断服务子程序中必须在清零SRCPND中相应位后,清除相应的中断挂起位,清零方法和SRCPND的相同.中断挂起寄存器如下表所示.
表6-35 中断拉起寄存器(INTPND)
注意:1.FIQ响应的时候不会影响INTPND相应的标志位.
2.向INTPND等于“1”的位写入“0”时,INTPND寄存器和INTOFFSET寄存器会有无法预知的结果,因此,
千万不要向INTPND的“1”位写入“0”,推荐的清零方法是把INTPND的值重新写入INTPND.
表6-36 中断拉起寄存器(INTPND)中对各位的描述
续表
(5)IRQ偏移寄存器.
中断偏移寄存器给出INTPND寄存器中哪个是IRQ模式的中断请求.IRQ偏移寄存器如下表所示.
表6-37 IRQ偏移寄存器
S3C2410A中的优先级产生模块包含7个单元,1个主单元和6个从单元.两个从优先级产生单元管理4个中断源,四个从优先级产生单元管理6个中断源.主优先级产生单元管理6个从单元.
每一个从单元有4个可编程优先级中断源和2个固定优先级中断源.这4个中断源的优先级是由ARB_SEL和ARM_MODE决定的.另外2个固定优先级中断源在6个中断源中的优先级最低.
(6)外部中断控制寄存器(EXTINTn).
外部中断控制寄存器如下表所示.
表6-38 外部中断控制寄存器
表6-39 外部中断控制寄存器中对各位的描述
24个外部中断可响应各种信号请求方式.EXTINTn寄存器可以配置如下信号请求方式:低电平触发、高电平触发、上升沿触发、下降沿触发、双边沿触发.
由于EINT[15∶0]具有滤波功能,EXTINTn引脚上的逻辑电平必须保持至少40ns,才能正确识别中断.
注意:EINT16-23可以被设置为快速中断模式,通过EXTINT2的3、7、11……位设置.
(7)外部中断屏蔽寄存器(EXTMASK).
外部中断屏蔽寄存器如下表所示.
表6-40 外部中断屏蔽寄存器
EXTMASK[23∶4]分别对应外部中断23-4,等于1时对应的中断被屏蔽,等于0时允许外部中断.EXTMASK[3∶0]保留.复位后,这些中断默认都是被屏蔽掉的.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。