s3c2440裸机-异常中断1-异常中断的原理与流程

发布者:EtherealMelody最新更新时间:2024-07-05 来源: elecfans关键字:异常中断  流程 手机看文章 扫描二维码
随时随地手机看文章

1.异常中断概述

在arm架构的处理器中,cpu有7中工作模式,2中工作状态。

1.CPU模式(Mode):

7种Mode: 除了usr/sys,其他5种都是异常模式。我们知道中断属于异常的2中,中断有irq,fiq。

usrsysundefined(und)Supervisor(svc)Abort(abt)irqfiq
用户模式系统模式未定义指令异常模svc管理模式终止模式(1.指令预取终止(读写某条错误的指令导致终止运行);2.数据访问终止(读写某个非法地址程序终止))irq中断快中断


除了usr模式,其他6中为特权模式。 CPU无法从usr模式直接进入特权模式。不能直接进入特权模式,那么怎么进入特权模式呢?

可以通过设置CPSR(后面会讲)进入其他模式。

2种工作State:

ARM state
Thumb state(几乎用不上)

3.寄存器:

(1)通用寄存器:

(2)备份寄存器(banked register):

    CPSR:当前程序状态寄存器(Current Program Status Register) 反映程序处在那种状态

    SPSR:CPSR的备份寄存器 (Saved Program Status Register)  用来保存'被中断前的CPSR'

下图是我们arm状态下的通用寄存器和程序状态寄存器



R13是SP(栈指针)

R14是LR(link register),程序跳转或者发成异常时的返回地址

R15是PC(程序计数器)

假设cpu执行:

mov R0, R8
mov R0,R8_fiq

在usr/System 模式下访问的R8, 但是在FIQ模式下,访问R8是访问FIQ模式专属的R8寄存器,不是同一个物理上的寄存器。 在5种异常模式中每个模式都有自己专属的R13 R14寄存器,R13用作SP(栈), R14(LR)是用来保存发生异常时的指令地址。

为什么快中断(FIQ)有那么多专属寄存器? 这些寄存器称为备份寄存器,我们先看下中断处理流程:

1 保存现场(保存被中断模式的寄存器)---(比如程序正在sys/usr模式下运行,当发生中断时,需要把R0-R14这些寄存器全部保存下来)

2 异常处理(去分辨是哪一个中断源产生了中断,去执行对应的中断服务程序)

3 恢复现场(恢复被中断时保存下来的寄存器R0-R14)


但如果是快中断,那么我就不需要保存系统/用户模式下的R8 ~ R12这几个寄存器,因为在FIQ模式下有自己专属的R8 ~ R12寄存器,省略保存寄存器的时间,加快处理速度,所以它才称得上快中断。

PSR程序状态寄存器: 在异常中断中PSR寄存器会使用的很频繁,PSR寄存器的格式如下图:



我们再来看看下表,反映的是PSR的 M[4:0]与arm工作模式的关系:



我们可以按照上图的对应关系设置CPSR,让其进入与之对应的模式。

4.异常向量表:

异常向量:不同的异常有不同的入口函数,那么这个异常入口函数的地址就是存放在该异常向量的位置。从该异常向量读取到的数据就是异常入口函数的地址。

异常向量表就是由异常向量组成的集合。

下图是我从uboot源代码中截取的smdk2410 的异常向量表:(2440异常向量表也是这个)

.globl _start
_start: b       reset
    ldr pc, _undefined_instruction
    ldr pc, _software_interrupt
    ldr pc, _prefetch_abort
    ldr pc, _data_abort
    ldr pc, _not_used
    ldr pc, _irq
    ldr pc, _fiq

异常向量表对应的地址如下图:



2.异常处理流程

CPU是如何进入到中断模式,执行中断服务程序的?

1.中断前:

下图是中断未触发前的程序执行过程:



那么如何初始化中断?

1,设置中断源(使中断能够产生,让CPU知道是哪个中断)
2,设置中断控制器(设置中断屏蔽,中断优先级)
3,设置中断总开关CPSR (使能中断)

2.中断产生后:

举个栗子:按键按下,产生按键irq。

硬件上的处理流程:

cpu强制跳转到异常向量表上对应的_irq异常向量(0x18)去读取指令(这个是CPU强制执行的,不需要我们去控制)。

