ARM1176JZF-S/S3C6410处理器的异常处理过程

发布者:太和清音最新更新时间:2016-06-20 来源: eefocus关键字:ARM1176JZF-S  S3C6410  处理器  异常处理 手机看文章 扫描二维码
随时随地手机看文章
本来准备总结一下ARM1176JZF-S/S3C6410处理器的异常处理过程,但是发现《嵌入式系统Linux内核开发实战指南》一书中的这一部分讲解得非常简明和清楚。所以就不再重复发明轮子,不过我会在以下的引用中做一些补充。

进入异常中断处理

ARM处理器发生异常中断,则ARM处理器进入如下异常中断自动处理过程(假设发生的异常中断对应的模式为mode):

  1. 将当前程序状态寄存器CPSR的值保存到SPSR_mode中;
  2. 将CPSR中的模式位设置成mode模式,将CPSR中的bit7(I)设置为1,禁止IRQ中断,如果是FIQ中断,则再将CPSR中的bit6(F)设置为1,禁止FIQ中断;
  3. 将返回地址传给lr_mode;
  4. 将该异常中断的向量地址传给程序计数器pc,从而进入异常中断处理程序。

退出异常中断处理

当要从异常中断处理程序中返回时,要做以下两步操作(假设发生的异常中断对应的模式为mode):

  1. 将保存在SPSR_mode中的值恢复到当前程序状态寄存器CPSR中;
  2. 返回到发生异常中断的指令的下一条指令处执行,也就是将lr_mode寄存器的值适当地返回到程序计数器pc中。

但程序员只需做好上述第二步即可,第一步在完成第二步的同时由处理器自动完成,所以我们下面讲解从各种异常中断处理返回的编程接口。

退出复位异常中断处理(Reset)

复位异常中断处理程序不需要返回,所以不需要这个接口。

退出未定义指令异常中断处理(Undefined Instruction)

未定义指令异常中断由当前执行的指令自身产生,当未定义指令异常中断产生时,程序计数器pc的值还未更新,它指向当前指令后面第2条指令(对于ARM指令,它指向当前指令地址加8字节的位置;对于Thumb指令,它指向当前指令地址加4字节的位置),当未定义指令异常中断发生时,处理器将值(pc-4)保存到lr_und中,此时(pc-4)指向当前指令的下一条指令,所以从未定义指令异常中断返回可以通过如下指令来实现:

mov pc, lr

该指令将寄存器lr_mode中的值到程序计数器pc中,实现程序返回,同时将SPSR_mode寄存器中的值到当前程序状态寄存器CPSR中。

如果要在异常中断处理中使用数据栈,那么可以在进入异常中断处理程序时保存被中断程序的执行现场,在退出异常中断处理程序时恢复被中断程序的执行现场,编程如下:

stmfd sp!, {register_list, lr} ;保存被中断程序的执行现场
; . . .
ldmfd sp!, {register_list, pc}^ ;恢复被中断程序的执行现场

上面的register_list,是异常中断处理程序中使用的寄存器列表,标识符^表示要将SPSR_mode寄存器中的值到当前程序状态寄存器CPSR中。

退出软中断指令(SWI)异常中断处理(Undefined Instruction)

SWI异常中断和未定义异常中断指令一样,也是由当前执行的指令自身产生,当SWI指令执行时,pc的值还未更新,它指向当前指令后面第2条指令(对于ARM指令,它指向当前指令地址加8字节的位置;对于Thumb指令,它指向当前指令地址加4字节的位置),当未定义指令异常中断发生时,处理器将值(pc-4)保存到lr_svc中,此时(pc-4)指向当前指令的下一条指令,所以从SWI异常中断处理返回的实现方法与从未定义指令异常中断处理返回一样:

mov pc, lr

使用数据栈的方法与未定义指令异常中断处理中的方法也一样:

stmfd sp!, {register_list, lr} ;保存被中断程序的执行现场
; . . .
ldmfd sp!, {register_list, pc}^ ;恢复被中断程序的执行现场

退出指令预取中止异常中断处理(Prefetch Abort)

在指令预取时,如果目标地址是非法的,该指令被标记成有问题的指令,这时,流水线上该指令之前的指令继续执行,当执行到该被标记成有问题的指令时,处理器产生指令预取中止异常中断。发生指令预取异常中断时,程序要返回到该有问题的指令处,重新读取并执行该指令,因此指令预取中止异常中断应该返回到产生该指令预取中止异常中断的指令处,而不是当前指令的下一条指令。

指令预取中止异常中断由当前执行的指令自身产生,当指令预取中止异常中断发生时,程序计数器pc的值还未更新,它指向当前指令后面第2条指令(对于ARM指令,它指向当前指令地址加8字节的位置;对于Thumb指令,它指向当前指令地址加4字节的位置)。此时处理器将值(pc-4)保存到lr_abt中,它指向当前指令的下一条指令,所以返回操作可以通过下面指令实现:

subs pc, lr, #4

该指令将lr中的值减4后传给程序计数器pc中,实现程序返回,同时将SPSR_abt寄存器的内容到当前程序状态寄存器CPSR中。

如果要在指令预取中止异常中断处理中使用数据栈,可以用以下方法保护、恢复被中断程序的执行现场:

subs lr, lr, #4
stmfd sp!, {register_list, lr} ;保存被中断程序的执行现场
; . . .
ldmfd sp!, {register_list, pc}^ ;恢复被中断程序的执行现场

上面的register_list是异常中断处理程序中使用的寄存器列表,标识符^表示要将SPSR_abt寄存器中的值到当前程序状态寄存器CPSR中。

退出数据访问中止异常中断处理(Data Abort)

发生数据访问异常中断时,程序要返回到该有问题的指令处,重新访问该数据,因此数据访问异常中断应该返回到产生该数据访问中止异常中断的指令处,而不是当前指令的下一条指令。

数据访问异常中断由当前执行的指令自身产生,当数据访问异常中断发生时,程序计数器pc的值已经更新,它指向当前指令后面第3条指令(对于ARM指令,它指向当前指令地址加12字节的位置;对于Thumb指令,它指向当前指令地址加6字节的位置)。此时处理器将值(pc-4)保存到lr_abt中,它指向当前指令后面第2条指令,所以返回操作可以通过下面指令实现:

subs pc, lr, #8

该指令将lr中的值减8后传给程序计数器pc中,实现程序返回,同时将SPSR_abt寄存器内容到当前程序状态寄存器CPSR中;

如果要在数据访问异常中断处理中使用数据栈,可以用以下方法保护、恢复被中断程序的执行现场:

subs lr, lr, #8
stmfd sp!, {register_list, lr} ;保存被中断程序的执行现场;
; . . .
ldmfd sp!, {register_list, pc}^ ;恢复被中断程序的执行现场;

上面的register_list是异常中断处理程序中使用的寄存器列表,标识符^表示要将SPSR_abt寄存器中的值到当前程序状态寄存器CPSR中。

退出IRQ异常中断处理程序(IRQ)

通常处理器执行完当前指令后,查询IRQ中断引脚,并查看是否允许IRQ中断,如果某个中断引脚有效,并且系统允许该中断产生,处理器将产生IRQ异常中断,当IRQ异常中断产生时,程序计数器pc的值已经更新,它指向当前指令后面第3条指令(对于ARM指令,它指向当前指令地址加12字节的位置;对于Thumb指令,它指向当前指令地址加6字节的位置),当IRQ异常中断产生时,处理器将值(pc-4)保存到IRQ异常模式下的寄存器lr_irq中,它指向当前指令之后的第2条指令,因此返回操作可以通过下面指令实现:

subs pc, lr, #4

该指令将lr中的值减4后传给程序计数器pc中,实现程序返回,同时将SPSR_irq寄存器的内容到当前程序状态寄存器CPSR中。

如果要在IRQ异常中断处理中使用数据栈,可以用以下方法保护、恢复被中断程序的执行现场:

subs lr, lr, #4
stmfd sp!, {register_list, lr} ;保存被中断程序的执行现场
; . . .
ldmfd sp!, {register_list, pc}^ ;恢复被中断程序的执行现场

上面的register_list是异常中断处理程序中使用的寄存器列表,标识符^表示要将SPSR_irq寄存器中的值到当前程序状态寄存器CPSR中。

退出FIQ异常中断处理程序(FIQ)

与IRQ异常中断一样,处理器执行完当前指令后,查询FIQ中断引脚,并查看是否允许FIQ中断,如果中断引脚有效,并且系统允许该中断产生,处理器将产生FIQ异常中断,当FIQ异常中断产生时,程序计数器pc的值已经更新,它指向当前指令后面第3条指令(对于ARM指令,它指向当前指令地址加12字节的位置;对于Thumb指令,它指向当前指令地址加6字节的位置),当FIQ异常中断产生时,处理器将值(pc-4)保存到IRQ异常模式下的寄存器lr_fiq中,它指向当前指令之后的第2条指令,因此返回操作可以通过下面指令实现:

subs pc, lr, #4

该指令将lr中的值减4后传给程序计数器pc中,实现程序返回,同时将SPSR_fiq寄存器的内容到当前程序状态寄存器CPSR中。

如果要在FIQ异常中断处理中使用数据栈,可以用以下方法保护、恢复被中断程序的执行现场:

subs lr, lr, #4
stmfd sp!, {register_list, lr} ;保存被中断程序的执行现场
; . . .
ldmfd sp!, {register_list, pc}^ ;恢复被中断程序的执行现场

上面的register_list是异常中断处理程序中使用的寄存器列表,标识符^表示要将SPSR_fiq寄存器中的值到当前程序状态寄存器CPSR中。

补充:关于程序返回地址(PC)的取值

上文中提到,在进入异常处理之后,CPU会自动根据pc的值来设置lr的值(一般是减4),而对于不同各类的异常来说,这个值还不能直接用做异常的返回地址,可能还需要再减4或减8等等,这样做的原因是什么呢?

答案在于ARM处理器在处理指令时所使用的三级流水线机制。

CPU执行一条指令的过程可以分为三个步骤:取指令、翻译和执行。执行每一个步骤都需要一个指令周期的时间,所以完整地执行完一条指令实际上就需要3个周期。为了加快程序的运行,现代CPU都会采用多级流程线的技术。以三级流水线为例,一条专门负责取指,一条专门翻译,还有一条负责执行,三条流水线并行工作,每一条流水线在每一个周期内都不会空闲,所以平均来看,执行每条指令都只要一个周期的时间。

从二进制指令的角度来看,当前指令在执行的时候,下一条指令已经在被翻译,再下一条指令已经正在被读取。注意pc寄存器总是指向正在被读取的那条指令,而不是正在被执行的指令。如下图所示:

ARM1176JZFS/S3C6410处理器的异常…

箭头方向是指令运行的方向,左侧是低地址,右侧是高地址,当A指令是正在运行的指令,pc寄存器现在正指向C指令的位置。

下面,分别以软中断异常和数据异常为例来解释一下上文中所讲的内容:

在软中断发生时,指令流水线的结构与上图完全一样。软中断是由正在执行的指令A触发的,它的任务已经完成,所以在中断处理结束之后,A指令不需要再被执行一次,应该直接执行B指令。而在进入中断处理程序之前,CPU已经自动将(pc-4)的值存入lr,这正是B指定的位置。所以在中断返回时,直接把lr的值赋给pc就行了。

