视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
s3c2410中断控制工作原理和编程
2025-09-29 18:14:14 责编:小OO
文档
存在的问题

S3C2410中断控制器工作原理

一般说来cpu只有一个或两个外部中断输入管脚,但是s3c2410这个soc有56个外部中断源头,这56个外部中断源头是通过说s3c2410内部的中断控制器来管理的,中断控制器的主要工作就是管理外部中断源:开关某个中断源、中断优先级排队、向cpu发出中断请求信号。

ARM的异常中断类型

在嵌入式系统中外部设备和cpu通信主要是靠中断机制来实现的。中断功能可以解决CPU内部运行速度远远快于外部总线速度而产生的等待延时问题。ARM提供的FIQ和IRQ异常中断用于外部设备向CPU请求中断服务,一般情况下都是采用IRQ中断。

对以上寄存器的简介:(重点)

1SRCPND――源中断指示寄存器

SRCPND寄存器32位中的每一位对应着一个中断源,每一位被设置为1,则相应的中断源产生中断请求并且等待中断被服务。因此,这个寄存器表明了哪个中断源在等待中断请求被处理。注意,SRCPND寄存器的每一位是由中断源自动设置的,而不管INTMSK寄存器中的屏蔽位是否置1。另外,SRCPND寄存器不影响中断控制器的优先级逻辑。

       在指定中断源的中断服务程序中,SRCPND寄存器相对应的位必须被清除,这样才可以正确响应来自同一中断源的中断请求。如果从ISR返回而没有清除相应的位,也就是SRCPND寄存器中的对应的位还是1,那么就会一直响应这个中断请求。

        SRCPND中相应的中断位清除的时间依赖于用户的需求,如果想要从同一中断源接收另一次有效的中断请求,你在第一次就应该清除相应的位,并且使能中断。(怎么理解?)

       用户可以通过向SRCPND寄存器的相应位写“1”(不是写0 吗?因为s3c2410设计成写1就有清0的功能),这样可以清除该位。

INTPND――中断请求寄存器

     中断请求寄存器32位中的每一位对应着相应的中断请求,经过优先级逻辑后,INTPND

寄存器只能有一位被设置为1,并且向ARM产生中断请求。在IRQ中断服务子程序,能够读取这个寄存器的值来决定32个中断源的那一个中断被服务。

同SRCPND寄存器,在中断服务子程序里,这个寄存器的相应位需要被清除。我们可以向INTPND寄存器写一个数据1(why?,因为s3c2410设计成写1就有清0的功能),来清除寄存器的指定位。

INTMSK――中断屏蔽寄存器

在INTMSK寄存器中,32位依次对应着每个中断源,如果指定位被设为1,ARM将不响应中断源的中断请求(注意,即使在SRCPND相应的位被置位1的条件下也不响应)。如果屏蔽位为0,则中断请求可以被响应。

S3C2410的中断控制器

EXINT0----外部中断出发电平控制寄存器

INTOFFSET――中断偏移量寄存器

中断偏移寄存器 INTOFFSET中的值显示了INTPND寄存器中哪一个IRQ的中断请求,这个位在清除SRCPND和INTPND后将自动清除。

S3C2410异常中断响应过程和返回过程 (了解即可)

1).保存处理器当前状态寄存器CPSR的值到备份程序状态寄存器SPSR中。

2).设置当前程序状态寄存器CPSR的值,其中包括:设置CPSR响应位的值,使处理器进入特定的处理器模式;按要求屏蔽中断,通常应该屏蔽IRQ中断。在FIQ总断时屏蔽FIQ中断。

3).设置Lr寄存器。将相应中断模式的Lr寄存器的值设为异常中断的返回地址。

4).处理程序计数器PC,将PC值设为相应的中断向量的地址,从而实现跳转以执行中断服务程序。

异常中断的返回

当处理器执行完以上流程之后,处理器已经从中断向量进入异常处理的状态。异常中断处理完毕之后,在异常中断程序的末端,处理器进入异常中断的返回状态,其流程如下:

1).恢复状态寄存器。将保存的备份程序状态寄存器SPSR值赋给当前程序状态寄存器CPSR。

2).将返回地址赋值到程序计数器(PC)。这样程序将返回到异常中断产生的下一条指令或出现问题的指令处执行。

      需要注意的是:对于不同的异常中断,其返回地址的计算方法也是不同的,IRQ和FIQ异常中断产生时,程序计数器PC已经更新,而SWI中断和未定义指令中断时由当前指令自身产生的,程序计数器PC尚未更新,所以要计算出下一条指令的地址来执行返回操作;指令预取指中指异常中断和数据访问中断要求,返回到出现异常的执行现场,重新执行操作。

S3C2410X异常中断的响应-返回流程图:

保存状态寄存器CPSR->进入特定模式、屏蔽中断->设置Lr寄存器->设置程序计数器PC

进入中断向量、异常中断的处理程序->恢复状态寄存器->将返回地址复制到程序计数器

异常中断的安装

S3C2410系统通过异常向量表安装异常中断处理程序。即将异常向量表指向异常中断处理程序的入口,实现面向异常中断的跳转,异常向量中断的的入口地址是固定的(0x00-0x1C),系统运行到满足异常中断时,系统将自动跳入相应的异常中断向量表中,而在异常向量表中保存的正是利用跳转指令或LDR指令指向该中断的异常中断处理程序,这就实现了异常中断处理程序的安装。

    1).利用跳转指令实现异常中断的安装

将BL指令放置到中断向量表的特定位置,跳转目标地址为中断处理程序的首地址,便可直接实现异常中断的安装。其优点是BL指令可以直接保存地址,缺点是BL的跳转范围只有32MB的地址空间。

    2).利用ldr指令实现异常中断的安装

利用ldr直接向程序计数器PC中赋值也可以实现中断处理程序的安装。先要将异常中断处理程序首地址的绝对地址放在临近的一个存储单元中,然后用ldr命令将该内存单元中的地址读取到PC中。其优点是可调用程序的范围不受。

2240有24个外部中断,而却有60个中断源。

24个外部中断:分别连接至:手册的i/0那章

GPG0--GPG15:外部中断EINT8—EINT23

GPF0—GPF7:外部中断EINT0—EINT7

60个中断源(在手册的中断部分14-3)下载本文

显示全文
专题