具体的进入中断向量和中断返回流程见下图:



进入:
    (1) LR_异常=PC + offset(具体多少看下图)
    (2)SPSR_异常=被中断前的程序模式CPSR
     (3) CPSR被设置成对应的异常模式
    (4)跳转到对应的异常向量去执行

退出(返回):进入和退出就是一个逆过程
    (1)PC= LR_异常 -offset
    (2)被中断前的程序模式CPSR = SPSR_异常
    (3)中断结束,清中断

进入异常和返回异常时pc和lr的关系如下图:



从图中我们发现进入不同异常,offset的值也是有差异的。

软件上的处理流程:

1.当跳转到irq异常向量(0x18)后,发现该处是一条跳转指令“ldr pc, _irq”,

那么会通过ldr绝对跳转指令跳到到真正的中断处理函数_irq去执行。

2.那么在_irq的函数中我们需要按照之前说的**中断处理流程**去执行:

    (1)保存现场

    (2)异常处理(去分辨是哪一个中断源产生了中断,去执行对应的中断服务程序)

    (3)恢复现场


下面用流程图总结下中断产生后的详细处理过程:



关键字:异常中断  流程 引用地址:s3c2440裸机-异常中断1-异常中断的原理与流程

上一篇:s3c2440裸机-异常中断2-und未定义指令异常
下一篇:s3c2440裸机-代码重定位-4-清bss的优化和位置无关码

推荐阅读最新更新时间:2024-11-16 20:18

用大数据优化生产流程,这家企业完成A轮融资
近日, 上海积梦智能科技有限公司(以下简称“积梦智能”)宣布完成数千万人民币A轮融资 ,本轮融资由盛大网络、连尚网络创始人陈大年的澄潭网络领投,大观资本跟投。此次融资资金主要用于市场拓展和产品研发投入等。 据官网介绍,积梦智能核心团队来自苹果、华为、上汽、谷歌、阿里等大型制造及互联网技术公司,致力于帮助制造业实现数据驱动,公司围绕工业互联网平台和工厂数字化智能化需求,利用互联网和物联网技术可帮助制造企业实现工业智能决策、智能数据分析以及智能运营等产品。 从产品来看,截至目前,积梦智能主要有灵飞工业互联网平台、工业数据分析、数字工厂等三大业务板块,同时积梦智能已为 上汽集团、中国航天、上海电气、华峰集团 等企业提供服
[机器人]
LED倒装技术及工艺流程分析
1、引言   发光二极管( LED )作为新型的绿色 照明 光源,具有节能、高效、低碳、体积小、反应快、抗震性强等优点,可以为用户提供环保、稳定、高效和安全的全新照明体验,已经逐步发展成为成熟的半导体照明产业。   近年来,全球各个国家纷纷开始禁用白炽灯泡,LED将会迎来一个黄金的增长期。此外,近年来LED在电视机背光、手机、和平板电脑等方面的应用也迎来了爆发式的增长,LED具有广阔的应用发展前景。    2、倒装 LED技术 的发展及现状   倒装技术在LED领域上还是一个比较新的技术概念,但在传统IC行业中已经被广泛应用且比较成熟,如各种球栅阵列封装(BGA)、芯片尺寸封装(CSP)、晶片级芯片尺寸封装(WLCSP)
[电源管理]
LED倒装技术及工艺<font color='red'>流程</font>分析
揭秘半导体制造全流程(下篇)
我们已经从前两篇的文章中了解了半导体制造的前几大步骤, 包括晶圆加工、氧化、光刻、刻蚀和薄膜沉积。 在今天的推文中,我们将继续介绍 最后三个步骤 :互连、测试和封装,以完成半导体芯片的制造。 第六步 互连 半导体的导电性处于导体与非导体(即绝缘体)之间,这种特性使我们能完全掌控电流。通过基于晶圆的光刻、刻蚀和沉积工艺可以构建出晶体管等元件,但还需要将它们连接起来才能实现电力与信号的发送与接收。 金属因其具有导电性而被用于电路互连。用于半导体的金属需要满足以下条件: 低电阻率:由于金属电路需要传递电流,因此其中的金属应具有较低的电阻。 热化学稳定性:金属互连过程中金属材料的属性必须保持不变。 高可靠性:随
[半导体设计/制造]
揭秘半导体制造全<font color='red'>流程</font>(下篇)
S3C2440裸机------异常与中断__CPU的工作模式和状态以及寄存器
1.CPU工作模式(Mode) ARM CPU有七种模式,各种模式如下图所示。注意用户模式下不可进入其他模式,用户模式是在有操作系统的时候给应用程序使用的,写应用程序的人水平千差万别,不能保证写的程序是好是坏,所以让应用程序运行在用户模式,限制应用程序的权限,防止破坏整个系统, 2.状态(State) ARM架构的CPU有ARM state和Thumb state, ARM State:用的是ARM指令集,每个指令占据4 byte, Thumb State:用的是Thumb指令集,每个指令2 byte. 比如对于同样的一条指令,MOV R0,R1 对于ARM指令集就要占据四个字节,对于Thumb指令集占据两个字节
[单片机]
<font color='red'>S3C2440</font><font color='red'>裸机</font>------异常与中断__CPU的工作模式和状态以及寄存器
物位测量产品生产过程中为何要设置产品生产流程
  正规大中型企业,产品在生产过程中都会设置有产品生产流程卡,用以记录产品在生产过程中的原材料来源和批次、生产日期、经历的加工工序以及测试测得到的一些重要参数等方面的重要信息。深圳计为自动化技术有限公司在生产各种物位测量产品时,也严格设置产品生产流程卡,记录产品生产过程和检测结果。那么,生产过程中为何要设置产品生产流程卡呢?   之所以在生产过程中设置产品生产流程卡,是因为记录有重要信息的产品生产流程卡使每个出厂产品有了身份档案,就如同我们每个人的身份档案一样,便于对产品生产情况的随时查阅。具体来讲,设置产品生产流程卡有以下重要作用:   一、在生产过程中,有助于监控和提高产品合格率,切实保证产品质量。因为通过产品生产流