在数据访问异常发生时,指令流水线的结构与上图不太一样,正在执行的指令仍然是A,pc已经更新,即指向了D指令。在中断处理结束时,数据的问题已经解决(可以访问),A指令还需要再重新执行一次,所以pc需要指向A指令处。而在进入中断处理程序之前,CPU已经自动将(pc-4)的值存入lr,这是C指令的位置,所以我们需要手动调整pc的位置,把它再减8,这才是A指令的位置。

关键字:ARM1176JZF-S  S3C6410  处理器  异常处理 引用地址:ARM1176JZF-S/S3C6410处理器的异常处理过程

上一篇:ARM体系的异常中断
下一篇:arm处理器异常处理swi

推荐阅读最新更新时间:2024-03-16 14:57

基于晶心科技N903A处理器的MP3解决方案与Andes平台的MP3移植
随着人们对于音频电子产品功能的需求越来越高,8位及16位MCU逐渐向32位MCU转型已经成为市场趋势。晶心科技(Andes)作为亚洲首家原创性32位微处理器IP与系统芯片开发平台的设计公司,面向32位MCU市场推出了Andes Core N9系列低功耗高性价比的32位处理器软硬核IP。基于该系列处理器,晶心科技针对不同音频应用提供了多种解决方案。其中包括将多种音频格式的编、解码器(开源),例如MP3、AAC、WMA、G729等移植到Andes平台上。并且利用nds32(基于Andes Core)架构的优势和针对音频效能的扩展指令集,以及算法上的改进,对这些编解码器做了进一步的优化,使其不仅占用的空间较小而且具备了较高的运行性能。
[工业控制]
采用STC12C5410AD处理器实现自动割草机器人主控系统的设计
1 、系统结构 自动割草机器人主控系统的结构框图如图1所示。系统主要由控制系统、系统、驱动系统3大部分组成。其中单片机控制系统的处理器采用国产芯片STC12C5410,包含10 bit的以及串口、等通用串行,高达40 MHz的主频完全可以胜任本系统的计算和处理速度。 运动系统主要通过单片机给出的多路PWM信号对自动割草机器人的行动电机以及割草电机进行控制。传感器系统由篱笆传感器、光电传感器、碰撞开关传感器、雨水传感器、无线遥控接收模块等组成。其中,电子篱笆传感器用于探测割草区域的边缘;光电开关传感器用于避开慢速的或者静止的障碍物;碰撞开关传感器用于避开快速的或者主动碰向割草机的物体;雨水传感器用于检测下雨天气,并且相
[机器人]
亚马逊云服务器将为客户提供AMD霄龙处理器芯片
今年以来股价翻了一倍的美国芯片制造商AMD周二在美国旧金山举办了“Next Horizon”新品发布会,不仅推出了全球首个7纳米数据中心GPU,霄龙(EPYC)服务器芯片还可立即应用于亚马逊AWS云服务,股价短线上涨8%。 亚马逊发布公告称,新的EC2虚拟云服务器将为第三方客户提供AMD霄龙处理器芯片,并能为通用实例(M5和T3)和内存优化实例(R5)节约10%的计算成本。支持客户的工作负载场景包括微服务、低延迟交互式应用程序、中小型数据库、虚拟桌面、开发和测试、代码库和商业应用。 亚马逊AWS计算副总裁Matt Garman表示,基于AMD霄龙芯片的R5和M5实例产品今天就可使用,T3实例将在未来几周上线,并重点强调了帮
[嵌入式]
亚马逊云服务器将为客户提供AMD霄龙<font color='red'>处理器</font>芯片
基于ARM处理器的电台检测控制器硬件设计
  机载电台担负着空空和地空之间通信,为保证电台性能,需要对其进行定检。基于单片机的检测仪存在测量速度慢、可扩展性差的问题;而基于PXI仪器或VXI仪器的检测仪存在着功耗大、体积大、价格高等缺点。为解决上述问题,利用基于ARM处理器来实现电台检测控制器成为重要的发展方向,ARM是一种高性能、低功耗的RISC结构处理器,由于其出色的性能被广泛应用于工业控制、无线通讯、成像和安全、网络应用等方面,采用基于ARM的电台检测控制器具有可移植性强、可扩展性好、抗干扰能力强等优点。    1 硬件设计   良好的硬件设计是是解决基于单片机、PXI、VXI等系统的电台检测仪问题的关键。为实现硬件结构的模块化设计,硬件主要分为两大部分:主控制
