系统分析S3C2410的中断处理

发布者:RainbowPromise最新更新时间:2023-01-06 来源: elecfans关键字:系统分析  S3C2410  中断处理 手机看文章 扫描二维码
随时随地手机看文章

S3C2410   中断

在介绍2410的中断处理之前,我们不得不先看看先把ARM的异常向量表(ExcepTIon Vectors),下面对异常向量表(ExcepTIon Vectors),做一个简单的介绍:

ARM的异常向量表一般存放在0x00000000处,ARM920T能处理有7个异常,他们分别是:Reset,Undefined instrucTIon,Software Interrupt,Abort (prefetch),Abort (data),IRQ,FIQ

下面是系统源码片段:

_start:

b Handle_Reset

b HandleUndef

b HandleSWI

b HandlePrefetchAbort

b HandleDataAbort

b HandleIRQ

b HandleFIQ

…..

上面这部分片段一般出现在一个名叫“head.s”的汇编文件里,“b Handle_Reset”这条语句就是系统上电之后运行的第一条语句。因为上电后CPU会从SDRAM的0x00000000处取第一条指令并执行。

0x00000000: b Handle_Reset

0x00000004: b HandleUndef

0x00000008: b HandleSWI

0x0000000C: b HandlePrefetchAbort

0x00000010: b HandleDataAbort

0x00000014: b HandleIRQ

0x00000018: b HandleFIQ

系统上电后CPU会从SDRAM的0x00000000地址处取第一条指令并执行,终端向量表如上所示会放在0x00000000地址处,以后每当系统有异常出现,则CPU会根据异常号,从内存0x00000000地址处开始查中断向量表并做相应的处理,比如系统触发了一个IRQ异常,IRQ为6号异常,则CPU将把PC指向0x00000000地址处运行,调用中断服务程序。


S3C2410芯片可以接收56个中断源,产生32个中断请求。这些中断源来自两部分:内部外设,如DMA控制器,UART等和外部引脚线。ARM920T具有两种类型的中断模式:FIQ和IRQ,通过判定优先级产生IRQ或FIQ中断。如果在ARM920T的CUP中的PSR(程序状态寄存器)的控制位F位置1,则CPU从中断控制器中不接受FIQ中断,如果在ARM920T的CUP中的PSR(程序状态寄存器)的控制位I位置1,则CPU从中断控制器中不接受IRQ中断,因此中断控制器通过清除F-bit位或I-bit位产生中断。


S3C2410的中断异常处理模块有以下寄存器构成:

SRCPND,

INTMODE,

INTMSK,

PRIORITY,

INTPND,

INTOFFSET,

SUBSRCPND,

INTSUBMSK。

下面具体介绍各个寄存器的功能:

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。


关键字:系统分析  S3C2410  中断处理 引用地址:系统分析S3C2410的中断处理

上一篇:基于ARM9芯片S3C2410实现测量监控系统的应用方案
下一篇:以S3C2440为平台对智能模拟人控制箱和按压通气功能的设计与实现

推荐阅读最新更新时间:2024-11-03 10:23

