• ARM相关


    7种工作模式:
    User         用户模式          正常程序执行
    FIQ          快速中断模式      高优先级中断
    IRQ          外部中断模式      通常中断处理
    Surpervisor  管理模式          复位或软中断
    Abort        中止模式          存取异常
    Undefined    未定义模式        执行未定义指令
    System       系统模式          特权级的

    寄存器:
    ARM有37个寄存器:31个32位通用寄存器,6个状态寄存器(只用12位)。
    未分组寄存器R0~R7  是真正的通用寄存器
    分组寄存器R8~R14   使用FIQ模式时,访问R8_fiq~R12_fiq
    寄存器R13在ARM指令中常用作堆栈指针SP,这是一种习惯用法
    R14 作为子程序连接寄存器 当BL指令执行时,R14中得到R15(程序计数器)的备份 其他情况作通用寄存器
    R15 程序计数器 ARM状态下:位[1:0]为0,位[31:2]用于保存PC,在Thumb状态下,位[0]为0,位[31:1]用于保存PC
    PC总指向正在取指的指令,也就是当前指令的下两条指令的地址,
    对于ARM状态,指向当前指令地址值加8个字节的地址
    对于Thumb状态,指向当前指令地址值加4个字节的地址

    CPSR (Current Program Status Register)
    M[4:0] 处理器模式选择
    T 处理器工作状态选择,T=1,Thumb状态;T=0,ARM状态
    I=1,禁止IRQ中断
    F=1,禁止FIQ中断
    N:判负标志
    Z:判0标志
    C:进位标志
    V:溢出标志

     
    M[4:0]    模式       
    10000    User       
    10001    FIQ       
    10010    IRQ       
    10011    Supervisor       
    10111    Abort       
    11011    Undefined       
    11111    System    


    humb状态和ARM状态下寄存器的映射
    Thumb     ARM
    R0~R7     R0~R7
    CPSR      CPSR
    SPSR      SPSR
    SP        R13
    LR      R14
    PC      R15

    异常:
    进入异常行为:
    1.将下一条指令的地址保存到相应的Link寄存器中(R14),如果是ARM状态进入异常,根据异常状态,数值为当前PC+4或PC+8
    2.拷贝CPSR到相应的SPSR
    3.根据异常类型强制改变CPSR模式位的值,禁止IRQ,禁止FIQ(这两个在需要时才禁止)
    4.令PC的值指向异常处理向量所指的下一指令(执行中断处理程序)

    异常返回行为:
    1.将Link寄存器减去相应的偏移量,赋给PC
    2.拷贝回SPSR到CPSR
    3.清除中断禁止标志

    每个异常模式对应有两个寄存器R13保存堆栈指针,R14保存返回地址

    异常响应过程:
    R14_<mode>=return link        //保存返回地址
    SPSR_<mode>=CPSR              //拷贝CPSR
    CPSR[4:0]=mode number         //改变模式
    CPSR[5]=0                     //运行于ARM状态
    CPSR[6]=1                     //禁止IRQ中断
    if <mode>=Reset or FIQ then   //当Reset或FIQ异常中断时
    CPSR[7]=1                     //禁止FIQ中断
    PC=exception vector address   //PC转到中断向量地址



    异常中断向量:


     
    地址    异常    进入模式       
    0x0000 0000    复位    管理模式       
    0x0000 0004    未定义指令    未定义模式       
    0x0000 0008    软件中断    管理模式       
    0x0000 000C    预取指中止    中止模式       
    0x0000 0010    数据中止    中止模式       
    0x0000 0014    保留    保留       
    0x0000 0018    IRQ    IRQ       
    0x0000 001C    FIQ    FIQ    


    ARM中断优先级:
     
    优先级    异常       
    1    复位       
    2    数据中止       
    3    FIQ       
    4    IRQ       
    5    预取指中止       
    6    未定义指令,SWI    

    ARM中的大端,小端格式
    大端格式中,字数据的高字节存储在低地址,低字节存储在高地址



  • 相关阅读:
    PredictionIO+Universal Recommender快速开发部署推荐引擎的问题总结(1)
    SpringJDBC的JdbcTemplate在MySQL5.7下不支持子查询的问题
    POP3接收邮件
    发送邮件
    电子邮件介绍
    线程优先级队列
    线程同步
    threading模块
    _thread模块
    使用线程
  • 原文地址:https://www.cnblogs.com/qinkai/p/2431526.html
Copyright © 2020-2023  润新知