ARM中断深入分析几点
ARM中断深入分析几点
1.程序发生中断后,是如何跳转到中断程序里面的?
2.执行完中断后,如何返回到原来被打断的地方接着执行呢?
3.ARM处理器的流水线结构对中断返回地址的计算有什么影响?
4.ARM7,ARM9处理器流水线结构一个是3级一个是5级,为什么中断返回地址是相同的?
5.ARM启动后是SVC模式,发生中断后进入什么模式?
6.发生中断后,哪些事情是需要ARM自动完成?哪些是需要编程实现的?
读书留痕,思考留果
1.程序发生中断后,是如何跳转到中断程序里面的?
首先要执行完当前指令!然后自动完成以下事情:
CPSR---->SPSR_irq(IRQ模式)(逆过程不能自动完成)
PC-4 ----> R14_irq
PC <---- 0X00000018(irq中断向量表的入口地址)
程序员需要补充做的事情有:
R0----R12,和LR的值入栈。
用户处理函数放在irq中断向量表的入口地址,以供跳转。
2.执行完中断后,如何返回到原来被打断的地方接着执行呢?
恢复R0--R12,出栈;
R14-4 ----> PC
SPSR_irq---->CPSR
3.ARM处理器的流水线结构对中断返回地址的计算有什么影响?
pc始终指向当前正在执行指令的下两条指令处(PC-8).执行完当前的,就变为PC-4。保存的就是PC-4.
4.ARM7,ARM9处理器流水线结构一个是3级一个是5级,为什么中断返回地址是相同的?
因为:pc始终指向当前正在执行指令的下两条指令处(PC-8),不管是几级流水线。
5.ARM启动后是SVC模式,发生中断后进入什么模式?
IRQ模式
6.发生中断后,哪些事情是需要ARM自动完成?哪些是需要编程实现的?
ARM自动完成:
CPSR---->SPSR_irq(IRQ模式)(逆过程不能自动完成)
PC-4 ----> R14_irq
PC <---- 0X00000018(irq中断向量表的入口地址)
需要编程实现的:
R0----R12,和LR的值入栈。
用户处理函数放在irq中断向量表的入口地址,以供跳转。
今天的学习就到这里了。
ARM中断深入分析几点的更多相关文章
- 可能是讲解ARM中断和中断嵌套最通俗易懂的文章
几天前一个学生问我ARM中断嵌套的问题,我才发现原来在我心中理所当然的事对学生来说理解实属不易. ARM有七种模式,我们这里只讨论SVC.IRQ和FIQ模式. 我们可以假设ARM核心有两根中断引脚 ...
- linux-2.6.26内核中ARM中断实现详解(转)
转载:http://www.cnblogs.com/leaven/archive/2010/08/06/1794293.html 更多文档参见:http://pan.baidu.com/s/1dDvJ ...
- ARM 中断状态和SVC状态的堆栈切换 (异常)【转】
转自:http://blog.csdn.net/edwardlulinux/article/details/9261393 版权声明:本文为博主原创文章,未经博主允许不得转载. ARM 中断状态和SV ...
- arm中断体系结构
ARM处理器中有7种类型的异常,按优先级从高到低的排列如下: 复位异常(Reset). 数据异常(Data Abort). 快速中断异常(FIQ) ...
- arm中断汇编
IRQ_Handler: push {lr} /* 保存 lr 地址 */ push {r0-r3, r12} /* 保存 r0-r3,r12 寄存器 */ mrs r0, spsr /* 读取 sp ...
- ARM中断与架构知识 精简知识点
目录 一.ARM系统的异常与中断 二.CPU模式与寄存器 1.ARM CPU模式 2.ARM CPU state,两种指令集 3.ARM CPU寄存器: 引申介绍一下存储空间中的数据存放 4.ARM三 ...
- LINUX-内核-中断分析-中断向量表(3)-arm【转】
转自:http://blog.csdn.net/haolianglh/article/details/51986987 arm中断概念 在<ARM体系结构与编程>第9章中说到,ARM 中有 ...
- request_irq() | 注册中断服务函数【转】
本文转载自:http://blog.csdn.net/wealoong/article/details/7566546#t0 参考 : ARM Linux 中断机制分析.pdf linux-2.6. ...
- STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)
系统时钟滴答实验很不难,我就在面简单说下,但其中涉及到了STM32最复杂也是以后用途最广的外设-NVIC,如果说RCC是实时性所必须考虑的部分,那么NVIC就是stm32功能性实现的基础,NVIC的难 ...
随机推荐
- c++ sprintf() 用法
1. char boxData[100]; fi.mWidth = 1.0, fi.mCenter_x= 2.1, fi.mCenter_y=1.1; sprintf(boxData, " ...
- 【后缀数组】【SP1811】 LCS - Longest Common Substring
题目链接 题意翻译 输入2 个长度不大于250000的字符串,输出这2 个字符串的最长公共子串.如果没有公共子串则输出0 . 思路 求两个串的最长公共子串 代码 #include<iostrea ...
- 处理 MySQL 因为 SLAVE 崩溃导致需要手动跳过 GTID 的问题 | 关于 GTID
今天发生了与之前某篇博客相似的问题,有同学在不同步的 binlog 库中使用语句 database.table 命令对表进行 drop 导致 master 丢弃该表但是从库并未能同步到该操作.并且后续 ...
- 富文本编辑器kindeditor的使用
第一步:导入前端js文件 <!-- 富文本编辑器 --> <link rel="stylesheet" href="../plugins/kindedi ...
- ICEM-两管相贯
原视频下载地址:https://pan.baidu.com/s/1qYe0AzM 密码: tmd5
- es6学习2:变量的解构赋值
一:数组的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar ba ...
- 分享一些好用的 Chrome 扩展
阅读本文大概需要 2.8 分钟. 前言 使用浏览器扩展程序可以使你的工作效率提高数倍不止,那么下面我就向大家分享一下我日常使用的扩展,可能大多数扩展大家都已经在使用了,不过也难免有一两个是你不知道的. ...
- java 73题以及答案
作者:乌枭原文:https://blog.csdn.net/qq_34039315/article/details/78549311 1.在java中守护线程和本地线程区别? java中的线程分为两种 ...
- Server 2003 操作系统位数
安装好电脑系统,如何查看windows 2003/xp/win7是64位还是32位? 方法/步骤 第一种方法:桌面上鼠标右键单击“计算机”(我的电脑) 在弹出的快捷菜单中选择“属性”,如果看到64的字 ...
- Net core学习系列(二)——Net Core项目文件简介
一. ASP.NET Core 项目文件夹解读 ASP.NET Core 1.0 发布以来,相较于传统项目编码发布的行为,新项目中的操作已经有了很大的变化,如解析依赖,选择运行平台和Runtime等等 ...