嵌入式智能家居控制系统的研究与设计
系统结构设计     本文将控制系统分为现场控制级(主机)和多个控制对象级(分机)。现场控制级设备能够收集到控制对象的各种信息,对这些数据进行处理,并能够在设定的条件下产生报警。通过该系统,可以得到家居的各种运行状态(例如,房间温度、湿度,煤气泄漏报警等),并能根据现场情况做出相应的调整控制(例如,照明及家电控制等)。其家居控制系统结构如图1所示。 图1 家居控制系统结构图     本文仅研究设计智能家居的现场控制部分,图1中的GSM和GPRS等远程通信模块作为以后系统的扩展升级。主机MCU选用ARM9芯片S3C2410,因其具有丰富的功能端口而适合设计要求和日后扩展。S3C2410嵌入式微处理器集成了众多的常用资
[嵌入式]
触摸屏在S3C2410上的应用实例
摘要:给出S3C2410上触摸屏的实现原理、硬件结构和软件程序;对软件进行优化,改进软件滤波的实现方法。其算法使用C语言实现,可移植到任何操作系统的触摸屏驱动程序中。 关键词:触摸屏 S3C2410 滤波 引言 随着个人数字助理(PDA)、瘦容户机等的普及,触摸屏作为终端与用户交互的媒介,在我们的生活中使用得越来普遍。触摸屏分为电阻式、电容式、声表面波式和红外线扫描式等类型,使用得最多的是4线电阻式触摸屏。 本文以三星公司ARM9内核芯片S3C2410触摸屏接口为基础,通过外接4线电阻式触摸屏构成硬件基础。在此基础上,开发了触摸屏面图板程序。 1 触摸屏原理 S3C2410接4线电阻式触摸屏的电路原理如图1所示。整个触
[嵌入式]
ARM 中断处理过程
1.寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。 每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。 由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的 当中断产生的时候,把CPSR保存在SPSR是自动完成的。
[单片机]
ARM的SWI异常中断处理程序设计
本节主要介绍编写SWI处理程序时需要注意的几个问题,包括判断SWI中断号,使用汇编语言编写SWI异常处理函数,使用C语言编写SWI异常处理函数,在特权模式下使用SWI异常中断处理,从应用程序中调用SWI。 1.判断SWI中断号 当发生SWI异常,进入异常处理程序时,异常处理程序必须提取SWI中断号,从而得到用户请求的特定SWI功能。 在SWI指令的编码格式中,后24位称为指令的 comment field 。该域保存的24位数,即为SWI指令的中断号,如图7-4所示。 第一级的SWI处理函数通过LR寄存器内容得到SWI指令地址,并从存储器中得到SWI指令编码。通常这些工作通过汇编语言、内嵌汇编来完成。下面的例子显示了
[单片机]
ARM的SWI异常<font color='red'>中断处理</font>程序设计
ARM基础学习-异常中断处理
中断类型 当异常中断发生的时候,系统执行完当前指令后,将跳转到相应的异常中断处理程序,当处理程序执行完毕后,程序返回到发生中断的指令的下一条指令处执行;在进入异常中断处理程序时,要保存被中断的执行现场,在异常中断处理程序退出时,要恢复被中断的程序的执行现场; 异常中断类型: 1.复位异常发生后,进入到管理模式(svc) 下。 2.软中断发生后, 进入到 管理模式(svc) 下。 3.未定义指令异常发生后, 进入到 未定义指令中止模式(und)下。 4.指令预取中止异常发生后, 进入到 数据访问中止模式(abt)下; 5.数据访问中止异常发生后, 进入到 数据访问中止模式(abt) 下: 6.外部中断发生后, 进入到 外部中
[单片机]
ARM基础学习-异常<font color='red'>中断处理</font>
S3C2410触摸屏驱动代码分析3
/* 这段代码完成对刚才得到的y 值进行修正,将结果保存在cheat_diff_y 变 量中 */ //y = y - (max + min); //y = y / (TIMES - 2); adc_state = 1; mode_y_axis(); start_adc_y(); /* 开始进行y 坐标的转换,注意此处由start_adc_y()函数引发一次AD 中 断,开始进行Y 坐标的转换,特别需要注意的是此处adc_state 的值变为1,表示转换的第 二阶段(即Y 坐标转换阶段的开始)。 Y坐标转换的代码是下面的由鲜绿颜色标注的代码。 */ } } else if (adc_state == 1) { //进行Y 坐标转换
[单片机]
S3C2410启动代码详解(2)
;======================================================================================== //在这里用IMP ORT伪指令(和c语言的extren一样)引入|Image$$RO$$Base|,|Image$$RO$$Limit|... //这些变量是通过ADS的工程设置里面设定的RO Base和RW Base设定的,最终由编译脚本和连接程序导入程序. //那为什么要引入这玩意呢,最简单的用处是可以根据它们拷贝自已 ,从把RW和ZI变量从加载域中复制到运行域中 //一个arm由RO,RW,ZI三个断组成 其中RO为代码段,RW是已经初始化的
[单片机]
基于斯道S3C2410的Linux内核编译
1。编译缘由 使用斯道的zImage文件,我自己编译的Mplayer不能使用,必须加--nosound选项才能播放视频。后来见一篇文章说是Linux内核音频驱动的问题,所以决定重新编译内核。 2。编译工具及资料 2。1内核版本:斯道S3C2410普及版2光盘自带的 2。1交叉编译器:cross-2.95.3.tar.bz2,可能是在ARM官方的ftp服务器上下的,我忘了。 3。编译过程 3。1拷贝cross-2.95.3.tar.bz2到/usr/local/arm/目录,并转到/usr/local/arm目录 sudo cp cross-2.95.3.tar.bz2 /usr/local/arm sudo cd /usr/
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved