ARM嵌入式C编程标准教程 第四章 S3C2410的中断系统
ARM9S3C2410x中文datasheet资料(绝对完整版)03S3c2410中断异常处理概述

使用中断的步骤:1、当发生中断IRQ时,CPU进入“中断模式”,这时使用“中断模式”下的堆栈;当发生快中断FIQ时,CPU进入“快中断模式”,这时使用“快中断模式”下的堆栈。
所以在使用中断前,先设置好相应模式下的堆栈。
2、对于“Request sources(without sub -register)”中的中断,将INTSUBMSK寄存器中相应位设为03、将INTMSK寄存器中相应位设为04、确定使用此的方式:是FIQ还是IRQ。
a.如果是FIQ,则在INTMOD寄存器设置相应位为1b.如果是IRQ,则在RIORITY寄存器中设置优先级使用中断的步骤:5、准备好中断处理函数,a.中断向量:在中断向量设置好当FIQ或IRQ被触发时的跳转函数,IRQ、FIQ的中断向量地址分别为0x00000018、0x0000001c b.对于IRQ,在跳转函数中读取INTPND寄存器或INTOFFSET 寄存器的值来确定中断源,然后调用具体的处理函数c.对于FIQ,因为只有一个中断可以设为FIQ,无须判断中断源d.中断处理函数进入和返回6、设置CPSR寄存器中的F-bit(对于FIQ)或I-bit(对于IRQ)为0,开中断s3c2410 中断异常处理在进入正题之前,我想先把ARM920T的异常向量表(Exception Vectors)做一个简短的介绍。
:]ARM920T的异常向量表有两种存放方式,一种是低端存放(从0x00000000处开始存放),另一种是高端存放(从0xfff000000处开始存放)。
关于为什么要分两种方式进行存放这点我将在介绍MMU的文章中进行说明,本文采用低端模式。
ARM920T能处理有8个异常,他们分别是:Reset,Undefined instruction,Software Interrupt,Abort (prefetch),Abort (data),Reserved,IRQ,FIQ下面是某个采用低端模式的系统源码片段:/****************************************************** ***********************_start:b Handle_Resetb HandleUndefb HandleSWIb HandlePrefetchAbortb HandleDataAbortb HandleNotUsedb HandleIRQb HandleFIQ…..…..other codes…...******************************************************* **********************/上面这部分片段一般出现在一个名叫“head.s”的汇编文件的里,“b Handle_Reset”这条语句就是系统上电之后运行的第一条语句。
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处理器中断控制器

据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第四章

第四章S3C2410A的I/O口从这一章开始,就进入了S3C2410A底层驱动程序开发的学习过程中了。
在第一章已经介绍了ARM系统开发的层级结构,本课程的内容符合层次结构中的第二层底层驱动开发,但是这里不包含启动代码的编写和操作系统移植。
一般来讲ARM开发系统如广州友善之臂的micro2440开发板,英贝特公司的开发板,在加上达盛公司的实验系统等等,出厂时各类底层的相关驱动程序和应用的操作系统移植都已经编写测试完毕,其中ARM的启动代码是现成可以使用的,不需要重新编写。
另外,出厂时的底层驱动代码都是可以直接使用的,这些代码可以提供给使用者自学时参考,当然如果觉得这些代码在结构上表达上都不尽如人意,读者随时都可以自行修改。
达盛公司的实验系统的底层驱动程序也是现成可以使用的,但是鉴于教学需要,本课程会引导读者在理解底层硬件的基础上对这些程序进行修改或者重写编写部分驱动程序,以便使读者能够熟练掌握S3C2410A底层的驱动开发。
4.1 S3C2410A的GPIO1.S3C2410A CPU有117个多功能复用的I/O口,共分为8组。
(1)16bit I/O端口为:Port C、Port D、Port E和Port G(2)11bit I/O端口为:Port B和Port H(3)23bit I/O端口为:Port A(4)8bit I/O端口为:Port F(5)在这里需要说明几个问题:①端口的bit数是什么意思?例如,Port C为16bit I/O端口,即Port C共有16位,从Port C[0]到Port C[15]都可以应用。
②多功能复用是什么意思?ARM7和ARM9这些CPU的I/O口都可以配置成不同的功能,也就是说这些端口可以作为普通的输入输出端口使用,也可以配置成UART使用,还可以配置成I2C、SPI和SSI等总线信号使用。
(6)如何操作这些I/O端口?用配置和访问S3C2410A的功能寄存器的方法可以操作S3C2410A的硬件资源。
S3C2440中断处理机制PPT教学课件

