中断控制器

S3C2440A 中的中断控制器接受来自 60 个中断源的请求。提供这些中断源的是内部外设,如 DMA 控制器、 UART、IIC 等等。在这些中断源中,UARTn、AC97 和 EINTn 中断对于中断控制器而言是“或”关系。 当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求 ARM920T 内核的 FIQ 或 IRQ。

s3c2440A中断处理框图 

对于IRQ处理过程详解 

一、中断控制器操作

1、程序状态寄存器(PSR)的 F 位和 I 位

如果 ARM920T CPU 中的 PSR 的 F 位被置位为 1,CPU 不会接受来自中断控制器的快中断请求(FIQ)。同 样的如果 PSR 的 I 位被置位为 1,CPU 不会接受来自中断控制器的中断请求(IRQ)。因此,中断控制器可以通过 清除 PSR 的 F 位和 I 位为 0 并且设置 INTMSK 的相应位为 0 来接收中断。

2、中断模式

ARM920T 有两种中断模式的类型:FIQ 或 IRQ。所有中断源在中断请求时决定使用哪种类型。

3、中断挂起寄存器

S3C2440A 有两个中断挂起寄存器:源挂起寄存器(SRCPND)和中断挂起寄存器(INTPND)。这些挂起寄 存器表明一个中断请求是否为挂起。当中断源请求中断服务,SRCPND 寄存器的相应位被置位为 1,并且同时在仲 裁步骤后 INTPND 寄存器仅有 1 位自动置位为 1。如果屏蔽了中断,则 SRCPND 寄存器的相应位被置位为 1。这 并不会引起 INTPND 寄存器的位的改变。当 INTPND 寄存器的挂起位为置位,每当 I 标志或 F 标志被清除为 0 中 断服务程序将开始(异常处理开始)。SRCPND 和 INTPND 寄存器可以被读取和写入,因此服务程序必须首先通过写 1 到 SRCPND 寄存器的相应位来清除挂起状态并且通过相同方法来清除 INTPND 寄存器中挂起状态。

4、中断屏蔽寄存器

此寄存器表明如果中断相应的屏蔽位被置位为 1 则禁止该中断。如果某个 INTMSK 的中断屏蔽位为 0,将正常 服务中断。如果 INTMSK 的中断屏蔽位为 1 并且产生了中断,将置位源挂起位。

二、以外部中断K为例设置寄存器

1、初始化

(1)配置INIMSK(开关)中断源

调整EINT8_23为可服务状态 

(2)配置触发方式

配置其触发方式为下降沿触发,例如开关按下的时候 

(3)配置引脚(GPB0)

配置GPB0引脚为TOUT0模式 

2、配置CPSR

使能CPSR中的I位,需要保证其在有特权的模式下进行这步

deal_irq
    sub lr, lr, #4
	stmfd sp!, {r4-r12, lr}   ; 保护现场
	import irq_handle
	bl irq_handle
	ldmfd sp!, {r4-r12, pc}^   ; 带模式切换的恢复现场

第一句的操作是因为保证在切换模式后返回模式时,pc能够正确的跳转,因为在异常的进入和退出时,pc有以下的规律

3、处理中断

(1)判断终端偏移(INTOFFSET)

(2)配置EINTMASK 

配置其为使能中断 

(3)根据偏移量,配置EINTPEND(需要注意的时在此之前,一定要保证工作模式的切换,不然后续程序的跳转回出现问题)

(4)清除挂起标志,及配置到的PEND都需要置1清除 

 

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值