S3C2410 中断程序的实现

合集下载

S3C2410中文手册第14章 中断控制器

S3C2410中文手册第14章 中断控制器

第十四章中断控制器概述S3C2410中断控制器接收56个中断源的中断请求。

中断源由如DMA控制器、UART、IIC等内部外设提供。

这些中断源中,UARTn和EINTn中断是以或逻辑输入到中断控制器的。

当从内部外设和外部中断请求引脚接收到多个中断请求时,经过中断仲裁后,中断控制器向ARM920T请求FIQ或者IRQ中断。

仲裁过程与硬件优先级有关,仲裁结果写入中断请求寄存器。

中断请求寄存器帮助用户确定哪个中断产生。

中断控制器操作程序状态寄存器PSR中的F位和I位如果PSR中的F位被置1,CPU不接收FIQ快速中断,同样如果I位PSR被置1,CPU不接收IRQ中断,因此中断控制器能够通过将PSR的F和I位和相应的INTMSK中的位清零来接收中断。

中断模式ARM920T有两种中断模式:FIQ和IRQ。

在中断请求时所有的中断源决定使用哪个模式。

中断请求寄存器S3C2410有两种中断请求寄存器:源请求寄存器(SRCPND)和中断请求寄存器(INTPND)。

这些请求寄存器揭示了一个中断是否正在请求。

当中断源请求中断服务时SRCPND寄存器中的相应位肯定被置1,然而,中断仲裁之后则只有INTPND寄存器的某1位被自动置1。

即使该中断被屏蔽,SRCPND寄存器中的相应位也会被置1,但是INTPND寄存器将不会改变。

当INTPND寄存器的某位被置1,且I位或者F位清零时中断服务即开始。

SRCPND和INTPND寄存器能够被读和写,因此服务函数必须通过向SRCPND和INTPND中相应位写入“1”来清除中断请求条件。

中断屏蔽寄存器INTMSK通过中断屏蔽寄存器的哪个屏蔽位被置1可以知道哪个中断被禁止。

如果INTMSK的某个屏蔽位为0,此中断将会被正常服务。

如果中断源产生了一个请求,SRCPND中的源请求位被置位,即使相应屏蔽位为1。

中断源下表列出了中断控制器支持的56个中断源中断优先级产生模块其中32个中断请求的优先级逻辑有由个rotation based仲裁位组成:6个一级仲裁位和一个二级位,如图14-2所示。

基于s3c2410的任务切换软中断级服务的实现

基于s3c2410的任务切换软中断级服务的实现

基于s3c2410的任务切换软中断级服务的实现1.关于软中断指令软件中断指令(SWI)可以产生一个软件中断异常,这为应用程序调用系统例程提供了一种机制。

语法:SWI {} SWI_number SWI执行后的寄存器变化:lr_svc = SWI指令后面的指令地址spsr_svc = cpsr pc = vectors + 0x08cpsr模式= SVC cpsr I = 1(屏蔽IRQ中断)处理器执行SWI指令时,设置程序计数器pc为向量表的0x08偏移处,同事强制切换处理器模式到SVC模式,以便操作系统例程可以在特权模式下被调用。

每个SWI指令有一个关联的SWI号(number),用于表示一个特定的功能调用或特性。

【例子】一个ARM工具箱中用于调试SWI的例子,是一个SWI号为0x123456的SWI 调用。

通常SWI指令是在用户模式下执行的。

SWI执行前:cpsr = nzcVqift_USER pc = 0x00008000 lr = 0x003fffff ;lr = 4 r0 = 0x12执行指令:0x00008000 SWI 0x123456SWI执行后:cpsr = nzcVqIft_SVC spsr = nzcVqift_USER pc = 0x00000008 lr = 0x00008004 r0 = 0x12SWI用于调用操作系统的例程,通常需要传递一些参数,这可以通过寄存器来完成。

在上面的例子中,r0 用于传递参数0x12,返回值也通过寄存器来传递。

处理软件中断调用的代码段称为中断处理程序(SWI Handler)。

中断处理程序通过执行指令的地址获取软件中断号,指令地址是从lr计算出来的。

SWI号由下式决定:SWI_number = AND NOT《0xff000000》其中SWI instruction就是实际处理器执行的32位SWI指令SWI指令编码为:31 - 28 27 - 24 23 - 0 cond 1 1 1 1 immed24指令的二进制代码的bit23-bit0是24bit的立即数,即SWI指令的中断号,通过屏蔽高8bit 即可获得中断号。

第7章S3C2410中断

第7章S3C2410中断
嵌入式系统设计
南昌大学信息工程学院
中断方式控制的I/O操作步 骤
南昌大学
NANCHANG UNIVERSITY
中断源及其识别方法
• 嵌入式系统中,需要采用中断控制方式 的I/O端口或部件有许多,如S3C2410芯 片中就有56个中断源。而通常微处理器 能够提供的中断请求信号线是有限的, 如ARM920T核提供给外部的中断请求 信号线仅有IRQ和FIQ两根。因此,当有 中断产生时,微处理器就必须通过一定 的方式识别出是哪个中断源发来的请求 信号,以便转向其对应的中断服务程序 例程,这就是中断源的识别。
嵌入式系统设计
南昌大学信息工程学院
南昌大学
NANCHANG UNIVERSITY

• 中断的形象示意:
嵌入式系统设计
南昌大学信息工程学院
南昌大学
NANCHANG UNIVERSITY
· 初始化微处理器中用于中断方式的寄存器,开放中 断。 · I/O端口或部件完成数据操作后并产生中断请求信 号。 · 当中断请求信号有效时,微处理器可能处在不可中 断状态。等到微处理器允许中断时,微处理器就 保存当前状态,停止它现行的操作并开始进行中 断源的识别。 · 在识别出优先级最高的中断源后,微处理器转到对 应的中断服务例程入口,并应答中断,I/O端口 或部件收到应答信号后,撤消其中断请求。 · 微处理器读入或写出数据,当中断服务例程结 束后,回到原来的被中断程序处继续执行。
嵌入式系统设计
南昌大学信息工程学院
南昌大学
NANCHANG UNIVERSITY
中断未决寄存器
嵌入式系统设计
• INTPND寄存器是32位寄存器,寄存器中的每一位 对应一个中断源。只有未被屏蔽且具有最高优先 级、在源未决寄存器中等待处理的中断请求可以 把其对应的中断未决位置1。因此,INTPND寄存 器中只有一位可以设置为1,同时,中断控制器 产生IRQ信号给ARM920T核。在IRQ的中断服务例 程里,设计者可以读取该寄存器,从而获知哪个 中断源被处理。 • 当INTPND寄存器的一个未决位被设置为1,只要 ARM920T核内部的状态寄存器PSR中的I标志和F标 志被清零,对应的中断服务例程就可以开始执行 。INTPND寄存器是可读写的,在中断服务例程里 面必须清除中断未决位。 南昌大学信息工程学院

实验5 S3C2440中断实验

实验5   S3C2440中断实验

LOOP0
stmfd sp!,{r0,r1,lr}; 保存现场 ldr r0,=0x20005000 ; 取LED灯驱动器端口地址 ldr r1,=0x01 str r1,[r0] ; 点亮第1个LED灯 bl Delay ; 延迟 ldr r0,=0x20005000 ; ldr r1,=0x03 str r1,[r0] ; 点亮第2个LED灯 bl Delay ; 延迟 ldr r0,=0x20005000; ldr r1,=0x07 str r1,[r0] ; 点亮第3个LED灯 bl Delay ; 延迟 ldr r0,=0x20005000 ; 点亮第4个LED灯 ldr r1,=0x0f str r1,[r0] bl Delay ;延迟 ldr r0,=0x20005000 ;熄灭所有LED灯 ldr r1,=0x00 str r1,[r0] ldr r0,=pSRCPND ; 清0中断源悬挂寄存器EINT3位 mov r1,#8 str r1,[r0] ldr r0,=pINTPND ; 清0中断悬挂寄存器EINT3位 str r1,[r0] ldmfd sp!,{r0,r1,pc}; 返回‘wait_server b.’下条指令
实验目的
掌握ARM处理器的中断处理机制及中断响应过程。 掌握S3C2440的中断控制寄存器的使用及中断处理程序
编程。
掌握基于嵌入式裸机系统的中断应用程序设计实现
实验内容
一、验证实验
输入并调试实验教程提供的参考程序,实现当按下与实 验箱外部中断3引脚EINT3连接的按键时,使8位LED中的低 4位LED依次点亮后再熄灭。
nCS_SEG1
D31~D0
EINT3(GPF3)
将INT3接之以按键 开关作为中断信号 输入端,每按一次 按键产生一次中断 请求,中断处理程 序使低4位LED逐个 点亮然后再熄灭。

S3C2440外部中断操作

S3C2440外部中断操作

1
20100831
编写:小龍
吧把 INTPND 中相应位置 1,所以同一时间只有一位是 1。也就是说前面的寄存 器置 1 是表示发生了,只有 INTPND 置 1,CPU 才会处理。 INTOFFSET :用来表示 INTPND 中哪一位置 1 了,好让你查询,普 通中断跳转时查询用。清除 INTPND、SRCPND 时自动清除。 4.各寄存器关系:
5
20100831 case 0x2000: if(rGPBDAT & 0x80) LED3_ON(); else LED3_OFF(); break; case 0x4000: if(rGPBDAT & 0x100) LED4_ON(); else LED4_OFF(); break; case 0x8000: LED_ON(); break; case 0x80000: LED_OFF(); break;
下面看图说明: 5.中断过程。 a 如果是不带子中断的内部中断:发生后 SRCPND 相应位置 1,如果没有被 INTMSK 屏蔽,那么等待进一步处理。 b 如果是带子中断的内部中断:发生后 SUBSRCPND 相应位置 1,如果没有被 INTSUBMSK 屏蔽,那么 SRCPND 相应位置 1,等待进一步处理,几个 SUBSRCPND 可能对应同一个 SRCPND,对应表如下: SRCPND SUBSRCPND INT_UART0 INT_RXD0,INT_TXD0,INT_ERR0 INT_UART1 INT_RXD1,INT_TXD1,INT_ERR1 INT_UART2 INT_RXD2,INT_TXD2,INT_ERR2 INT_ADC INT_ADC_S, INT_TC INT_CAM INT_CAM_C, INT_CAM_P INT_WDT_AC97 INT_WDT, INT_AC97

嵌入式10_S3C2410处理器中断控制器

嵌入式10_S3C2410处理器中断控制器

据ARM系列中断处理的特点,各种异常中断对应
于ARM系列的不同工作模式 。
1、S3C2410的中断类型
2、异常中断的响应过程和返回过程
(1)异常中断响应过程
1) 保存CPSR到将要执行的异常中断的SPSR; 2)设置CPSR的值:设置CPSR相应位的值使处理器进 入特定的处理器模式,按要求屏蔽中断; 3)设置LR寄存器:将中断相应模式的LR寄存器的值设 置为异常中断的返回地址; 4)处理程序计数器PC:将PC值设为相应的中断向量的
*****************************************/
void EnableIrq(int bit) { rINTMSK |= ~(bit); }
(5)中断偏移寄存器(INTOFFSET)
中断偏移寄存器中的值显示了INTPND寄存器中哪个
IRQ模式的中断请求。这个位在清除SRCPND和INTPND 后被自动清除。
4、中断控制寄存器
4、S3C2410的中断控制寄存器
#define rSRCPND #define rINTMOD #define rINTMSK #define rPRIORITY #define rINTPND (*(volatile unsigned *)0x4a000000) (*(volatile unsigned *)0x4a000004) (*(volatile unsigned *)0x4a000008) (*(volatile unsigned *)0x4a00000a) (*(volatile unsigned *)0x4a000010)
(1)源中断申请寄存器( SRCPND)
(1)源中断申请寄存器( SRCPND)
(2)中断模式寄存器(INTMOD)

S3C2410的中断异常处理机制

S3C2410的中断异常处理机制

S3C2410的中断异常处理机制发表日期:1/12/2007 2:33:44 PM 来源:《电子元器件应用》S3C2410的中断异常处理机制摘要:ARM处理器在嵌入式系统中的地位越来越重要,S3C2410作为ARM9微处理器家族中的一员,应用已十分广泛。

文中简述了ARM处理器的中断异常种类、响应和返回过程;重点讨论了S3C2410中断控制器的结构和处理机制,以及对IRQ中断的具体处理流程,最后给出了详细的参考代码。

关键词:ARM9微处理器;S3C2410;IRQ;中断异常处理王皓平一帆西安电子科技大学通信工程学院引言在ARM微处理器的编程,特别是系统初始化代码的编写中,通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发。

中断处理的编程实现需要深入了解ARM 内核和处理器本身的中断特征,以便设计一种快速简便的中断处理机制。

当异常中断发生时,若系统执行完当前指令,那么将跳转到相应的异常中断处理程序处执行。

而当异常中断处理程序执行完成后,程序将返回到发生中断的指令的下一条指令处执行。

