arm中断体系结构

 ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:
             

     复位异常(Reset)、
     数据异常(Data Abort)、
     快速中断异常(FIQ)、
     外部中断异常(IRQ)、
     预取异常(Prefetch Abort)、
     软件中断(SWI)、
     未定义指令异常(Undefined instruction)。

    

  ARM异常优先级:

    

  (1)当发生各种异常时,CPU会进入对应的工作模式,并跳转到它的异常向量处进行执行程序,那么这一步骤我们可以在汇编文件中进行配置:

  异常向量:在0x00,0x04...处的指令称为异常向量

.text

.global _start

_start:

   @0x00复位异常
    b reset

   @0x04未定义指令终止异常
undefined_interrupt:

    b undefined_interrupt

    @0x08软中断异常
software_abort:

     b software_abort

     @0x0c预取异常
prefetch_abort:

      b prefetch_abort

      @0x10数据异常
data_abort:

       b data_abort

      @0x14保留
notused:

       b notused

      @0x18外部中断
handle_iqr:

       b handle_iqr

       @0x1c快速中断
handle_fqr:

        b  handle_fqr

 (2)当上电或复位时,CPU进入svr模式,进入复位异常并跳转到地址0x00处进行执行程序:

   
        当复位异常时,系统执行下列伪操作: 
            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变量,跳转到应用程序执行。

reset:

   ldr sp,=4096  //设置栈  

   bl disable_watch_dog  //关闭看门狗

   msr cpsr_c, #0xd2     //0xd2--11100010b  (这里的I、F位置1,即禁止中断--未进行全部初始化,不能开中断)
   ldr sp, =3072  //进入中断模式,设置栈指针

   msr cpsr_c, #0xd3    //0xd3--11100011b
   ldr sp, =4096  //进入管理模式,设置栈指针(在复位异常中提前设置中断模式的栈指针,防止中断触发时栈指针未设置而系统崩溃)

   bl init_led  //初始化led的gpio管脚

   bl init_irq //初始化中断

   msr cpsr_c, #0x53  //使能IRQ中断0x53--01010011

   ldr lr, =halt_loop  //设置返回地址
   ldr pc, =main      //调用main函数

halt_loop:

     b   halt_loop
   

 关于当前程序状态寄存器CPSR和msr汇编指令的知识:

  1)CPSR寄存器

  ARM每种工作模式除R0~R15共16个寄存器外,还有第17个寄存器CPSR,CPSR中一些位被用于标识各种状态,一些位被用于标识当前出于什么工作模式

   

  如上图所示,它的CPU状态位=>            T位=0 --ARM状态

                                           =1 --Thumb状态

              它的中断禁止或使能位=>  I和F位=0 --使能

                                           =1 --禁止

      它的M[4:0]位=> xxxxx,通过编写它可以使得CPU进入相应的工作模式

      

      它的条件码标志位:N、Z、C、V--它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。

      

    

原文地址:https://www.cnblogs.com/darren-pty/p/darren_irq.html

时间: 2024-10-10 17:23:00

arm中断体系结构的相关文章

linux-2.6.26内核中ARM中断实现详解(转)

转载:http://www.cnblogs.com/leaven/archive/2010/08/06/1794293.html 更多文档参见:http://pan.baidu.com/s/1dDvJRaD 作者:刘洪涛,华清远见嵌入式学院金牌讲师,ARM ATC授权培训讲师. 看了一些网络上关于linux中断实现的文章,感觉有一些写的非常好,在这里首先感谢他们的无私付出,然后也想再补充自己对一些问题的理解.先从函数注册引出问题吧. 一.中断注册方法 在linux内核中用于申请中断的函数是req

中断体系结构

一. 1 @***************************************** 2 HandleDataAbort: 3 b HandleDataAbort 4 @************* 5 @ 0x14: 保留 @ 6 @************* 7 HandleNotUsed: 8 b HandleNotUsed 9 @*************************** 10 @ 0x18: 中断模式的向量地址 @ 11 @*********************

S3c2440的中断体系结构

概述 S3C2440A中的中断控制器接受来自60个中断源的请求.提供这些中断源的可以是内部外设,如DMA控制器.UART.IIC等等.在这些中断源中,UARTn.AC97和EINTn中断对于中断控制器而言是"或"关系(在这几个源中还可以有中断分支). 当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T内核的FIQ或IRQ. 总流程图如下: 程序状态寄存器(PSR)的 F 位和 I 位 如果 ARM920T CPU 中的 PSR 的 F 位被置位为

1.ARM嵌入式体系结构与接口技术(Cortex-A8版)

第1章 嵌入式系统基础知识 ---->1.1嵌入式系统的概述 -------->1.1.1嵌入式系统简介 -------->1.1.2嵌入式系统的特点 -------->1.1.3嵌入式系统的发展 ---->1.2嵌入式系统的组成 -------->1.2.1嵌入式系统的硬件组成 1.2.2嵌入式系统的软件组成 1.3嵌入式操作系统举例

中断控制器

一.ARM中断体系结构 1.7种工作模式 不同工作模式下,对应不一样的寄存器 2.异常 中断属于一种异常,按键.串口等中断 异常向量入口 二.S3C2440中断体系结构 1.中断处理过程 2.相关寄存器 三.源码分析

LINUX-内核-中断分析-中断向量表(3)-arm【转】

转自:http://blog.csdn.net/haolianglh/article/details/51986987 arm中断概念 在<ARM体系结构与编程>第9章中说到,ARM 中有个概念叫做“异常中断”,也就是包括外部中断在内的各种异常.显然,ARM体系的“异常中断”概念更加接近MIPS体系中的“异常”概念. 既然更类似MIPS体系,那么自然的ARM体系就存在“异常中断入口”和“异常中断向量表”的概念. arm的异常中断向量表 非向量化中断 ARM体系定义了7种异常中断,在<AR

ARM体系结构(1)

嵌入式系统的构成 软件: 应用程序 第三方库(Qt,libc,myclient) 操作系统: 引导程序 内核+驱动 文件系统 硬件: 底板: 外置芯片 网卡(DM9000) 声卡 ADC 电源 USB 接口: 串口 SD LCD+触摸屏 摄像头 按键 核心板: Soc(CPU+uart+timer) DDR Nand ARM的体系结构 一.ARM的工作模式 用户模式 系统模式 快速中断模式 外部中断模式 特权模式 快速模式 未定义模式 除用户模式外,其它被称为特权模式 用户模式和系统模式外,其它

嵌入式开发学习(1)&lt;ARM体系结构&gt;

SoC : 在cpu 里内嵌了很多外设,现在所说的cpu 实际上都是SoC. 32位cpu指的是数据总线是32位的. 32位的地址总线寻址范围是4G.2的32次方. CISC complex instruction set computer 复杂指令集cpu:指令多,追寻一条指令完成一个操作的理念.Cpu设计复杂,但编译器简单,使用简单,功耗高,出现早,inter还在沿用.300多条指令. RISC reduced instruction set computer 精简指令集cpu:设计理念是提

79.ZYNQ内部私有定时器中断

上篇文章实现了了PS接受来自PL的中断,本片文章将在ZYNQ的纯PS里实现私有定时器中断.每个一秒中断一次,在中断函数里计数加1,通过串口打印输出. *本文所使用的开发板是Miz702(兼容zedboard) PC 开发环境版本:Vivado 2015.2 Xilinx SDK 2015.2* 中断原理 中断对于保证任务的实时性非常必要,在ZYNQ里集成了中断控制器GIC(Generic Interrupt Controller).GIC可以接受I/O外设中断IOP和PL中断,将这些中断发给CP