[测试测量]
物位测量产品生产过程中为何要设置产品生产<font color='red'>流程</font>卡
arm linux 下中断流程简要分析注册中断
二 注册中断 这部分我们以3sc2410下的watchdog的中断为例来讲解中断的注册及调用过程。 drivers/char/watchdog/s3c2410_wdt.c: static int s3c2410wdt_probe(struct platform_device *pdev) { /*注册中断*/ ret = request_irq(res- start, s3c2410wdt_irq, 0, pdev- name, pdev); } 在s3c2410wdt_probe函数中为watchdog注册了一个中断,中断号为IRQ_WDT, #define IRQ_WDT
[单片机]
arm linux 下中断<font color='red'>流程</font>简要分析注册中断
简化设计流程,ADI 发力完整射频信号链解决方案
日前,ADI公司发布了12款最新的覆盖全部射频(RF)信号链的RF放大器系列产品,分为四类:低噪声放大器(LNA)、中频放大器(IFA)、驱动放大器和射频增益模块。 图为ADI 的RF标准构架,其中绿色标志为ADI新品所属类别。 据ADI公司高级应用工程师陈红女士介绍,ADI之前在射频放大器方面投入比较少,没有低噪放和驱动放大器,只有几个功能模块,不能提供整体设计方案。新产品的加入使得ADI可以为客户提供接收,发射,数字基站以及GSP整套的解决方案。 目前,很多的集成电路厂商都单独或者与其他厂商合作的方式提供完整的解决方案。 那么,这样整体解决方案究竟有什么好处呢? 1. 产品的性能延续性得到提高:同一公司的产品,
[手机便携]
GD32开发实战指南(基础篇) 第4章 GD32启动流程详解(Keil版)
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 对于我们常用的桌面操作系统而言,我们在开发应用时,并不关心系统的初始化,绝大多数应用程序是在操作系统运行后才开始运行的,操作系统已经提供了一个合适的运行环境,然而对于嵌入式设备而言,在设备上电后,所有的一切都需要由开发者来设置,这里处理器是没有堆栈,没有中断,更没有外围设备,这些工作是需要软件来指定的,而且不同的CPU类型、不同大小的内存和不同种类的外设,其初始化工作都是不同的。本文将以GD32F207IK (基于Cortex-M3)为例进行讲解。 在开始正式讲解之前,你需要了解ARM寄存器、汇编以及反编译相关的知识
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved