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。
ARM9(S3C2440)之一中断系统理论知识

一 ARM9(S3C2440)的中断系统——理论知识转载自:骨Zi里德骄傲概述S3C2440A 中的中断控制器接受来自60 个中断源的请求。
提供这些中断源的是内部外设,如DMA 控制器、UART、IIC 等等。
在这些中断源中,UARTn、AC97 和EINTn 中断对于中断控制器而言是“或”关系。
当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T 内核的FIQ或IRQ。
仲裁步骤由硬件优先级逻辑决定并且写入结果到帮助用户通告是各种中断源中的哪个中断发生了的中断挂起寄存器中中断控制器操作程序状态寄存器(PSR)的F 位和I 位如果ARM920T CPU 中的PSR 的F 位被置位为1,CPU 不会接受来自中断控制器的快中断请求(FIQ)。
同样的如果PSR 的I 位被置位为1,CPU 不会接受来自中断控制器的中断请求(IRQ)。
因此,中断控制器可以通过清除PSR 的F 位和I 位为0 并且设置INTMSK 的相应位为0 来接收中断。
中断模式ARM920T 有两种中断模式的类型:FIQ 或IRQ。
所有中断源在中断请求时决定使用哪种类型。
中断挂起寄存器S3C2440A 有两个中断挂起寄存器:源挂起寄存器(SRCPND)和中断挂起寄存器(INTPND)。
这些挂起寄存器表明一个中断请求是否为挂起。
当中断源请求中断服务,SRCPND 寄存器的相应位被置位为1,并且同时在仲裁步骤后INTPND 寄存器仅有1 位自动置位为1。
如果屏蔽了中断,则SRCPND 寄存器的相应位被置位为1。
这并不会引起INTPND 寄存器的位的改变。
当INTPND 寄存器的挂起位为置位,每当I 标志或F 标志被清除为0 中断服务程序将开始。
SRCPND 和INTPND 寄存器可以被读取和写入,因此服务程序必须首先通过写1 到SRCPND寄存器的相应位来清除挂起状态并且通过相同方法来清除INTPND 寄存器中挂起状态。
S3C2440系统中断

S3C2440系统中断1.1S3C2440系统中断CPU和外设构成了计算机系统,CPU和外设之间通过总线进行连接,用于数据通信和控制,CPU管理监视计算机系统中所有硬件,通常以两种方式来对硬件进行管理监视:●查询方式:CPU不停的去查询每一个硬件的当前状态,根据硬件的状态决定处理与否。
好比是工厂里的检查员,不停的检查各个岗位工作状态,发现情况及时处理。
这种方式实现起来简单,通常用在只有少量外设硬件的系统中,如果一个计算机系统中有很多硬件,这种方式无疑是耗时,低效的,同时还大量占用CPU资源,并且对多任务系统反应迟钝。
●中断方式:当某个硬件产生需要CPU处理的事件时,主动通过一根信号线“告知”CPU,同时设置某个寄存器里对应的位,CPU一旦发现这根信号线上的电平有变化,就会中断当前程序,然后去处理发出该中断请求。
这就像是医院重危病房,病房每张病床床头有一个应急按钮,该按钮连接到病房监控室里控制台一盏指示灯,只要该张病床出现紧急情况病人按下按钮,病房监控室里电铃会响起,通知医护人员有紧急情况,医护人员这时查看控制台上的指示灯,找出具体病房,病床号,直接过去处理紧急情况。
中断处理方式相对查询方式要复杂的多,并且需要硬件的支持,但是它处理的实时性更高,嵌入式系统里基本上都使用这种方式来处理。
系统中断是嵌入式硬件实时地处理内部或外部事件的一种机制。
对于不同CPU而言,中断的处理只是细节不同,大体处理流程都一样,S3C2440A的中断控制器结构如下图所示:图3-3 S3C2440中断控制器中断请求由硬件产生,根据中断源类型分别将中断信号送到SUBSRCPND(SubSourcePendi ng)和SRCPND(SourcePending)寄存器,SUBSRCPND是子中断源暂存寄存器,用来保存子中断源信号,SRCPND是中断源暂存寄存器,用来保存中断源信号。
中断信号可通过编程方式屏蔽掉,SUBMASK是子中断源屏蔽寄存器,可以屏蔽指定的子中断信号,MASK功能同SUBMASK 用来屏蔽中断源信号。
讲稿-09-S3C2410A的中断机制

ldr r8, =HandleEINT0 ;将中断向量表的首地址送入r8 add r8, r8,r9,lsl #2 ;r8<-r8+r9*4,因为每一项占用了四个字节,所 以r8就是当前中断向量的地址 ldr r8, [r8] ;获取了中断向量 str r8, [sp,#8] 将中断向量放入栈中 ldmfd sp!,{r8-r9,pc} ;通过出栈的方法使得PC为中断向量地址,且 恢复了r8和r9的值,从而内容完整地跳向对应中 断服务程序
中断向量表
;IntVectorTable HandleEINT0 HandleEINT1 HandleEINT2 HandleEINT3 HandleEINT4_7 HandleEINT8_23 HandleRSV6 HandleBATFLT # # # # # # # # 4 4 4 4 4 4 4 4
中断异常处理程序举例
sub sp, sp, #4 ;栈顶向下一个单元,在栈中给PC挪出地方 stmfd sp!, {r8-r9} ;将r8-r9入栈,后面要使用这两个寄存器 ldr r9, =INTOFFSET ;将中断偏移值寄存器的地址送入r9 ldr r9, [r9] ;这个操作后r9就是当前中断的中断偏移值
4 4 4 4 4 4 4 4 4 4 4
HandleDMA2 HandleDMA3 HandleMMC HandleSPI0 HandleUART1 HandleRSV24 HandleUSBD HandleUSBH HandleIIC HandleUART0 HandleSPI1 HandleRTC HandleADC
和中断控制相关的寄存器
S3C2410A的中断控制器包括6类寄存器: 中断源状态寄存器 中断模式寄存器 中断屏蔽寄存器 优先级寄存器 中断状态寄存器 中断偏移寄存器
S3C2410的外部中断实验

实验4 S3C2410 外部中断实验一、实验目的掌握S3C2410 通用F口配置为外部中断的方法,会在MDK中可视化配置外部中断,理解外部中断的触发过程,熟练掌握和中断相关寄存器的使用以及中断服务函数的编程方法。
二、实验预备知识熟悉UP-NETARM2410实验箱的结构,S3C2410的外设接口电路,熟悉MDK编程软件的使用方法,熟悉汇编语言程序设计的一般方法。
三、实验内容将I/O口中的PF2配置成外部中断 2 EINT2,编写汇编语言程序编译并下载到UP-NETARM2410实验箱,控制GPC5/GPC6/GPC7上所接的三个LED闪烁,主程序中的实验现象是什么?按下EINT2开关后触发外部中断2实验现象又是什么,请在实验结果中自己作答。
四、参考程序主程序核心代码:32 LDR R0, = SRCPND33 MOV R1, #0x034 STR R1, [R0, #0x4]35 MVN R1, #0x0436 STR R1, [R0, #0x8]37 MOV R1, #0x7F38 STR R1, [R0, #0xC]394041 ledflash42 LDR R0, =GPCDA T_ADDR43 MOV R1, #0x044 EOR R1, R1, #LED_MASK45 STR R1, [R0] ; LED OFF4647 BL Delay4849 MOV R1, #0x6050 EOR R1, R1, #LED_MASK51 STR R1, [R0] ; LED ON5253 BL Delay5455 B ledflash56 Delay57 MOV R3, #0x0F000058 MOV R4, #0x0F000059 subcycle160 SUB R3, R3, #161 subcycle262 SUB R4, R4, #163 CMP R4, #064 BGE subcycle26566 CMP R3, #067 BGE subcycle168 BX LR中断服务程序核心代码:136 ; int2 service137 int2_isr138 ; SUB R14, R14, #4139 ; STMFD SP!, {R0-R8, R14}; save env 140 STMFD SP!, {R0-R1}141142 LDR R0, = SRCPND143 MOV R1, #0x40144 STR R1, [R0] ; clear SRCPND145146 LDR R1, [R0, #0x10]147 STR R1, [R0, #0x10] ; clear INTPND 148149 ; int2-LED3 ON of OFF150 LDR R0, =GPCDAT_ADDR151 MOV R1, #0x0152 EOR R1, R1, #LED3_MASK153 STR R1, [R0] ; LED OFF154155 BL Delay156157 MOV R1, #0x80158 EOR R1, R1, #LED3_MASK159 STR R1, [R0] ; LED ON160161 BL Delay五、实验结果请自己作答。
s3c2410中断控制工作原理和编程

存在的问题S3C2410中断控制器工作原理一般说来cpu只有一个或两个外部中断输入管脚,但是s3c2410这个soc有56个外部中断源头,这56个外部中断源头是通过说s3c2410内部的中断控制器来管理的,中断控制器的主要工作就是管理外部中断源:开关某个中断源、中断优先级排队、向cpu发出中断请求信号。
ARM的异常中断类型在嵌入式系统中外部设备和cpu通信主要是靠中断机制来实现的。
中断功能可以解决CPU 内部运行速度远远快于外部总线速度而产生的等待延时问题。
ARM提供的FIQ和IRQ异常中断用于外部设备向CPU请求中断服务,一般情况下都是采用IRQ中断。
1313013130本次实验就是通过INTMASK(4A000008)来断开或闭合次“开关”从而达到是否屏蔽次外部中断对以上寄存器的简介:(重点) 1SRCPND ――源中断指示寄存器SRCPND 寄存器32位中的每一位对应着一个中断源,每一位被设置为1,则相应的中断源产生中断请求并且等待中断被服务。
因此,这个寄存器表明了哪个中断源在等待中断请求被处理。
注意,SRCPND 寄存器的每一位是由中断源自动设置的,而不管INTMSK 寄存器中的屏蔽位是否置1。
另外,SRCPND 寄存器不影响中断控制器的优先级逻辑。
在指定中断源的中断服务程序中,SRCPND 寄存器相对应的位必须被清除,这样才可以正确响应来自同一中断源的中断请求。
如果从ISR 返回而没有清除相应的位,也就是SRCPND 寄存器中的对应的位还是1,那么就会一直响应这个中断请求。
SRCPND 中相应的中断位清除的时间依赖于用户的需求,如果想要从同一中断源接收另一次有效的中断请求,你在第一次就应该清除相应的位,并且使能中断。
(怎么理解?) 用户可以通过向SRCPND 寄存器的相应位写“1”(不是写0 吗?因为s3c2410设计成写1就有清0的功能),这样可以清除该位。
INTPND――中断请求寄存器中断请求寄存器32位中的每一位对应着相应的中断请求,经过优先级逻辑后,INTPND 寄存器只能有一位被设置为1,并且向ARM产生中断请求。
S3C2440中断体系结构

S3C2440中断体系结构一、S3C2440中断体系结构1)ARM体系CPU的7种工作模式用户模式(usr):ARM处理器正常的程序执行状态快速中断模式(fiq):用于高速数据传输或通道处理中断模式(irq):用于通用的中断处理管理模式(svc):操作系统使用的保护模式数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护系统模式(sys):运行具有特权的操作系统任务未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真除用户模式外,其他6种工作模式都属于特权模式,大多数程序运行于用户模式,进入特权模式是为了处理中断、异常,或者访问被保护的系统资源。
ARM体系的CPU有以下两个工作状态ARM状态:此时处理器执行32位的字对齐的ARM指令Thumb状态:此时处理器执行16位的、半字对齐的Thumb指令ARM920T有31个通用的32位寄存器和6个程序状态寄存器。
这37个寄存器分为7组,如下图所示:图中R0-R15可以直接访问,这些寄存器除了R15外都是通用寄存器,既可以保存地址也可以保存数据。
R13称为栈指针寄存器,通常用于保存栈指针R14称为程序连接寄存器(LR),当执行BL子程序调用指令时,R14得到R15(程序计数器PC)的备份。
而当发生中断或异常时,对应的R14_svc,R14_irq,R14_abt或R14_und中保存R15的返回值R15是程序计数器快速中断模式有7个备份寄存器R8_fiq-R14_fiq,这使得进入快速中断模式执行很大部分程序时(不改变R0-R7),不需要保存任何寄存器。
用户模式、管理模式、数据访问终止模式和未定义指令中止模式都含有两个独占的寄存器副本R13、R14,这样令每个模式拥有自己的栈指针寄存器和连接寄存器。
每种工作模式还有寄存器CPSR(当前程序状态寄存器),它被用于标识各种状态和当前处于哪种工作模式,如下图所示:当一个异常发生时,将切换进入相应的工作模式,这是ARM920T CPU将自动完成如下工作:①在异常工作模式的连接寄存器R14中保存前一个工作模式的下一条即将执行的指令地址。
S3C2410中断处理

S3C2410中断处理在介绍2410的中断处理之前,我们不得不先看看先把ARM的异常向量表(Exception Vectors),下面对异常向量表(Exception Vectors),做一个简单的介绍:ARM的异常向量表一般存放在0x00000000处,ARM920T能处理有7个异常,他们分别是:Reset(复位),Undefined instruction,Software Interrupt,Abort 舍弃(prefetch),Abort (data),IRQ,FIQ下面是系统源码片段:上面这部分片段一般出现在一个名叫“head.s”的汇编文件里,“b Handle_Reset”这条语句就是系统上电之后运行的第一条语句。
因为上电后CPU会从SDRAM的0x00000000处取第一条指令并执行。
上所示会放在0x00000000地址处,以后每当系统有异常出现,则CPU会根据异常号,从内存0x00000000地址处开始查中断向量表并做相应的处理,比如系统触发了一个IRQ异常,IRQ为6号异常,则CPU将把PC指向0x00000000地址处运行,调用中断服务程序。
S3C2410芯片可以接收56个中断源,产生32个中断请求。
这些中断源来自两部分:内部外设,如DMA控制器,UA RT等和外部引脚线。
A RM920T具有两种类型的中断模式:FIQ和IRQ,通过判定优先级产生IRQ或FIQ中断。
如果在ARM920T的CUP中的PSR(程序状态寄存器)的控制位F位置1,则CPU从中断控制器中不接受FIQ中断,如果在A RM920T的CUP中的PSR (程序状态寄存器)的控制位I位置1,则CPU从中断控制器中不接受IRQ中断,因此中断控制器通过清除F-bit位或I-bit位产生中断。
S3C2410的中断异常处理模块有以下寄存器构成:∙ SRCPND,∙INTMODE,∙INTMSK,∙PRIORITY,∙INTPND,∙INTOFFSET,∙SUBSRCPND,∙INTSUBMSK。
ARM嵌入式C编程标准教程第四章S3C2410的中断系统

2014年福建厦门中考满分作文:老巷的距离老巷的距离黄昏,岁月的老巷。
多少人在这寻找散落的过往。
年代更替,一定有些什么被我遗忘。
否则夕阳的剪影不会那么让人神伤。
深巷内,金属碰击发出最原始的音,踏着饱经风霜的青石板,来到面前--叮……叮叮……叮小时候,住在巷尾,一听见买麦芽糖独特的吆喝声,就再也坐不住了,满脑子尽是卖糖的老人和他的麦芽糖。
老人话不对,也不常吆喝。
穿着靛青的衣,瘦小,皮肤黝黑,像从旧画里走出来的人。
他的糖担绝对是幅旧画:担两头各有一方正的木箱,箱里装的正是麦芽糖。
老人手持一柄铁锤和一长方弧形刀片--或许因饱受糖浆浸渍,铁质部分散发着白色光感。
挑糖担的老人走街串巷,边走边敲,诱惑着我们,带给我们幸福与快乐。
只要听见那独特的吆喝孩子们立即飞奔到家,拿出早已备下的破烂出来。
这是老人身后便多了一条长长的尾巴,打闹着来到巷口。
坐在凤凰木下换那甜腻的糖块。
我跑得慢,也笨拙,常常在长满青苔的石板上滑倒,惹得一身泥浆,竟也未哭,咬着牙,向巷口奔去。
真正108块砖,对于常往来于巷口与巷尾的我早已了然于心。
可每当我气吁吁从尾跑到头,孩子们早早就散去,留下的只有树下的老人和与夕阳一样火红的凤凰花。
刚才奔跑摔倒的疼似涌上心头,我低声啜泣着。
休息的老人,看着满身泥巴的我,神秘兮兮地招手叫唤我来,我跑去,掌心一打开,里面是一小方用红布裹着的麦芽糖,躺在几乎裂成地图的手掌里。
在夕阳下,折射出耀眼的金黄。
伸出舌头,小心舔,那是掌心的甜,是一丝一缕的填满心的。
一条老巷,一个老人,一块方糖。
已是黄昏,晚归的燕子在天边划过一抹精灵般的呢喃,很快就是万家灯火了。
金属碰击发出的最原始的声音,也许它踏过的不仅仅是一百零八块青石板--叮……叮叮……叮22014年福建厦门中考满分作文:今天与明天的距离今天与明天的距离我们命定的目标与道路不是受苦也不是享乐,而是行动在每一个明天都要比今天更前进一步--胡费罗当蜘蛛网无情地查封了你的炉台,灰烬的余烟叹息着末日的悲哀,你是否痛恨如今。
嵌入式系统第四章S3C2410

注意:补充引脚信号
二、存储器的控制寄存器
内存控制器为访问外部存储空间提供存储器控制信号, S3C2410X存储器控制器共有13个寄存器。
寄存器 地 址
BWSCON 0x48000000 BANKCON0 0x48000004 BANKCON1 0x48000008
S3C2410X的存储空间分成8组,最大容量是1GB, bank0---bank5为固定128MB,bank6和bank7的容量可编 程改变,可以是2、4、8、16、32、64、128MB,并且 bank7的开始地址与bank6的结束地址相连接,但是二者的 容量必须相等。
bank0可以作为引导ROM,其数据线宽只能是16位和 32位,复位时由OM0、OM1引脚确定;其它存储器的数据 线宽可以是8位、16位和32位。
12、编写一程序,使用timer0产生并输出频率为10KHz、占空
比为1/2的方波。设f pclk=50MHz。(注意对timer0和相关
引脚初始化) 13、编写一程序,利用S3C2410X的PWM功能对一直流电机
进行调速,要求使用timer1产生并输出频率为10KHz、占 空比可变的方波进行控制,电机的转速变化如下图所示。
提示:C语言指向特定地址的方法: (1)#define rGPCDAT (*(volatile unsigned *)0x56000024) (2)int *rGPCDAT=0x56000024; (3)int *rGPCDAT;
rGPCDAT=0x56000024; 用第一种方法为好。
11、S3C2410X的定时器系统有哪些特点?由哪几部分构成?相 关的寄存器有哪些?是如何工作的?
- 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)处理中断 的优先级。