专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
arm的中断体系结构
2019-04-13 22:02
发布
生成海报
站内文章
/
模拟电子
13296
0
1739
arm体系结构:arm920t
CPU一上电就处于 ARM 状态。
如果对于arm的CPU的工作模式和状态有疑惑:
** ARM处理器的寄存器,ARM与Thumb状态,7中运行模式
如果对arm刚上电的工作模式和状态有疑惑:
**arm 上电或复位时的状态,模式
ARM异常中断处理概述
1、中断的概念
中断是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。
因硬件原因引起的中断过程的出现是不可预测的,即随机的,而软中断是事先安排的。
2、中断源的概念
我们把可以引起中断的信号源称之为中断源。
arm920T中有
6
0
个
中断源
:
(1)
外
部
子中断源
2
0
个:
(2
)
拥有
1
5
个
内
部
子
中断源的
:
(4)摄像头接口:
3、中断优先级的概念
ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:
复位异常(Reset)、
数据异常(Data Abort)、
快速中断异常(FIQ)、
外部中断异常(IRQ)、
预取异常(Prefetch Abort)、
软件中断(SWI)、
未定义指令异常(Undefined instruction)。
ARM异常的优先级
ARM体系异常种类细说:
1.复位异常
当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行。
复位异常中断通常用在下面两种情况下。
*系统上电。
*系统复位。
当复位异常时,系统执行下列伪操作:
R14_svc = UNPREDICTABLE value //任意值
SPSR_svc = UNPREDICTABLE value //任意值
CPSR[4∶0] = 0b10011 /*进入管理模式*/
CPSR[5] = 0 /*处理器进入ARM状态*/
CPSR[6] = 1 /*禁止快速中断*/
CPSR[7] = 1 /*禁止外设中断*/
If high vectors configured then
PC = 0xffff0000
Else
PC = 0x00000000
复位异常中断处理程序的
主要功能
:
*设置异常中断向量表。
*初始化数据栈和寄存器。
*
初始化存储系统,如系统中的MMU等。
*
初始化关键的I/O设备。
*
使能中断。
*
处理器切换到合适的模式。
*
初始化C变量,跳转到应用程序执行。
2.未定义指令异常
当ARM处理器执行协处理器指令时,它必须等待一个外部协处理器应答后,才能真正执行这条指令。
若协处理器没有响应,则发生未定义指令异常。
3.软中断SWI
软中断异常发生时,处理器进入
特权模式
,执行一些特权模式下的操作系统功能。
4.预取指令异常
预取指令异常是由
系统存储器
报告的。当处理器试图去取一条
被标记为预取无效
的指令时,
发生预取异常。
5.数据访问中止异常
数据访问中止异常是由存储器发出数据中止信号,它由存储器访问指令
Load/Store
产生。
当数据访问指令的
目标地址不存在
或者
该地址不允
许当前指令访问
时,处理器产生数据访问中止异常。
6.外部中断IRQ
当处理器的
外部中断请求引脚有效
,而且CPSR寄存器的
I控制位被清除
时,处理器产生外部中断IRQ异常。
系统中各外部设备通常通过该异常中断请求处理器服务。
7.快速中断FIQ
当处理器的
快速中断请求引脚有效
且CPSR寄存器的
F控制位被清除
时,处理器产生快速中断请求FIQ异常。
当异常发生时
,
处理器会把PC设置为一个特定的存储器
地址。
这一地址放在被称为向量表(vector table)的特定地址范围内。
向量表的入口是一些
跳转指令
,跳转到专门处理某个异常或中断的子程序。
ARM Generic Interrupt Controller : ARM GIC : arm
通用中断控制器
如果对 通用中断控制器有疑惑的,请看:
***arm 通用中断控制器
中断的状态:
Inactive(不激活)
没有被激活或挂起的中断
Pending(挂起)
这个中断可以被硬件识别或是由软件产生的,正处於等待处理器处理。
Active(激活)
这个中断被处理器从
通用中断控制器中的
中断源中识别了出来,并且正在处理这个中断,且没有处理完成。
Active and pending(激活和挂起)
处理器正在处理某个中断,且通用中断控制器有一个挂起的中断,
这两个中断是属于同一个中断源的
中断流程:
进入异常
在异常发生后,ARM内核会作以下工作:
1.在LR中保存下一条指令的地址(即返回地址)
2.将CPSR复制到适当的SPSR中;
3.将CPSR模式位强制设置为与异常类型相对应的值;
4.原来无论是ARM状态或THUMB
状态,都进入ARM状态;
5.屏蔽
快速中断和外部中断。
6.强制PC从相关的异常向量处取指。
进入异常过程:
1. 程序在系统模式下运行
用户程序,假定当前处理
器状态为Thumb状态、允
许IRQ中断;
2. 用户程序运行时发生
I
RQ中断,硬件完成以下
动作:
*
置位I位(禁止IRQ中断)
*
清零T位(进入ARM状态)
*
设置MOD位,切换处理器
模式至IRQ模式
*
将下一条指令的地址存入
IRQ模式的LR寄存器
*
将CPSR寄存器内容存入
I
RQ模式的SPSR寄存器
*
将跳转地址存入PC,实
现跳转
中断响应步骤:
1、保护断点,
2、寻找中断入口,根据不同的中断源所产生的中断,查找不同的入口地址。
3、执行中断处理程序。
4、中断返回
具体实现如下:
1.判断处理器状态
当异常发生时,
处理器自动切换到ARM状态
,所以在异常处理函数中要判断
在异常发生前处理器是ARM状态还是Thumb状态。这可以通过检测SPSR的T位来判断。
2.向量表
每一个异常发生时总是从异常向量表开始跳转。最简单的一种情况是向量表里面的
每一条指令直接跳向对应的异常处理函数。
异常处理向量表如下:
利用跳转指令B建立异常向量表
ENTRY ;汇编程序开始
b reset ;跳入reset处理程序
b HandleUndef ;跳到未定义处理程序
b HandSWI ;跳到软中断处理程序
Ta的文章
更多
>>
计算模 m 的 k 次根
0 个评论
arm的中断体系结构
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