当前位置:首页 > 单片机 > 单片机
[导读] 本文介绍A了RM S3C4510B系统的异常中断机制,包括异常中断的分类,响应与返回;中断处理程序的安装与调用;SWI,IRQ中断的实例与关键代码。 引言 随着人们对于电子产品的要求越来越高,以80C51系列

本文介绍A了RM S3C4510B系统异常中断机制,包括异常中断的分类,响应与返回;中断处理程序的安装与调用;SWI,IRQ中断的实例与关键代码。

引言


随着人们对于电子产品的要求越来越高,以80C51系列为代表的8位处理器系统开始面临越来越多的局限和挑战,人们对于高性能芯片和嵌入式功能的呼声也越来越高。16/32 位的处理器系统得到了前所未有的关注和重视。32位ARM体系系列处理器便是其中的代表。S3C4510B处理器是基于ARM7体系16/32位RISC处理器,内部集成了8KB的CACHE/SDRAM,内嵌EARTHNET控制器,拥有7种处理器模式和内部多线程和外部多处理器的处理器结构。在嵌入式系统中具有重要意义的异常中断技术在S3C4510B系统中也体现了ARM体系独有的一些的特点。本文根据S3C4510B系统的特点,分析了该系统中七种异常中断的功能及特点。并给出了SWI异常中断(外部中断)和IRQ异常中断(软件中断)的应用实例代码。

1 S3C4510B系统中的异常中断

1.1 S3C4510B系统异常中断的特点


S3C4510B系统中控制程序执行流程的方式通常有三种,一是正常程序执行过程,即根据指令类型增加程序计数器PC使程序顺序执行;二是通过跳转的方式来控制程序的执行,可以利用跳转的命令执行跳转操作,也可以通过直接修改程序计数器来达到跳转的目的;三是异常中断的方式,可以根据软件的执行情况,外部设备的异常请求等实现内部、外部异常的处理,系统功能的调用和程序进程的控制等功能。


S3C4510B系统的异常中断具有以下几个特点。首先,作为ARM体系RTOS(实时操作系统)组成部分,程序中的异常中断必须按照ARM体系的要求进行处理器模式的转换。其次,如果对系统的优化有需求时,可以进行32位的ARM处理指令和16位的THUMB指令的转换。另外,S3C4510B处理器正常运行时,保存的返回地址是通过将PC存入LR寄存器完成的,由于中断产生时的计数器PC的值有时已经更新,如产生了外部中断和快速中断等;有时可能尚未更新,如软件中断和未定义指令中止等,故必须根据实际情况对返回地址进行软件修正之后才能正确返回。最后还要注意,ARM体系支持c语言和汇编语言程序的相互之间的调用,并有ATPCS规则进行协调,所以异常中断处理程序必需按照ATPCS规则进行寄存器处理。


1.2 S3C4510B系统中的异常中断的类型


S3C4510B拥有七种不同的异常中断类型,分别适应于不同的中断需要。根据ARM系列处理器的特点,各种异常中断对应于ARM系列的不同工作模式。其种类和对应关系如表1所示。


其中,复位中断是优先级最高的中断。在复位引脚有效的前提下,系统加电或系统复位时都会引起复位中断。数据访问中止是在数据访问指令的目标地址不存在或者该地址不允许当前指令访问的情况下产生的。指令预取中止中断是处理器或系统协处理器认为当前指令未定义,当系统预取该指令时,本中断执行。未定义中止在处理器或系统协处理器认为当前指令未定义时产生,故而可以根据该异常中断机制仿真浮点向量运算。快速中断和外部中断都是在对应的中断请求引脚有效,且状态寄存器中的相应中断禁止标志位清零时产生。其中的外部中断还可以用来进行各系统进程的切换;软中断由用户定义,在程序运行时由SWI指令调用,可用于用户模式下的程序调用特权模式指令。在RTOS系统中可以通过该中断机制实现系统功能调用。


1.3 S3C4510B系统对异常中断的响应


S3C4510B系统对异常中断的响应流程如下:


(1) 保存处理器当前状态寄存器CPSR的值、中断屏蔽以及各条件标志位到将要执行的异常中断的SPSR中。 电子电路图


(2) 设置当前程序状态寄存器CPSR的值。其中包括:设置CPSR相应位的值使处理器进入特定的处理器模式;按要求屏蔽中断,通常应该屏蔽IRQ中断,在FIQ中断时屏蔽FIQ中断。

(3) 设置Lr寄存器。将中断相应模式的Lr寄存器的值设置为异常中断的返回地址。


(4) 处理程序计数器PC。将PC值设为相应的中断向量的地址,从而实现跳转以执行中断程序。


当处理器执行完以上流程之后,处理器已经自中断向量进入异常中断的处理状态。异常中断处理完毕之后,在异常中断程序的末端,处理器进入异常中断的返回状态,其流程如下:


(1) 恢复状态寄存器。将保存在中断模式中的SPSR值赋给当前的状态寄存器。


(2) 将返回地址复制到程序计数器。这样程序将返回到异常中断产生的下一条指令或出现问题的指令处执行。


整个响应与返回的过程如图1所示。


需要注意的是,对于不同的异常中断,其返回地址的计算方法也是不同的。IRQ和FIQ异常中断产生时,程序计数器PC已经更新,而SWI中断和未定义指令中断是由当前指令自身产生的,程序计数器PC尚未更新,所以要计算出下一条指令的地址来执行返回操作;指令预取中止异常中断和数据访问异常中断要求返回到出现异常的执行现场,重新执行操作。


2 S3C4510B系统中的异常中断处理程序的安装


S3C4510B系统通过异常向量表安装异常中断处理程序,即将异常向量表指向异常中断处理程序的入口,实现面向异常中断的跳转。这里需要介绍一下S3C4510B系统的中断向量表。在S3C4510B系统中,无论在地址重映射之前还是之后,异常中断向量表的入口地址为固定的(见表1)。当系统运行到满足异常中断条件而产生异常中断时,系统将自动跳入相应的异常中断向量表中。而在异常向量表中保存的,正是利用跳转指令或ldr指令指向该中断的异常中断处理程序的指令程序,这样就实现了异常中断处理程序的安装。以SWI软中断为例,异常中断安装的基本顺序如图2所示,其中异常中断向量的地址是固定的,其他地址为假设的。


2.1 利用跳转指令实现异常中断的安装


将BL指令放置到中断向量表的特定位置,跳转目标地址为中断处理程序的首地址,便可直接实现异常中断的安装。其优点是BL指令可以直接保存地址,缺点是BL的跳转范围只有32MB的地址空间,如bl SWI_Handler。


2.2 利用ldr指令实现异常中断的安装


利用ldr直接向程序计数器PC中赋值也可以实现中断处理程序的安装。先要将异常中断处理程序首地址的绝对地址放在邻近的一个存储单元中,然后用ldr命令将该内存单元中的地址读取到PC中。其优点是可调用程序的范围不受限制,如:

ldr pc,SWI_ADDR
……
SWI_ADDR dcd SWI_Handler
以上两种安装方法各有优缺点,需要根据实际情况来选择。 电子技术书籍网

3 S3C4510B系统中SWI异常中断实例


S3C4510B中的SWI指令可以用来实现RTOS中的系统功能调用。它由用户模式下当前执行的指令引发,通过一个24位的立即数来指代SWI需要调用的系统功能,调用执行的过程在特权模式中进行。


3.1 SWI异常中断的处理程序


通常我们把SWI的中断处理程序分为两级,分别完成立即数的读取和功能调用的执行。其指令代码如下:
……

stmfd sp!,{r0-r12,lr}
保护现场,保存寄存器的值
ldr r0,[lr,#-4]
lr寄存器保存指令
bICr0,r0,#0XFF000000 ;读取指令中的24位立即数
……
cmp R0,#MaxOfSWI
判断立即数是否有效
ldrls pc,[pc,r0,lsl #2]
b OutOfSWIRange ;超出范围
JumpListofSWI
dcd SWIPro_0
dcd SWIPro_1
……
其他所有的软中断入口
SWIPro_0
进入SWI对应立即数0的中断处理程序
……
对应立即数0的中断处理程序
b EndOfSWI
SWIPro0
进入SWI对应立即数1的中断处理程序
……
对应立即数1的中断处理程序
b EndOfSWI
……
其他的SWI处理程序
EndOfSWI
1dmfd sp!,{r0-r12,pc}^
恢复各寄存器


3.2 SWI异常中断的调用与返回


对于SWI异常中断的调用要根据中断现场所处的处理器模式进行调用。通常用户模式下调用SWI功能只需将处理器所需要的参数存放于寄存器中,然后调用相应功能号的系统功能。

Mov r0,#80
假设参数为#80
swi 0X1
SWI中断立即数1
由于SWI中断功能调用在特权模式下执行,故而当在特权模式下调用SWI功能时,必须对当前模式下的SPSR和寄存器LR进行保存。
stmfd sp!,{r0-r12,lr}
保存寄存器
mov r1,sp
mov r0, spsr_svc
stmfd sp!,{r0} ;保存SPSR
……
读取立即数,调用SWI中断处理程序
ldmfd sp!,{r0}  ;恢复SPSR
msr spsr_svc, r0
lDMDf sp!,{r0-r12,lr}^ ;恢复其他寄存器

4 S3C4510B系统中的IRQ异常中断实例


4.1 IRQ异常中断的产生


S3C4510B处理器系统常用于进行外部异常的响应和操作系统进程的控制。CPSR寄存器的I控制位置0时,处理器在指令边界查询是否有IRQ请求,系统的外部中断管理器或者外设通过使能处理器的IRQ输入管脚产生IRQ异常中断。

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

随着汽车软件数量爆发式的增长,整个行业都需要重新思考汽车产品的开发流程。为此,Arm推出了丰富的硬件IP、新的系统IP,以及全新的汽车计算与计算子系统产品路线图,旨在为各种汽车应用实现性能、功能安全、可扩展等方面的支持。

关键字: ARM 汽车电子

知名移动芯片设计公司ARM最近迈出重要一步,它正式推出汽车芯片设计。ARM推出的芯片设计方案名叫Neoverse,随同芯片一起推出的还有面向汽车制造商、汽车供应商的新系统。

关键字: ARM 汽车芯片 芯片

随着通用人工智能的发展,数据中心的计算需求逐步提高。针对多模态数据、大模型的推理和训练需要更高的算力支持,而随着算力提升与之而来的还需更关注在功耗方面的优化。对于头部云计算和服务厂商而言,针对专门用例提高每瓦性能变得至关...

关键字: ARM 服务器 AI Neoverse CSS

一直以来,riscv架构都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来riscv架构的相关介绍,详细内容请看下文。

关键字: riscv ARM riscv架构

工业自动化系统设计是一项涉及多个领域和技术的综合性任务。它旨在通过自动化设备和系统的集成,提高生产效率、降低能耗、确保产品质量和增强企业竞争力。本文将详细探讨工业自动化系统设计的原则、方法和实践,以期为相关从业人员提供有...

关键字: 工业自动化 设备 系统

华为手表作为一款功能齐全的智能手表,具有多种实用的功能。本文将对华为手表的功能进行详细介绍,帮助用户更好地了解和使用这款智能手表。

关键字: 华为手表 功能 智能手表

最新消息报道,知情人士透露Arm近日裁掉了中国70多名软件工程师,并会将部分职位转移到中国以外的地区。Arm通过“全球服务”部门已经将支持其中国客户的工作外包给安谋科技,该部门曾经拥有约200名员工。

关键字: ARM 裁员

凭借着在个人计算机领域的广泛应用打下的坚实基础,X86自始至终统治着整个服务器生态。而这并不是业界希望看到的,因此Arm服务器被给予厚望。业界期盼Arm能够带来新的服务器CPU替代:打破一个同质化的数据中心架构,实现更高...

关键字: ARM 服务器 AI

本文中,小编将对64位处理器予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 处理器 ARM AMD

32位MCU开发方案的设计实例包括以下几个方面:

关键字: MCU ARM
关闭
关闭