[单片机]
摩托罗拉Moto Tab G20平板解密: Helio P22T处理器
据外媒 GSMArena 报道,新的 Google Play 列表显示,摩托罗拉将会推出一款名为 Moto Tab G20 的新平板电脑。   Google Play 列表显示,Moto Tab G20 平板将采用 800x1280 分辨率的显示屏,屏幕尺寸为 8 英寸,搭载联发科 MT8768A (Helio P22T )芯片,并配备 3GB 内存。   此外,Moto Tab G20 平板还拥有 5100mAh 电池,前置摄像头的像素为 200 万,后置 500 万像素镜头,运行 Android 11 操作系统。   Moto Tab G20 平板将是摩托罗拉推出的首款平板电脑,目前还没有关于该平板的发布日期和定价的消
[手机便携]
摩托罗拉Moto Tab G20平板解密: Helio P22T<font color='red'>处理器</font>
很期待 索尼Xperia XZ2国行4月17日亮相
在今年的MWC上,索尼可谓是风光无限,发布了旗舰机Xperia XZ2广受好评。前段时间,该机正式发布港行版,现如今,索尼宣布将于4月17日在北京798设计时尚广场中央大厅举办新品发布会,正式发布国行版Xperia XZ2。   外观方面,索尼Xperia XZ2采用了全新的设计语言,原本硬朗简洁的线条不再,流畅的3D玻璃表面营造出舒适的握持感。康宁大猩猩第五代防划玻璃和金属框架构建而成,耐用性和质感更强,该机拥有琉璃黑、水光银、森湖绿、紫晶粉等四种配色。XZ2采用防水溅防尘设计,经IP65/IP68认证,能够抵挡溅水和骤雨等。   配置方面,索尼Xperia XZ2搭载5.7英寸18:9高清HDR显示屏,支持X-Realit
[手机便携]
高通暂时不会针对物联网打造专属处理器
    针对将手机处理器成功经验套用在物联网应用,Qualcomm选择以效能、连接能力与电池损耗达成平衡的Snapdragon 410、Snapdragon 600切入市场,但强调针对特定产品如电视、无人机等也会视实际需求作调整。不过,若比照智慧穿戴装置推出Snapdragon Wear系列处理器的模式,未来是否也针对物联网装置提出专属分类处理器,Qualcomm方面表示考量目前尚未有明确需求,因此暂时还不会有此类计画。 Qualcomm Technologies产品管理总监Leon Farasati表示,目前透过移植Snapdragon系列处理器在手机应用成功经验,藉此对应越来越为庞大的物联网市场使用需求。同时在物联
[手机便携]
英特尔发布超低压移动CPU平均能耗仅0.75瓦
  6月7日消息,据外电报道,英特尔日前发布了一款超低压移动处理器,该款处理器的平均能耗还不足1瓦。   据中国台湾媒体报道,在日前于台北召开的Computex交易会上,英特尔发布了这款超低压移动处理器Core Duo,该款处理器的平均能耗只有0.75瓦。   英特尔高级副总裁Anand Chandrasekher称,该款产品将于今年下半年上市。目前,惠普、戴尔和其他一些PC厂商已经在开发基于该款处理器的新型笔记本电脑。Chandrasekher还表示,该款芯片尤其适合于微软的超移动PC项目。   当前,普通的笔记本电脑能耗为20瓦左右。此前,“百元笔记本”项目的首席技术官Mary Lou Jepsen曾表示,希望将百元笔记
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved