ARM中断程序的原理和实现

ARM中断程序的原理和实现
ARM中断程序的原理和实现

摘要:本文首先简要概述了ARM处理器的异常中断种类、响应和返回过程;然后重点讨论了中断解析程序的原理和实现,并分别给出了普通中断和向量中断的处理示例流程图和详细的参考代码。

关键词:异常中断;中断解析程序;向量中断;ARM处理器

引言

ARM编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发,而这往往是困扰初学者的一个难题。中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。

ARM处理器异常中断处理概述

当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场。从异常中断处理程序退出时,要恢复被中断的程序的执行现场。

ARM体系中通常在存储地址的低端固化了一个32字节的硬件中断向量表,用来指定各异常中断及其处理程序的对应关系。当一个异常出现以后,ARM微处理器会执行以下几步操作:

1)保存处理器当前状态、中断屏蔽位以及各条件标志位;

2)设置当前程序状态寄存器CPSR中相应的位;

3)将寄存器lr_mode设置成返回地址;

4)将程序计数器(PC)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。

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

从异常中断处理程序中返回包括下面两个基本操作:

1)恢复被屏蔽的程序的处理器状态;

2)返回到发生异常中断的指令的下一条指令处继续执行。

当异常中断发生时,程序计数器PC所指的位置对于各种不同的异常中断是不同的,同样,返回地址对于各种不同的异常中断也是不同的。例外的是,复位异常中断处理程序不需要返回,因为整个应用系统是从复位异常中断处理程序开始执行的。

支持中断跳转的解析程序

解析程序的概念和作用

如前所述,ARM处理器响应中断的时候,总是从固定的地址开始的,而在高级语言环境下开发中断服务程序时,无法控制固定地址开始的跳转流程。为了使得上层应用程序与硬件中断跳转联系起来,需要编写一段中间的服务程序来进行连接。这样的服务程序常被称作中断解析程序。

每个异常中断对应一个4字节的空间,正好放置一条跳转指令或者向PC寄存器赋值的数据访问指令。理论上可以通过这两种指令直接使得程序跳转到对应的中断处理程序中去。但实际上由于函数地址值为未知和其它一些问题,并不这么做。

这里给出一种常用的中断跳转流程:

图1 中断跳转流程图

这个流程中的关键部分是中断向量表,为了让解析程序能找到向量表,应该将向量表的地址固定化(编程者自定义)。这样,整个跳转流程的所有程序地址都是固定的,当中断触发后,就可以自动运行。其中,只有向量表的内容是可变的,编程者只要在向量表中填入正确的目标地址值就可以了。这使得上层中断处理程序和底层硬件跳转有机地联系起来。

解析过程示例

以一次IRQ跳转为例,假定中断向量表定义在0x00400000开始的外部RAM空间:

图2 中断解析示例流程

图2中实线表示的流程都用ARM汇编语言编写,一般作为boot代码的一部分放在系统的底层模块中。填写向量表的操作可以在上层应用程序中方便地实现,比如在C语言中:

*( int *(0x00400018)) = (int) ISR_IRQ;

这样就将IRQ中断的服务程序入口地址(0x00300260)填写到中断向量表中的固定地址0x00400018开始的4字节空间了。

如此一来,就可避免在应用程序中计算中断的跳转地址,并且可以很方便的选择不同的函数作为指定中断的服务程序。当然,在程序开发时要合理开辟好向量表,避免对向量表地址空间不必要的写操作。

解析程序的扩展

众所周知,在ARM处理器中会包含很多中断源,通常会在ARM内核外面扩展一个中断控制器来管理各种原因产生的中断。比如,三星公司的S3C4510B处理器中的IRQ/FIQ类型的中断源可以有21个,

S3C44B0X有26个。这时候中断处理的原理还是一样的,无非是向量表更长,并且当一个中断触发以后,需要在解析程序里查询中断控制器的状态来确定具体的中断源,再根据中断源来读取向量表中的对应地址内容。其处理流程可用图3表示。

图3 中断解析的扩展

相比图2,图3中多了一级的跳转,也就是在第一次解析跳转到IRQ/FIQ服务程序中后,再进行第二次的解析_中断源的识别。

向量中断的处理

一些处理器在设计外扩的中断控制器时提供了一种叫做“向量中断”的中断跳转机制。这与前文叙述的扩展解析跳转流程有所不同,它不需要软件来识别具体的中断源,也就是不需要添加图3中的IRQ/FIQ服务程序,而完全由硬件自动跳转到对应的中断地址。其它跳转流程的原理都是一样的。这相当于扩展了ARM 内核的硬件中断向量表,减小了中断响应延时。以S3C44B0X处理器的外部中断0为例,需要在其对应的硬件固定跳转地址0x00000020处添加指令:ldr pc,=HandlerEINT,使得程序跳转到其服务程序HandlerEINT0处执行。

图4 向量中断解析流程示例

结语

本文介绍的中断处理机制是嵌入式编程中常常采用的方法,其原理是通用的。当然,在实际开发中,需要根据系统处理器ARM内核的中断特征和处理器自身的中断控制器特点具体细化流程图中的各个步骤和改写参考代码。

ARM内核的中断技术

摘要:以ARM7TDMI处理器为例,详细介绍ARM内核的三种中断:常规中断、快中断和软件中断;结合应用,给出优化的中断处理程序的ARM指令代码,对电子设计人员有效大的参考价值。

关键词:ARM 中断快速精简指令系统

1 ARM7TDMI简介

ARM7TDMI是一款经典的通用32位微处理器,采用精简指令系统(RISC)和流水线结构。典型应用如GPS、PDA、双向寻呼机、移动电话、板卡间高速通信等。

ARM7TDMI 定义有7种工作模式,本文涉及到的有:用户模式,程序正常运行时的模式;快中断模式,处理器响应快中断而进入的模式;中断模式,处理响应常规中断而进入的模式;监督模式,操作系统的保护模式。处理器响应软件中断时即进入监督模式。下面重点介绍ARM7TDMI的中断特性。主要特性如表1所列。

表1 中断特性表

向量地址中断类型工作模式优先级返回地址

0x8 软件中断 SWI模式 6 pc-4

0x18 常规则中断 IRQ模式 4 pc-8

0x1C 快中断 FIQ模式 3 pc-8