2020/12/10
Eint8-23
ARM920T
reset Undef SWI Pabort Dabort
IRQ FIQ
1
中断申请模式设置寄存器, 确定一个中断是申请ARM 核的普通IRQ处理还是快速 的FIQ处理
MODE
中断优先级设置寄存器,确 定多个中断发生时,哪个 中断事件先执行响应
子中断屏蔽寄存器,不让中断事件
SUBMASK 上报给SRCPND
2
设置具体的外部 中断滤波方式
Eint0-3 Eint4-7 EINTFLT0
EINTFLT1 EINTFLT2
Eint8-23
EXTINT0 EXTINT1 EXTINT2
设置外部中断源0-7的触发模式, 高、低、上升沿、下降沿等等。
3
2020/12/10
4
PPT教学课件
谢谢观看
Hale Waihona Puke Thank You For Watching
5
设置外部中断源8-15的触发模式, 高、低、上升沿、下降沿、是否有 数字滤波等。
设置外部中断源16-23的触发模式, 高、低、上升沿、下降沿、是否有 数字滤波等。
EINTMASK
中断屏蔽寄存器,是否屏蔽外部中 断源
外部中断源申请寄存器,确定发生
EXTPEND 了什么外部中断(含外部中断源4-23)
2020/12/10
Priority
2020/12/10
SRCPND INTPND
中断源申请寄存器,确定发生了什 么中断(含外部中断源0-3)
中断处理寄存器,确定是哪个中断 等待ARM核的IRQ中断处理
SUBSRCPND
S3C2410 中断程序的实现

S3C2410 中断程序的实现
在此要注意的是区别中断向量表和异常向量表。
中断发生后总是从IRQ 或者FIQ 异常入口处进入,然后跳转到相应的异常处理程序处执行,这个异常处理程序一般都是进行查找中断向量表的操作,然后调用中断处理程序。
以下是在应用中中断处理实现的过程:从中不难体会到中断的处理过程。
定义中断向量表的物理地址:
代码
将中断处理程序入口地址放入中断向量表:
代码
定义中断处理程序:
代码
定义异常向量表:
代码
定义异常处理函数:
代码
异常处理宏HANDLER的定义:代码
定义IRQ 中断处理宏IRQHandle:
代码
申明IRQ 异常的服务程序为:IsrIRQ,即,发生IRQ 异常时,执行“b HandlerIRQ”即是
运行IsrIRQ代码:
代码
IRQ 异常处理程序:
代码
由上可以知道,当一个IRQ 中断发生时,CPU将从0X18(IRQ 异常入口地址)取指执行,在这一步PC 的跳转是有硬件实现的。
在入口0x18 地址处放的是一条跳转指令,这条指令将跳到IRQ 异常处理程序运行,IRQ 异常处理程序主要是根据中断源查找中断向量表。
获得中断入口地址后,接着CPU 跳转中断处理程序运行。
在嵌入式系统中异常向量表和中断向量表都是存于FLASH起始的一段空间中。
而异常处理和中断处理程序都是运行在RAM中的。
《ARM嵌入式C编程标准教程》

第二章ADS 1.2开发环境创建与简介
2.1 ADS1.2开发环境创建
2.1.1 ADS1.2概述
ADS是个集成开发环境,主要包括编译器、链接器、调试 器、C和C++库等,是ARM公司推出的新一代ARM集成开 发工具。最新版本是ADS1.2,该版本支持包括Windows和 Linux在内的多种操作环境。ADS1.2的组成如下所述。 1. 编译器 ADS提供多种编译器,以支持ARM和Thumb指令的编译, 主要有: ·armcc:是ARM C编译器。 ·tcc:是Thumb C编译器。 ·armcpp:是ARM C++编译器。 ·tcpp:是Thumb C++编译器。 ·armasm:是ARM和Thumb的汇编语言编译器。
2.1.2 ADS1.2的安装
ADS全称为ARM Developer Suite,是ARM公司推出的新 的一代ARM集成开发工具。现在ADS的最新版本是1.2, 它取代了早期的ADS1.1和ADS1.0,该版本支持包Windows 和Linux在内的多种操作系统。安装步骤如下: 在ADS1.2的安装盘中运行setup.exe,安装ARM Developer Suite v1.2。出现图2-1对话框和图2-2对话框,同意产权协 义,选省缺安装路径(C:\Program Files\ARM\vADS1.2)和 典型安装模式(Typiflcation),按Next进入下一步,出现选 文件夹、编程语言和当前设定对话框,均按Next,开始安 装,如图2-3示。 安装结束,安装许可文件(Install License),这一步可 按安装向导进行,单击“下一步”按钮,会出现如图2-4 和图2-5所示的对话框。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主程序工作
S3C2410的中断系统
4.5.2
中断服务程序工作
◦ 在中断服务程序中,先屏蔽中断,防止其他中断产生干 扰我们中断服务程序的执行; ◦ 执行中断服务程序; ◦ 清中断源挂起寄存器(SRCPND)和中断挂起寄存器 (INTPND); ◦ 取消总中断屏蔽和子中断屏蔽,等待新中断产生; ◦ 中断返回。
中断控制专用寄存器
S3C2410的中断系统
4.4.1
IRQ偏移寄存器(INTOFFSET)
◦ 除上面介绍的5个中断控制寄存器以外,还有几个寄存 器与中断控制有关。 ◦ 中断偏移寄存器INTOFFSET给出IRQ模式的中断请求 中被响应的中断的地址(哪个IRQ模式的中断请求被响 应)。
S3C2410的中断系统
程序状态寄存器的F位和I位
S3C2410的中断系统
4.2.2
中断模式(INTMOD)
◦ S3C2410提供了两种中断模式,即FIQ(快速)模式 和IRQ(通用)模式。所有的中断源在中断请求时都要 确定使用那一种中断模式。INTMOD相应位为0,选通 用中断模式;INTMOD相应位为1,选快速中断模式。 上电或复位时INTMOD相应位为0,默认选通用中断模 式。
S3C2410的中断系统
4.2.1
◦ 如果CPSR(程序状态寄存器)的F位被设置为1,那么 CPU将不接受来自中断控制器的FIQ(快速中断请求); 如果CPSR程序状态寄存器的I位被设置为1,那么CPU 将不接受来自中断控制器的IRQ(通用中断请求)。因 此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄 存器的F位和I位清零,并且中断屏蔽寄存器INTMSK中 相应的位也要清零。 ◦ 在使用C语言编写控制程序时,CPSR在程序中是不可 见的。F位和I位清零可由中断屏蔽寄存器INTMSK中相 应的位清零自动完成。
4.4.2
外部中断控制寄存器(EXTINTn)
◦ EXTINTn配置外部中断的触发类型是电平触发还是边 沿触发以及触发的极性。EXTINT[2 :0]的具体配置 参考数据手册。
S3C2410的中断系统
4.4.3
外部中断屏蔽寄存器 (EINTMASK)
◦ EINTMASK[23:4]分别对应外部中断23~4,该位 等于1,对应外部中断被屏蔽;该位等于0,对应外部 中断被使能,EINTMASK[3 :0〕保留。
S3C2410的中断系统
4.5.1
主程序工作
◦ I/O口初始化,有些中断源要通过I/O口向CPU申请中断,如外部 中断0(EXTINT0)通过F口的GPF0、外部中断11(EXTINT11) 通过G口的GPG3向CPU申请中断,此时两个口的控制寄存器 GPFCON和GPGCON的要设置成:GPFCON[1:0]=1,0; GPGCON[7:6]=1,0。具体见下章I/O口介绍。 ◦ 设中断服务函数地址,S3C2410在2410addr.h中定义了40个宏, 设置了系统支持的中断服务函数的指针,设中断服务函数地址就 是把我们编写的中断服务函数的地址(就是中断服务函数的名字) 赋予相应的函数指针。函数指针定义如下:(见课本)
S3C2410的中断系统
4.5.1
◦ 从上面可以看出,每个中断源的中断服务函数指针名是 固定的:pISR+中断源。 ◦ 设中断触发方式,触发方式有5种,有上升沿、下降沿、 双沿、低电平、高电平触发方式,外部中断触发方式在 外部中断控制寄存器(EXTINTn)中设定。如EINT0触 发方式在EXTINT0[2:0] 中设定,[2:0]=000低电 平、001高电平、01X下降沿、10X上升沿、11X双沿 触发,更详细内容见S3C2410.pdf.。
S3C2410的中断系统
S3C2410的处理器中断
◦ 实际上最初CPU内核只有FIQ和IRQ两种中断,其他中 断都是各个芯片厂家在设计芯片时,通过加入一个中断 控制器来扩展定义的。这些中断根据中断优先级的高低 来进行处理,更符合实际应用系统中要求提供多个中断 源的要求。 ◦ 例如,如果定义所有的中断源为IRQ中断(通过中断模 式寄存器设置),并且同时有10个中断发出请求,那 么这时可以通过读中断优先级寄存器来确定哪一个中断 被优先执行
S3C2410的中断系统
4.5.3
◦ 在主程序中,系统初始化后,程序进入死循环,等待中 断。同时,初始化定时器1,设定时器中断时间,当设 定时器定时时间到,产生中断。 ◦ 在北京精仪达盛科技公司EL-ARM830教学实验系统中, 接有两个LED发光管,两个LED发光管的阴极分别接 I/O口G的bit8和bit9,阳极通过电阻接电源。 ◦ 在中断服务程序中,把LED1和LED2两只发光管循环 亮灭,每循环亮灭一次,说明来一次中断。关于定时器 操作,可参考第十一章内容。(程序见课本)
S3C2410的中断系统
S3C2410的处理器中断
◦ 当多重中断源请求中断时,硬件优先级逻辑会判断哪一 个中断将被执行;同时,硬件逻辑将会执行位于0x18 (或0x1C)地址处的指令,再由软件编程识别各个中 断源,然后再根据中断源跳转到相应的中断处理程序
S3C2410的中断系统
中断控制
◦ 4.2.1 程序状态寄存器的F位和I位 ◦ 4.2.2 中断模式(INTMOD) ◦ 4.2.3 中断挂起寄存器(INTPND)和中断源挂起寄 存器 (SRCPND) ◦ 4.2.4 中断屏蔽寄存器(INTMSK) ◦ 4.2.5 中断优先寄存器 (PRIORITY)
S3C2410的中断系统
4.5
中断控制程序编写步骤
◦ 4.5.1 主程序工作
◦ 4.5.2 中断服务程序工作
◦ 4.5.3 中断服务程序示例
S3C2410的中断系统
4.5.1
主程序工作
◦ 先清除中断源挂起寄存器(SRCPND)和中断挂起寄 存器(INTPND),可用rSRCPND= rSRCPND和 rINTPND=r INTPND来完成; ◦ 设中断模式,这里使用通用中断, rINTMOD=0x00000000;因上电或复位时 rINTMOD是清0的,这步也可以不做。
中断优先寄存器 (PRIORITY)
S3C2410的中断系统
S3C2410的中断系统
S3C2410的中断系统
4.3
S3C2410中断源
◦ 表4-2所示为S3C2410的56个中断源。在56个中断源 中,有30个中断源提供给中断控制器,其中,外部中 断EINT4~EINT7通过“或”的形式提供一个中断源送 至中断控制器,EINT8~EINT23也通过“或”的形式 提供一个中断源送至中断控制器。
S3C2410的中断系统
S3C2410的处理器中断
◦ 片内UARTn中断和EINTn是逻辑“或”的关系,它们 共用一根中断请求线。 ◦ 中断控制逻辑(interruption controller logic)的任 务是在片内外围和外部中断源组成的多重中断发生时, 选择其中一个中断,通过FIQ(快速请求中断)或IRQ (通用中断请求)向CPU内核发出中断请求。
S3C2410的中断系统
4.3
S3C2410中
◦ 56个中断源具体来说: ◦ EINT0~EINT23(24个)、nBATT_FLT(1个)、INT_TICK(1个)、 INT_WDT(1个)、INT_TIMER0~INT_TIMER4(5个)、 INT_UART0~INT_UART2(各3个,共9个)、INT_LCD(2个)、 INT_DMA0~INT_DMA3(4个)、INT_SDI(1个)、 INT_SPI0~INT_SPI1(2个)、INT_USBD(1个)、 INT_USBH(1个)、INT_IIC(1个)、INT_RTC(1个)、 INT_ADC(2个),共56个。
◦ 上面已介绍过,S3C2410共有56个中断源,有26个中 断控制器,外部中断EXTIN8~23共用一个中断控制器, 外部中断EXTIN4~7共用一个中断控制器,9个UART 中断分成3组,共用3个中断控制器,ADC和触摸屏共 用一个中断控制器。中断的优先级是由主组号和从ID 号的级别控制,具体见表4-1。 ◦ 中断优先级设置模块如图4-2所示:
S3C2410的中断系统
4.2.3
中断挂起寄存器(INTPND)和 中断源挂起寄存器 (SRCPND)
◦ 如果屏蔽位被设置为1,则相应的SRCPND位会被置1, 而INTPND寄存器不会有变化;如果INTPND被置位, 只要标志I或标志F被清零,就会执行相应的中断服务子 程序。在中断服务子程序中要先向SRCPND中的相应 位写1来清除挂起状态,再用同样的方法来清除 INTPND相应位的挂起状态。 ◦ 注意:可以通过INTPND= INTPND来实现清零,以 避免写入不正确的数据引起错误。
S3C2410的中断系统
4.2.4
中断屏蔽寄存器(INTMSK)
◦ 当INTMSK寄存器的相应位(屏蔽位)为1时,对应的 中断被禁止;当INTMSK寄存器的屏蔽位为0时,则相 应的中断正常实行。如果一个中断的屏蔽位为1,则该 中断请求不被受理。
S3C2410的中断系统
4.2.5
中断优先寄存器 (PRIORITY)
S3C2410的中断系统
4.4
◦ 在4.2节中已介绍中断控制器有5个,但S3C2410有8 个寄存器与中断有关,有5个专用于中断控制:源挂起 寄存器(SRCPND)、中断模式寄存器(INTMOD)、 中断屏蔽寄存器(INTMSK)、中断优先权寄存器 (PRIORITY)和中断挂起寄存器(INTPND),与中 断有关的寄存器如表4-3所列。 ◦ 中断源发出的中断请求首先被寄存在中断源挂起寄存器 (SRCPND)中,中断模式寄存器INTMOD把中断请 求分为两组:快速中断请求(FIQ)和通用中断请求 (IRQ),中断优先权寄存器(PRIORITY)处理中断 的优先级。