当前位置:首页 > 单片机 > 单片机
[导读] 在介绍2410的中断处理之前,我们不得不先看看先把ARM的异常向量表(Exception Vectors),下面对异常向量表(Exception Vectors),做一个简单的介绍: ARM的异常向量表一般存放在0x00000000处,ARM920T能处理有7个

在介绍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。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

中断装置和中断处理程序统称为中断系统。中断系统是计算机的重要组成部分。实时控制、故障自动处理、计算机与外围设备间的数据传送往往采用中断系统。

关键字: CPU 中断处理 自动处理

STM32Cube HAL出来六七年了,还是有很多初学者没有适应,今天就分享一个读者问到的关于中断处理的问题。

关键字: 中断处理 回调函数

  引言   汽车的普及为人们的生活带来了方便,同时也给人们提出了一大难题——汽车防盗。本设计是为了解决以往汽车防盗产品的缺点和不足而开发的集成传感、报警和远程图

关键字: 数据采集 操作系统 s3c2410 汽车防盗系统

  引言   巡航控制系统(CCS)是20世纪60年代发展起来的,又称为恒速行驶系统。巡航控制系统工作时,ECU根据各种传感器输送来的信号判断汽车的运行状况,通过执行元件自动调节节气门的

关键字: ARM 三星 Linux ecu s3c2410 电子控制系统

  在过去一百年里(l906-2005),全球地表平均温度升高了0.74摄氏度,未来20年,每十年全球温度将会升高0.2摄氏度。气候变暖已成为不容忽视的、直接影响全球生产和生活问题。  

关键字: can总线 s3c2410

  在此设计的基于 GPRS 的远程安防监控系统,是采用的是摄像机传送视频信号经压缩编码后,通过内部总线传送到内置的 Web 服务器。用户在监控端可以直接通过浏览器观看 Web服务器上的摄像机视

关键字: GPRS s3c2410 安防监控

网上介绍LINUX下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期zhaoyang因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的驱动程序,有感于刚接...

关键字: Linux s3c2410 dma驱动

1引言目前 , 在嵌入式系统里基于ARM核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用 , 建立面向ARM构架的嵌入式操作系统也就成为当前研究的热点。S3C2410是SAMSUNG公司基于ARM920T处理器...

关键字: s3c2410 移植 标准linux

一、S3C2410支持4种供电模式(1)NORMAL MODE耗电最大、可以通过关闭具体控制器的时钟来节电(2)SLOW MODE在此模式下可以没有内部PLL,耗电情况依赖于外部时钟的频率(3)IDLE MODEFCLK...

关键字: s3c2410 电源管理

snailszzy的s3c2410_gpio_setpin()与s3c2410_gpio_cfgpin()函数定义s3c2410_gpio_setpin()在gpio.c中作用:设置相应GPIO口的值,如pin=S3C2...

关键字: s3c2410 函数定义
关闭
关闭