ARM7TDMI具有常规中断(IRQ)、快中断(FIQ)和软件中断(SoftWare Interrupt)三种中方式。常规中断和快中断都是硬件中断。

快中断是为支持数据传输或快速数据通道而设计的,为快速处理快中断。①快中断被设为最高中断优先级;②在快中断模式增设了7个私有工作寄存器,从而避免了由于主工作寄存器数据的保存和恢复而带来了额外开销;③快中断处理程序处于异常向量表的最后位置,因此可紧接异常向量表书写快中断处理程序,而不必进行程序跳转操作,避免了刷新指令流水线和高速缓存。

软件中断是一种由用户设置的同步中断,由程序指令产生,不像硬件中断那样由外部事件触发。软件中断允许运行在用户模式的程序进入监督模式,并运行监督态下的函数。在 ARM7TDMI的硬件调试系统中,应用程序可利用软件中断来申请半自主(semihosting)式操作,例如,打开主机中的一个文件、向调试通道发送一个字符等等(这些操作必须依赖主机中C程序库才能运行,因此被称为半自主式的)。利用软件中断机制,可以直观和高效地仿真调试应用程序。另外,软件中断也可用于一般性的程序控制。

2 响应中断和中断返回

(1)当中断产生时,ARM7TDMI将执行的操作

①把当前程序状态寄存器(CPSR)的内容拷贝到相应的备份程序状态寄存器(SPSR)。当前工作模式、中断屏蔽位和状态标志被保存下来。

②转入相应的模式,并关闭常规中断。如响应快中断,则同时关闭快中断。

③把程序计数器(pc)的值减4后,存入相应的连接寄存器(1r)。

④将程序计数器指向相应的中断向量。

(2)由中断返回时,ARM7TDMI将完成的操作

①将备份程序状态寄存器的内容拷贝到当前程序状态寄存器,恢复中断前的状态。

②清除相应禁止中断位(如果已设置的话)。

③把连接寄存器的值拷贝到程序计数器,继续运行原程序。

(3)返回地址的计算

ARM7TDMI采用流水线结构:当一条指令被执行时,下一条指令正被译码,而第三条指令被从内存中取出。当程序计数器未更新的,pc指向从内存中取出的指令,(pc-4)指向当前指令的一条指令。

处理器响应软件中断时,由于软件中断由指令自身产生,程序计数器还没有更新,(pc-4)正好指向当前指令的下一条指令。因此,只要在中断处理程序最后加入MOVS pc,lr把连接寄存器的值赋给程序计数器即可。

ARM7TDMI总是在一条指令执行完毕后,才去检查是否有硬件中断信号和中断屏蔽状态。此时,程序计数器已经更新,(pc-4)指向当前指令的下两条指令。因此要先把连接寄存器的内容减去4(指向pc-8)后,再赋给程序计数器。要添加的代码是SUBS pc,lr #4

3 中断处理程序的编写

(1)软件中断处理程序的编写

软件中断指令的格式如图1所示。低24位立即数为软件中断号。在中断处理程序中,必须首先得到软件中断号,然后根据中断号执行不同代码。以下的中断处理程序,在软件中断号为1时,将端口A的0号引脚置“1”。

STMFD sp!,{r0-r12,lr} //保存各工作寄存器

LDR r0,{lr,#-4} //得到该软件中断指令

BIC r0,r0,#0xff000000 //从中取出中断号

ADR r2,SWIJumpTable //r2指向代码入口表

LDR pc,[r2,r0,LSL #2] //把r0中的值乘4后加到r2。将//程序计数器指向中断号对应的代码

入口地址

SWIJumpTable //代码入口表

DCD SWInum0

DCD SWInum1

……

SWInum0 //中断号为0时的处理代码(略)

SWInum1 //中断号为1时的处理代码

MOV r0,#0x80000000 //r0指向端口A

STRB r0,#0x01 //A口0脚置“1”

B EndofSWI //跳转

EndofSWI

LDMFD sp! {r0-r12,pc} //恢复各寄存器,返回原程序

(2)常规中断处理程序的编写

为快速执行,常规中断处理程序一般用汇编指令编写。在编写可重入常规中断处理程序(运行时仍可响应常规中断)时,必须先把链接寄存器和程序用到的工作寄存器入栈,然后才能开放中断;各寄存器出栈前,必须先关闭中断。这样可防止因寄存器崩溃而无法返回的情况发生。下文介绍了一个与中控制器相配置的可重入的常规中断处理程序。当若干中断源同时有效时,中断控制器(基址为IntBase)把16个中断源中优先级最高的一个存入中断寄存器(偏移地址为 IntLevel)中,并发出硬件中断信号。

SUB lr,lr,#4 //得至并保存返回地址

STMFD sp!,{lr}

MRS r14,SPSR //把SPSR和sl2入栈

STMFD sp!,{r12,r14}

MOV r12,#IntBase

LDR r12,[r12,#IntLevel] //将最高优先级号存入r12

MRS r14,CPSR. //开中断

BIC r14,r14,#0x80

MSR CPSR_c,r14

LDR PC,[PC,r12,LSL #2] //将pc指向该优先级号对应的处理代码入口

NOP //补位

DCD Priority0Handler //代码入口表

DCD Priority 1 Handler

DCD Priority 2 Handler

……

Priority0Handler //0优先级中断处理代码

STMFD sp!,{r0-r11} //保存工作寄存器

……(略) //具体代码

LDMFD sp!,{r0-r11} //恢复工作寄存器

MRS r12,CPSR //关中断

ORR r12,r12,#0x80

MSR CPSR_c,r12

LDMFD sp!,{r12,r14} //恢复r12

MSR SPSR_csxf,r14 //恢复备用程序状态寄存器(SPSR)

LDMFD sp!,{pc}^ //返回原程序

Priority 1 Handler //优先级中断处理代码(略)

(3)快中断处理程序的编写

为保证高速处理,快中断处理程序必须要用汇编语言编写,而且必须是非重入的。一般快中

断处理程序主要是些数据存取指令,就不具体介绍了。

结束语

中断技术是处理器和系统芯片开发的重要技术。快速、高效的中断处理程序是实时多任务系统设计成功的关键。

ARM体系结构详解之ARM异常处理

ARM处理器异常处理 所谓异常就是正常的用户程序被暂时中止,处理器就进入异常模式,例如响应一个来自外设的中断,或者当前程序非法访问内存地址都会进入相应异常模式。 1.1异常分类 (1)复位异常 当CPU刚上电时或按下reset重启键之后进入该异常,该异常在管理模式下处理。 (2)一般/快速中断请求 CPU和外部设备是分别独立的硬件执行单元,CPU对全部设备进行管理和资源调度处理,CPU要想知道外部设备的运行状态,要么CPU定时的去查看外部设备特定寄存器,要么让外部设备在出现需要CPU干涉处理时“打断”CPU,让它来处理外部设备的请求,毫无疑问第二种方式更合理,可以让CPU“专心”去工作,这里的“打断”操作就叫做中断请求,根据请求的紧急情况,中断请求分一般中断和快速中断,快速中断具有最高中断优先级和最小的中断延迟,通常用于处理高速数据传输及通道的中数据恢复处理,如DMA等,绝大部分外设使用一般中断请求。 (3)预取指令中止异常 该异常发生在CPU流水线取指阶段,如果目标指令地址是非法地址进入该异常,该异常在中止异常模式下处理。 (4)未定义指令异常 该异常发生在流水线技术里的译码阶段,如果当前指令不能被识别为有效指令,产生未定义指令异常,该异常在未定义异常模式下处理。 (5)软件中断指令(swi)异常 该异常是应用程序自己调用时产生的,用于用户程序申请访问硬件资源时,例如:printf()打印函数,要将用户数据打印到显示器上,用户程序要想实现打印必须申请使用显示器,而用户程序又没有外设硬件的使用权,只能通过使用软件中断指令切换到内核态,通过操作系统内核代码来访问外设硬件,内核态是工作在特权模式下,操作系统在特权模式下完成将用户数据打印到显示器上。这样做的目的无非是为了保护操作系统的安全和硬件资源的合理使用,该异常在管理模式下处理。 (6)数据中止访问异常 该异常发生在要访问数据地址不存在或者为非法地址时,该异常在中止异常模式下处理。 1.1.22异常发生的硬件操作 在异常发生后,ARM内核会自动做以下工作: l保存执行状态:将CPSR复制到发生的异常模式下SPSR中; l模式切换:将CPSR模式位强制设置为与异常类型相对应的值,同时处理器进入到

嵌入式ARM期末考试试卷及参考答案

第一学期期末试题——嵌入式ARM(B卷) 题号一二三四五六总分 分数 说明:本试卷共四大题,试卷满分100分,考试时间120分钟。 一、填空题(请将答案填入题后括号中:共10小题,每小题2分,满分20分。 1、一般而言,嵌入式系统的构架可以分为4个部分:处理器、()、输入/输出和软件,一般 软件亦分为()和应用软件两个主要部分。 2、根据嵌入式系统使用的微处理器,可以将嵌入式系统分为(),嵌入式DSP,()以及片 上系统。 3、操作系统是联接硬件与应用程序的系统程序,其基本功能有进程管理、()、()、I/O 资源管理。 4、从嵌入式操作系统特点可以将嵌入式操作系统分为实时操作系统和(),其中实时系统亦 可分为()和软实时系统。 5、内核负责管理各个任务,或者为每个任务分配CPU时间,并且负责任务之间的(),内核 的基本服务是()。 6、嵌入式开发一般采用()方式,其中宿主机一般是指()。 7、哈佛体系结构数据空间和地址空间(),ARM920T采用()的内核架构。 8. ARM7TDMI采用()级流水线结构,ARM920TDMI采用()级流水线。 9 .按操作系统的分类可知,DOS操作系统属于顺序执行操作系统,UNIX操作系统属于()操 作系统,VXWORKS属于()操作系统。 10、ARM7TDMI中,T表示支持16位THUMB指令集,D表示(),M表示内嵌乘法器 MULTIPLIER,I表示(),支持在线断点和调试。 二、选择题(请将答案填入题后括号中:共10小题,每小题2分,满分20分。 1、下面哪种操作系统不属于商用操作系统。 ( A. WINDOWS XP B. LINUX C. VXWORKS D. WINCE 2. 下面哪点不是嵌入式操作系统的特点。 ( A. 内核精简 B. 专用性强 C. 功能强大 D. 高实时性 3. 下面哪种不属于嵌入式系统的调试方法。 (

单片机_C语言函数_中断函数(中断服务程序)

单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。 (1)中断源:中断请求信号的来源。(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))(2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序,并在执行完之后返回被中断程序继续执行。期间涉及到CPU响应中断的条件,现场保护,现场恢复。 (3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中断嵌套,优先权顺序为INT0,T0,INT1,T1,串行口),同一个优先级的中断,还存在优先权的高低。优先级是可以编程的,而优先权是固定的。 80C51的原则是①同优先级,先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。 80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制 (1)3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1 (2)中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1,INT0、INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP 具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。 在这里我们讲下注意的事项 (1)CPU响应中断后,TF0(T0中断标志位)和TF1由硬件自动清0。 (2)CPU响应中断后,在边沿触发方式下,IE0(外部中断INT0请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。所以在中断返回前必须撤出INT0和INT1引脚的低电平,否则就会出现一次中断被CPU多次响应。 (3)串口中断中,CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零。 (4)单片机复位后,TCON,SCON给位清零。 C51语言允许用户自己写中断服务子程序(中断函数) 首先来了解程序的格式: void 函数名() interrupt m [using n] {} 关键字 interrupt m [using n] 表示这是一个中断函数 m为中断源的编号,有五个中断源,取值为0,1,2,3,4,中断编号会告诉编译器中断程序的入口地址,执行该程序时,这个地址会传个程序计数器PC,于是CPU开始从这里一条一条的执行程序指令。 n为单片机工作寄存器组(又称通用寄存器组)编号,共四组,取值为0,1,2,3 中断号中断源 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1中断 4 串行口中断 (在上一篇文章中讲到的ROM前43个存储单元就是他们,这5个中断源的中断入口地址为: 这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只有8B,显然不

ARM中的中断要点

一、S5PV210中中断的特点 1、特点 ? Supports 93 vectored IRQ interrupts ? Fixed hardware interrupts priority levels ? Programmable interrupt priority levels ? Supports Hardware interrupt priority level masking ? Programmable interrupt priority level masking ? Generates IRQ and FIQ ? Generates Software interrupt 2、FIQ与IRQ的区别 1)FIQ和IRQ并不是中断源,而是中断的类型,我们可以将一个中断源设置成FIQ也可以设置成IRQ。2)FIQ是快速中断,IRQ是一般中断,FIQ的响应时间比IRQ短。 3)FIQ的优先级高于IRQ。 4)FIQ的分组寄存器(R8~R14)比IRQ(R13~R14)多。当在FIQ产生的时候,R8~R14不需要保存,响应的速度会快。 3、S5PV210的中断源

二、原理图分析

三、如何以中断的方式来检测按键:GPH2_2(EINT18) 、GPH2_3(EINT19) 按键的检测:轮询:将GPIO配置成输入……. 中断:将GPIO配置成外部中断……. 1、GPIO的配置,将一个GPIO配置成外部中断 2、外部中断的触发方式 (高电平、低电平、上升沿、下降沿)

3、外部中断的开关寄存器 0 = Enables Interrupt 打开中断 1 = Masked 关闭中断 4、外部中断判断寄存器 0 = Not occur 外部中断没有发生 1 = Occur interrupt 触发了中断

中断服务程序流程图

第一讲: 第六章I/O接口原理-接口、端口、编址 回顾:微机系统的层次结构,CPU、主机、接口电路及外部设备之间的结构关联,输入/输出的一般概念。 重点和纲要:微机系统主机与外部设备之间的数据传送,包括I/O端口的寻址方式,输入/输出的传送控制方式。 讲授内容: 6. 1 输入/输出数据的传输控制方式 一、输入/输出的一般概念 1.引言 输入/输出是微机系统与外部设备进行信息交换的过程。输入/输出设备称为外部设备,与存储器相比,外部设备有其本身的特点,存储器较为标准,而外部设备则比较复杂,性能的离散性比较大,不同的外部设备,其结构方式不同,有机械式、电动式、电子式等;输入/输出的信号类型也不相同,有数字信号,也有模拟信号;有电信号,也有非电信号;输入/输出信息的速率也相差很大。因此,CPU与外部设备之间的信息交换技术比较复杂。 CPU与外设之间的信息交换,是通过它们之间接口电路中的I/O端口来进行的,由于同一个外部设备与CPU之间所要传送的信息类型不同,方向不同,作用也不一样(例如数据信息、状态信息、控制信息、输入/输出等),所以接口电路中可以设置多个端口来分别处理这些不同的信息。 2.输入/输出端口的寻址方式 微机系统采用总线结构形式,即通过一组总线来连接组成系统的各个功能部件(包括CPU、内存、I/O端口),CPU、内存、I/O端口之间的信息交换都是通过总线来进行的,如何区分不同的内存单元和I/O端口,是输入/输出寻址方式所要讨论解决的问题。

根据微机系统的不同,输入/输出的寻址方式通常有两种形式:(1).存储器对应的输入、输出寻址方式 这种方式又称为存储器统一编址寻址方式或存储器映象寻址方式。 方法:把外设的一个端口与存储器的一个单元作同等对待,每一个I/O端口都有一个确定的端口地址,CPU与I/O端口之间的信息交换,与存储单元的读写过程一样,内存单元与I/O端口的不同,只在于它们具有不同的的地址。优点: ①CPU对I/O端口的读/写操作可以使用全部存储器的读/写操作指令,也可 以用对存储器的不同寻址方式来对I/O端口中的信息,直接进行算术、逻辑运算及循环、移位等操作。 ②内存与外设地址的分配,可以用统一的分布图。 ③不需要专门的输入、输出操作指令。 缺点: ①内存与I/O端口统一编址时,在地址总线根数一定的情况下,使系统中 实际可以直 接寻址的内存单元数减少。 ②一般情况下,系统中I/O端口数远小于内存单元数,所以在用直接寻址方 式来寻址这些端口时,要表示一个端口地址,必须用与表示内存单元地址相同的字节数,使得指令代码较长,相应地读/写执行时间也较长,这对提高系统的运行速度是不利的。 Mortorola公司的M6800CPU等均采用这种寻址I/O端口的方式。 3. CPU与外设之间所传送的信息类型 CPU与I/O端口之间所交换的信息,可以有下列几种类型: ①数据信息:包括数字量、模拟量、开关量等,可以输入、也可以输出 ②状态信息:这是I/O端口送给CPU的有关本端口所对应的外设当前状态 的信息。供CPU进行分析、判断、决策。 ③控制信息:这是CPU送给I/O端口的控制命令,使相应的外部设备完成 特定的操作。 数据信息、状态信息和控制信息是不同类型的信息,它们所起的作用也不一样。但在8086/8088微机系统中,这三种不同类型的信息的输入、输出过程是相同的。为了加以区分,可以使它们具有不同的端口地址,在端口地址相同的情况下,可以规定操作的顺序,或者在输入/输出的数据中设置特征位。

ARM嵌入式期末考试题库精心整理版

1、智能物联网工程师群,免费共享100G学习资料 2、 3、qq群号码:538435543 4、 5、欢迎大家加入交流经验,互相学习分享 6、cortex-A8 中只有CP14和CP15 两种协处理器。CP14用来测试(test),CP15用作系 统控制. 7、cortex-A8中协处理器CP15是协助处理器做管理工作,属于A8内部。 8、cortex-A8的通用寄存器和状态寄存器属于A8内部的32位存储器。 9、跳转指令BL只能实现前后32M的小范围的跳转,使用“LDR PC,..”伪指令可以实 现大范围的跳转。大范围4G 10、汇编中用#注释(F)。@ 错误,是@符号注释 11、根据ATPCS标准,子程序间通过寄存器R0、R1、R2、R3来传递参数,如果参数 多余4个,则多出的部分用堆栈传递,返回值用R0传递。 12、寄存器R13用作数据栈指针,记作SP。 13、寄存器R14称为链接寄存器,记作LR,它用于保存子程序的返回地址。 14、寄存器R15是程序计数器,记作PC,不能用作其它用途。 15、汇编的优点是效率高,体积小。(对) 16、S5PV210内部对模块的管理是分区域管理的,分为那几个区域()、()、 ()。 不清楚答案,查询得知,S5PV210由ARM内核、系统外围设备、存储器子系统、多媒体加速、电源管理、连接性模块等模块组成,p42 17、S5PV210内部有三条总线,他们是APB总线,频率100兆以下、AHB总线,200-100 兆、AXI总线。 18、S5PV210的AHB总线的工作频率范围是200M~100M。 19、S5PV210的APB总线的工作频率范围是100M以下。 20、CortexA8的工作频率高达(1GHZ),定时器的PLCK的值是(66MHZ)。 21、S5PV210内部有( 5 )个定时器,其中有PWM引脚的有定时器(T0 T1 T2 T3 ),有死区功能的有定时器(T0 T1 )。 22、占空比就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比。 23、可以通过改变高低电平的时间改变占空比,也可以通过修改时钟周期的时间改变占 空比。(F)前面话对,后面话错 24、ARM 处理器有两个级别的中断请求,他们分别是(fiq )和(irq )。ARM上实现内存管理的单元叫(MMU )。 25、ARM的全称是(Advanced RISC Machine) 目前常用的嵌入式外围设备按功能可以分为(存储设备)、(通信设备)和(显示设备)。硬件设备=嵌入式处理器+外围设备 外围设备是完成存储通信调试显示等辅助功能的其他部件。目前常用,存储设备(ram,sram,flash),通信设备(rs232接口,),显示设备(显示屏)。 26、嵌入式linux操作系统属于免费的操作系统。 27、ARM 有3种含义,它是(一个公司名词),是(一类微处理器通 称),还是(一种技术)的名称。 28、ARM支持(大端)和(小端)两种内存模式。

《ARM嵌入式系统基础教程》期末试题

《ARM嵌入式系统基础教程》期末试题 一、填空题(请将答案填入题后括号中):共10小题,每小题2分,满分20分。 1、一般而言,嵌入式系统的构架可以分为4个部分:处理器、(存储器)、输入/输出和软件,一般软件亦分为(操作系统)和应用软件两个主要部分。 2、根据嵌入式系统使用的微处理器,可以将嵌入式系统分为(嵌入式微控制器),嵌入式DSP,(嵌入式微处理器)以及片上系统。 3、操作系统是联接硬件与应用程序的系统程序,其基本功能有进程管理、(进程间通信)、(内存管理)、I/O资源管理。 4、从嵌入式操作系统特点可以将嵌入式操作系统分为实时操作系统和(分时操作系统),其中实时系统亦可分为(硬实时操作系统)和软实时系统。 5、内核负责管理各个任务,或者为每个任务分配CPU时间,并且负责任务之间的(通信),内核的基本服务是(任务调度)。 6、嵌入式开发一般采用(宿主机/目标机方式)方式,其中宿主机一般是指(PC机或者台式机)。 7、哈佛体系结构数据空间和地址空间(分开),ARM920T采用(哈佛体系)的内核架构。 8. ARM7TDMI采用(3)级流水线结构,ARM920TDMI采用(5)级流水线。 9 .按操作系统的分类可知,Dos操作系统属于顺序执行操作系统,Unix操作系统属于(分时)操作系统,VxWorks属于(实时嵌入式)操作系统。 10、ARM7TDMI中,T表示支持16位Thumb指令集,D表示(在片可调试),M表示内嵌乘法器Multiplier,I表示(嵌入式ICE),支持在线断点和调试。 二、选择题(请将答案填入题后括号中):共10小题,每小题2分,满分20分。 1、下面哪种操作系统不属于商用操作系统。 (B) A. windows xp B. Linux C. VxWorks D. WinCE 2. 下面哪点不是嵌入式操作系统的特点。 (C) A. 内核精简 B. 专用性强 C. 功能强大 D. 高实时性 3. 下面哪种不属于嵌入式系统的调试方法。 (D) A. 模拟调试 B. 软件调试 C. BDM/JTAG调试 D. 单独调试 4. 在嵌入式ARM处理器中,下面哪种中断方式优先级最高。 (A) A. Reset B. 数据中止 C. FIQ D.

实验5 ARM中断编程

实验五 ARM中断编程 一、实验目的 1.学习键盘驱动原理。 2.掌握中断的使用方法。 二、实验内容 通过ARM的外部中断进行键盘的扫描,利用中断服务程序编写键盘的驱动,在超级终端上显示相应的键值。UART接收中断,以中断方式(而不是查询方式)实现串口数据的接收 三、预备知识 1.掌握在ADS1.2集成开发环境中编写和调试程序的基本过程。 2.会使用UltraEdit编辑C语言源程序。 3.了解ARM中断服务程序的框架结构。 4.了解编译后的映象文件的下载方法。 四、键盘驱动程序的原理 1.简单键盘扫描 通常在一个键盘中使用了一个瞬时接触开关,并且用如图1所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O口的输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图2所示的好几个脉冲。弹起的持续时间通常将维持在5ms~30ms之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。为此我将用到矩阵键盘。 图1 简单键盘电路

图2 键盘抖动 2. 复杂矩阵键盘扫描 键盘上陈列这些开关最有效的方法(当需要5个以上的键时)就形成了一个如图3所示的二维矩阵。当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O 端被连接的时候)。一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。矩阵所需的键的数目显然根据应用程序而不同。每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。 图3 矩阵键盘 键盘扫描过程就是让微处理器按有规律的时间间隔查看键盘矩阵,以确定是否有键被按下。一旦处理器判定有一个键按下,键盘扫描软件将过滤掉抖动并且判定哪个键被按下。每个键被分配一个称为扫描码的唯一标识符。应用程序利用该扫描码,根据按下的键来判定应该采取什么行动。换句话说,扫描码将告诉应用程序按下哪个键。

计算机组成原理中断实验报告

北京建筑大学 2015/2016 学年第二学期 课程设计 课程名称计算机组成原理综合实验 设计题目微程序控制器设计与实现 系别电信学院计算机系 班级计141 学生姓名艾尼瓦尔·阿布力米提 学号 完成日期二〇一六年七月八日星期五 成绩 指导教师 (签名) 计算机组成综合实验任务书

指令执行流程图; ?5、利用上端软件,把所编写的微程序控制器内容写入实验台中控制器中。 ?6、利用单拍测试控制器与编程的要求是否一致。如果有错误重新修改后再写入控制器中。 7、编写一段测试程序,测试控制器运行是否正确。 实验目的 1.融合贯通计算机组成原理课程,加深对计算机系统各模块的工作原理及相互联系(寄存器堆、运算器、存储器、控制台、微程序控制器)。 2.理解并掌握微程序控制器的设计方法和实现原理,具备初步的独立设计能力;3.掌握较复杂微程序控制器的设计、调试等基本技能;提高综合运用所学理论知识独立分析和解决问题的能力。 实验电路 1. 微指令格式与微程序控制器电路 2.微程序控制器组成 仍然使用前面的CPU组成与机器指令执行实验的电路图,但本次实验加入中断系统。这是一个简单的中断系统模型,只支持单级中断、单个中断请求,有中断屏蔽功能,旨在说明最基本的原理。

中断屏蔽控制逻辑分别集成在2片GAL22V10(TIMER1 和TIMER2)中。其ABEL语言表达式如下: INTR1 := INTR; INTR1.CLK = CLK1; IE := CLR & INTS # CLR & IE & !INTC; IE.CLK= MF; INTQ = IE & INTR1; 其中,CLK1是TIMER1产生的时钟信号,它主要是作为W1—W4的时钟脉冲,这里作为INTR1的时钟信号,INTE的时钟信号是晶振产生的MF。INTS微指令位是INTS机器指令执行过程中从控制存储器读出的,INTC微指令位是INTC机器指令执行过程中从控制存储器读出的。INTE是中断允许标志,控制台有一个指示灯IE显示其状态,它为1时,允许中断,为0 时,禁止中断。当INTS = 1时,在下一个MF的上升沿IE变1,当INTC = 1时,在下一个MF的上升沿IE变0。CLR信号实际是控制台产生的复位信号CLR#。当CLR = 0时,在下一个CLK1的上升沿IE变0。当 CLR=1 且INTS = 0 且 INTC = 0时,IE保持不变。 INTR是外部中断源,接控制台按钮INTR。按一次INTR按钮,产生一个中断请求正脉冲INTR。INTR1是INTR经时钟CLK1同步后产生的,目的是保持INTR1与实验台的时序信号同步。INTR脉冲信号的上升沿代表有外部中断请求到达中断控制器。INTQ是中断屏蔽控制逻辑传递给CPU的中断信号,接到微程序控制器上。当收到INTR脉冲信号时,若中断允许位INTE=0,则中断被屏蔽,INTQ仍然为0;若INTE =1,则INTQ =1。

arm嵌入式期末考试试题()

一、选择题(共5) 1、下面哪个不是嵌入式操作系统的特点。( C ) A.内核精简 B.专用性强 C.功能强大 D.高实时性 2、ARM指令集合Thumb指令集分别是(D )位的。 A.8,16 B.16,32 C.16,16 D.32,16 3、FIQ中断的入口地址是( A ) A.0x0000001C B.0x00000008 C.0x00000018 D.0x00000014 4、ADD R0,R1,#6,执行该指令时属于( A)寻址方式。 A.立即寻址 B.多寄存器寻址 C.寄存器直接寻址 D.相对寻址 5、寄存器R13除了可以用作通用寄存器之外,还可以作为( B ) A.程序计数器 B.堆栈指针寄存器 C.链寄存器 D.基址寄存器 6、是(B) A.78 56 34 12 B.12 34 56 78 C.87 65 43 21 D.21 43 65 87 二、填空题(共5个) 1、嵌入式系统体系结构一般具有冯.诺依曼和哈佛两种基本形式,且ARM7采用冯.诺依曼体系结构。 2、从编程角度看,ARM微处理器一般有ARM和Thumb两种工作状态。 3、ARM9处理器使用了程序存储器和数据存储器分开独立编址的哈佛结构,并采用5级指令流水线,5级流水线操作分别是取指、译码、执指、缓冲和写回。 4、ARM微处理器支持字节、半字、字三种数据类型,数据的位数分别为8位、16位、32位,其中字必须以4字节为边界对齐,半字必须以2字节为边界对齐。 5、复位异常的优先级最高,因此在任何情况下,只要进入该状态系统无条件地将PC 指向0x00000000处,以执行系统第一条指令。 三、判断题(共5个) 1、ARM7采用3级指令流水线,即取指令、译码和执行指令。(√)

ARM异常中断机制.

ARM9(以S3C2410为例)中断机制 一、ARM异常机制介绍 ARM9处理器有7种工作模式。分别是(除了用户模式其他都是异常模式 用户模式(usr:ARM处理器正常的程序执行状态。 快速中断模式(fiq:用于高速数据传输或通道处理。 外部中断模式(irq:用于通用的中断处理。 管理模式(svc:操作系统使用的保护模式。 数据访问终止模式(abt:当数据或指令预取终止时进入该模式。 系统模式(sys:运行具有特权的操作系统任务。 未定义指令中止模式(und:当未定义的指令执行时进入该模式。 每种模式通过5位二进制编码进行标示: 用户模式10000 快速中断模式10001 外部中断模式10010 管理模式10011 数据访问终止模式10111 未定义指令中止模式11011 系统模式11111 模式编码存放在CPSR(程序当前状态寄存器,记录当前工作模式的编码的值)中的[4:0]。

快速中断模式、外部中断模式、数据访问终止模式、未定义指令中止模式、管理模式称为异常模式。 异常类型具体含义 复位当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。 未定义指令遇到不能处理的指令时,产生未定义指令异常。 软件中断该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。 指令预取中止若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。 数据中止若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。 IRQ(外部中断请求)当处理器的外部中断请求引脚有效,且CPSR中的I 位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。 FIQ(快速中断请求)当处理器的快速中断请求引脚有效,且CPSR中的F 位为0时,产生FIQ异常。 当多个异常发生时,处理器根据优先级进行处理。优先级

嵌入式ARM期末考试试卷A

期末试题——嵌入式ARM(A卷) 说明:本试卷共四大题,试卷满分100分,考试时间120分钟。 一、填空题(请将答案填入题后括号中):共10小题,每小题2分,满分20分。 1、一般而言,嵌入式系统的构架可以分为4个部分:分别是(处理器)、存储器、输入/输出和软件,一般软件亦分为操作系统相关和(应用软件)两个主要部分。 2、根据嵌入式系统使用的微处理器,可以将嵌入式系统分为嵌入式微控制器,(嵌入式DSP处理器),(嵌入式微处理器)以及片上系统。 3、操作系统是联接硬件与应用程序的系统程序,其基本功能有(进程管理)、进程间通信、(内存管理)、I/O资源管理。 4、从嵌入式操作系统特点可以将嵌入式操作系统分为(实时操作系统)和分时操作系统,其中实时系统亦可分为(硬实时系统)和软实时系统。 5、内核负责管理各个任务,或者为每个任务分配CPU时间,并且负责任务之间的(通信),内核的基本服务是(任务切换)。 6、嵌入式开发一般采用(宿主机/目标机方式)方式,其中宿主机一般是指(PC机或者台式机)。 7、哈佛体系结构数据空间和地址空间(分开),ARM7TDMI采用(冯诺依曼体系)的内核架构。 8. ARM7TDMI采用( 3 )级流水线结构,ARM920TDMI采用( 5 )级流水线。 9 .按操作系统的分类可知,Dos操作系统属于顺序执行操作系统,Unix操作系统属于(分时)操作系统,VxWorks属于(实时嵌入式)操作系统。 10、ARM7TDMI中,T表示支持16位Thumb指令集,D表示(在片可调试),M表示内嵌乘法器Multiplier,I表示(嵌入式ICE),支持在线断点和调试。 二、选择题(请将答案填入题后括号中):共10小题,每小题2分,满分20分。 1、要使CPU能够正常工作,下列哪个条件不是处理器必须满足的。( D ) (A) 处理器的编译器能够产生可重入代码(B)在程序中可以找开或者关闭中断 (C) 处理器支持中断,并且能产生定时中断(D)有大量的存储空间 2、下面哪种操作系统最方便移植到嵌入式设备中。( D ) (A) DOS (B)unix (C) Windows xp (D)linux 3、下面哪个选项不是SUB设备的特点。( B ) (A) 串行通信方式(B)不可热拨插 (C) 分HOST、DEVICE和HUB (D)通信速率比RS232快 4、下面哪种嵌入式操作系统很少用于手机终端设备上。( C ) (A) Symbian (B)WinCE (C) uc/os (D)linux 5、以下哪项关于SRAM和DRAM的区别是不对。( A )

ARM的中断原理

ARM的中断原理(转) 1.中断概述 CPU与外设的数据传输方式通常有以下3种方式:查询方式、中断方式、DMA方式。 所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪则开始进行数据传输;如果外设还没有准备好,CPU将进入循环等待状态。很显然这样浪费了大量的CPU时间,降低了CPU的利用率。 所谓中断方式是指,当外设准备好与CPU进行数据传输时,外设首先向CPU发出中断请求,CPU 接收到中断请求并在一定条件下,暂时停止原来的程序并执行中断服务处理程序,执行完毕以后再返回原来的程序继续执行。由此可见,采用中断方式避免了CPU把大量的时间花费在查询外设状态的操作上,从而大大提高了CPU的执行效率。 1.中断概述 CPU与外设的数据传输方式通常有以下3种方式:查询方式、中断方式、DMA方式。 所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪则开始进行数据传输;如果外设还没有准备好,CPU将进入循环等待状态。很显然这样浪费了大量的CPU时间,降低了CPU的利用率。 所谓中断方式是指,当外设准备好与CPU进行数据传输时,外设首先向CPU发出中断请求,CPU 接收到中断请求并在一定条件下,暂时停止原来的程序并执行中断服务处理程序,执行完毕以后再返回原来的程序继续执行。由此可见,采用中断方式避免了CPU把大量的时间花费在查询外设状态的操作上,从而大大提高了CPU的执行效率。 ARM系统包括两类中断:一类是IRQ中断,另一类是FIQ中断。IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据传输等工作时,常使用FIQ中断。FIQ的优先级高于IRQ。 在ARM系统中,支持7类异常,包括:复位、未定义指令、软中断、预取中止、数据中止、IRQ和FIQ,每种异常对应于不同的处理器模式。一旦发生异常,首先要进行模式切换,然后程序将转到该异常对应的固定存储地址执行。这个固定的地址称为异常向量。异常向量中保存的通常为异常处理程序的地址。ARM的异常向量如下: 异常模式正常地址高向量地址 复位管理 0x00000000 0xFFFF0000 未定义指令未定义 0x00000004 0xFFFF 0004 软中断管理 0x00000008 0xFFFF 0008 预取指中止中止0x0000000C 0xFFFF 000C 数据中止中止0x00000010 0xFFFF0010 IRQ IRQ 0x00000018 0xFFFF0018

ARM-Linux下的GPIO中断程序.

ARM-Linux下的GPIO中断程序 [日期:2011-03-22] 来源:Linux社区作者:cskywit 今日为了调试ARM板上的GPIO引脚中断效果,以便在后续项目使用ARM与ZLG7290按键LED中断芯片连接中随意选择空闲的GPIO引脚来作为ZLG7290的中断信号线,特意编写了一个小的Linux GPIO中断驱动程序下载到开发板上做实验。经验证,这种软件中断方式也还差强人意。下面贴出自己编写的不成熟的代码,见笑(<-_->)。 实验的硬件电路为ARM GPIO的PB17连接一个共阴LED,PB18与PB19连接,PB18由中断驱动设置为低电平触发,PB19由GPIO驱动程序控制,上层应用程序通过驱动控制PB19高低电平变化,从而引发PB18发生中断,中断程序中控制PB17的LED亮和灭。 Linux中断驱动部分: /* * PB18_IRQTest.c * This is a test program for sam9260, using PB19(J5_18 pin) input a signal to PB18(J5_16 pin), * PB18 receive this signal as IRQ and make the LED linking on PB17((J5_14 pin)) turn on or turn off * * @Author: Cun Tian Rui * @Date :March.18.2011 */ #include #include #include #include #include #include #include #include #include #include #include #include #include

嵌入式系统期末考试题库及答案

《嵌入式系统》试题库 一、填空题 1、嵌入式系统的基本定义为:以应用中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 2、从模块结构来看,嵌入式系统由三大部分组成,分别是:硬件、软件和开发平台。 3、从层次角度来看,嵌入式系统由四大部分组成,分别是:应用软件层、操作系统层、板级支持包(或硬件抽象层)和硬件层。 4、嵌入式产品的主要度量指标包括:上市时间、设计成本和产品质量。 5、嵌入式系统的设计过程包括:需求分析、规格说明、体系结构设计、构件设计、系统集成和系统测试。 6、需求分析包括:功能性需求分析和非功能性需求分析。 7、确定输入信号是数字信号还是模拟信号属于功能性需求。 8、确定系统的物理尺寸和重量属于非功能性需求。 9、在嵌入式系统的设计过程中,其中规格说明解决“做什么”。 10、在嵌入式系统的设计过程中,其中体系结构设计解决“如何做”。 11、在嵌入式系统的设计过程中,软硬件划分应该在体系结构设计阶段完成。 12、在嵌入式系统的设计过程中,处理器的选择应该在体系结构设计阶段完成。 13、在嵌入式系统的设计过程中,嵌入式操作系统的选择应该在体系结构设计阶段完成。 14、在嵌入式系统的设计过程中,完成原理图设计应在构件设计阶段完成。 15、在嵌入式系统的设计过程中,完成版图设计应在构件设计阶段完成。 16、在嵌入式系统的设计过程中,完成软件设计应在构件设计阶段完成。 17、反映嵌入式系统设计人员的水平能力主要在于总体设计(需求分析、规格说明和体系结构设计)和系统调试。 18、设计流程指的是设计过程中所经历的过程步骤。 19、设计重用技术主要分为基于 IP 核的模块级重用和基于平台的系统级重用。 20、软硬件协同设计由系统描述、软硬件划分、软硬件协同综合以及软硬件协同模拟与验证几个阶段组成。 21、嵌入式处理器的分类包括三种,分别是:嵌入式微处理器、微控制器(或单片机)和

51单片机串行口中断服务程序

51单片机串行口中断服务程序 ---------------------------------------------------------------------------- //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理 //编程:聂小猛。该资料来自“51单片机世界”https://www.360docs.net/doc/fc12350664.html,/~dz2000,欢迎访问。 //出入均设有缓冲区,大小可任意设置。 //可供使用的函数名: //char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。 //getline(char idata *line, unsigned char n); 获取一行数据回车结束,已处理backspce和delete,必须定义最大输入字符数 //putinbuf(uchar c);模拟接收到一个数据 //putbyte(char c);放入一个字节到发送缓冲区 //putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度 //putstring(unsigned char code *puts);发送一个字符串到串口 //puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。 //putchar(uchar c,uchar j);发送一个字节数据的asc码表达方式,需要定义小数点的位置 //putint(uint ui,uchar j);发送一个整型数据的asc码表达方式,需要定义小数点的位置 //CR;发送一个回车换行 //************************************************************************* #include //该头文件包括了51,52,80320的特殊寄存器,用在51,52上也可 #define uchar unsigned char #define uint unsigned int #define OLEN 64 /* size of serial transmission buffer */ idata unsigned char outbuf[OLEN]; /* storage for transmission buffer */ unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置 unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置 #define ILEN 2 /* size of serial receiving buffer */ idata unsigned char inbuf[ILEN]; unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置 unsigned char idata *getlast=inbuf; //最后取走的字节位置 bit outbufsign; //输出缓冲区非空标志有=1 bit inbufsign; //接收缓冲区非空标志有=1 bit inbufful; //输入缓冲区满标志满=1 #define CR putstring("\r\n") //CR=回车换行 //***************************** //放入一个字节到发送缓冲区 putbyte(char c) {uchar i,j; ES=0; /*暂停串行中断,以免数据比较时出错? */ if (outlast==putlast ) { i=(0-TH1); do{i--;j=36; do {j--;}while(j!=0);

arm中断返回地址详细分析.

在ARM体系中,通常有以下3种方式控制程序的执行流程: 1、在正常执行过程中,每执行一条ARM指令,程序计数器PC的值加4个字节;每执行一条Thumb 指令,程序计数器PC加2个字节。整个过程是顺序执行的; 2、跳转B指令执行跳转操作;BL指令在执行跳转的同时,保存子程序返回地址;BX指令,执行跳转的同时,根据目标地址的最低位,可以将程序状态切换到Thumb状态;BLX指令执行上述3个操作; 3、当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。 异常中断种类、异常中断向量地址和异常中断优先级别见下表: ARM运行的几种处理器模式如上表所示。其中,应用程序通常运行在用户模式下! 为了说明异常中断执行过程,先了解各处理器模式下的寄存器组,如下表: 重点:ARM处理器对异常中断的响应过程: ㈠、保存当前程序状态寄存器CPSR到对应异常中断的处理器模式下的SPSR中; ㈡、设置当前程序状态寄存器CPSR的处理器模式位M(4:0)为对应的处理器模式,并禁止IRQ 中断(设置I位=1);当进入的是FIQ模式时,禁止FIQ中断(设置F位=1); ㈢、将对应异常中断的处理器模式下的LR设置成返回地址; ㈣、将程序计数器PC值,设置成该异常中断向量地址,从而跳转到相应的异常中断处理程序处执行。 上述处理器对异常中断的响应过程可以用伪代码描述如下: R14=return Link SPSR=CPSR CPSR[4:0]=exception mde number CPSR[5] = 0 //所有异常均在ARM状态下处理(本句出自《基于ARM的嵌入式系统开发与实例》P32) if(==Reset or FIQ )then CPSR[6]=1 //禁止FIQ中断 CPSR[7] =1 //禁止IRQ中断 PC = exception vetor address 程序将自动跳转到对应异常中断的处理程序中。 上述过程,完全由处理器自动完成,所以,当发生一种异常中断时,寄存器R14 、CPSR、SPSR 和PC的值将是上述的结果!结果如下图所示: 下面是引用别人的文章: ARM处理器中主要有7个异常(2个中断异常): 1、复位异常;在以ARM为核的单片机中,常把下列事件作为引起复位的原因。 ? 上电复位:在上电后,复位使内部达到预定的状态,特别是程序跳到初始入口; ? 复位引脚上的复位脉冲:这是由外部其他控制信号引起的; ? 对系统电源检测发现过压或欠压; ? 时钟异常复位。 ARM处理器复位后,处理器硬件将进行以下操作: ? 强制进入管理模式;0b10011 ? 强制进入ARM状态;T=0 ? 跳转到绝对地址PC=0x00000000处执行;

相关文档
最新文档