在进入异常中断处理程序时,要保存被中断的程序的执行现场。

而从异常中断处理程序退出时,则要恢复被中断的程序的执行现场。

ARM 体系中通常在存储地址的低端固化了一个32字节的硬件中断向量表,可用来指定各异常中断及其处理程序的对应关系。

当一个异常出现以后,ARM 微处理器会执行以下几步操作:(1)保存处理器当前状态、中断屏蔽位以及各条件标志位;(2)设置当前程序状态寄存器CPSR 中相应的位;(3)将寄存器lr_mode设置成返回地址;(4)将程序计数器(PC)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。

在接收到中断请求以后,ARM处理器内核会自动执行以上四步,而程序计数器PC总是跳转到相应的固定地址。

从异常中断处理程序中返回下面的两个基本操作:一是恢复被屏蔽的程序的处理器状态;二是返回到发生异常中断的指令的下一条指令处继续执行。

S3C2410的PWM定时器中断实验

S3C2410的PWM定时器中断实验

实验6 S3C2410 PWM定时器中断实验一、实验目的掌握S3C2410 PWM定时器的工作原理和定时时间的计算方法,掌握和PWM定时器有关寄存器的使用方法,会用C语言对PWM定时器进行初始化编程,理解PWM定时器中断的触发过程,熟练掌握和中断相关寄存器的使用以及中断服务函数的编程方法。

二、实验内容UP-NETARM2410实验箱上两个LED数码管的控制地址为0x08000110和0x08000112。

借助于PWM定时计数器可实现简单的计数秒表。

由于只有两位数码管,秒表计到99秒后,从0开始重新计数。

同时三个发光二极管每隔一秒闪烁点亮。

三、PWM定时器相关知识S3C2410A具有5个16位的定时器,其中定时器0~3具有PWM波发生功能,即可以输出PWM波,定时器4没有外部输出。

定时器工作频率为PCLK/(预分频值+1)/分频值,在下面的工程中,将使用定时器1,并设置其工作频率为20 kHz,即为:48MHz/(149+1)/16 = 20 kHz所以定时时间为:0x4E20* 20 kHz=1S定时器1的初始化方法如下:首先,设置TCFG0(定时器配置寄存器0,地址为0x51000000)的值为0x95,即定时器1的预分频值为0x95,十进制数为149。

注意:定时器0和1共用同一个预分频值。

然后,设置TCFG1(定时器配置寄存器1,地址为0x51000004)的值为0x30,即定时器1的分频值为16。

其次,设置TCNTB1(定时器1计数寄存器,地址为0x51000018)和TCMPB1(定时器1比较寄存器,地址为0x5100001C)的值为0x4E20和0x4000。

这里没有用到TCMPB1,当TCNTB1减计数到0后,将触发定时器1中断再次,设置TCON(定时器控制寄存器,地址为0x51000008)的值为0xA00,即刷新TCNB1和TCMPB1的值。

最后,设置TCON的值为0x900,启动定时器1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

S3C2410 中断程序的实现
在此要注意的是区别中断向量表和异常向量表。

中断发生后总是从IRQ 或者FIQ 异常入口处进入,然后跳转到相应的异常处理程序处执行,这个异常处理程序一般都是进行查找中断向量表的操作,然后调用中断处理程序。

以下是在应用中中断处理实现的过程:从中不难体会到中断的处理过程。

定义中断向量表的物理地址:
代码
将中断处理程序入口地址放入中断向量表:
代码
定义中断处理程序:
代码
定义异常向量表:
代码
定义异常处理函数:
代码
异常处理宏HANDLER的定义:代码
定义IRQ 中断处理宏IRQHandle:
代码
申明IRQ 异常的服务程序为:IsrIRQ,即,发生IRQ 异常时,执行“b HandlerIRQ”即是
运行IsrIRQ代码:
代码
IRQ 异常处理程序:
代码
由上可以知道,当一个IRQ 中断发生时,CPU将从0X18(IRQ 异常入口地址)取指执行,在这一步PC 的跳转是有硬件实现的。

在入口0x18 地址处放的是一条跳转指令,这条指令将跳到IRQ 异常处理程序运行,IRQ 异常处理程序主要是根据中断源查找中断向量表。

获得中断入口地址后,接着CPU 跳转中断处理程序运行。

在嵌入式系统中异常向量表和中断向量表都是存于FLASH起始的一段空间中。

而异常处理和中断处理程序都是运行在RAM中的。

相关文档
最新文档