【ARM】初识ARM——硬件理论基础

来源:互联网 发布:手机内置声卡软件 编辑:程序博客网 时间:2024/05/21 14:04
  1. 逻辑1和0 :数字电路中用高、低电平来表示逻辑1和0
  2. 二极管具有单向导电性 :正向导通,反向截止
  3. 三极管具有开关特性
    NPN型:电压方向C->E 基极是高电平时CE导通
    PNP型:电压方向E->C 基极是低电平时CE导通

  4. 电路图

    1. 如何让查找一个元器件:
      • 搜索丝印
      • 通过目录
    2. 电路图中网络标号相同的节点在电气上是连接在一块的
  5. 位操作
    unsigned int a; a为32位无符号整型 将a的第三位置1 其他位不变

    00000000 00000000 00000000 00001000a = a | 0x00000008;a = a | (1 << 3);

    unsigned int a; a为32位无符号整型 将a的第三位置0 其他位不变

    11111111 11111111 11111111 11110111a = a & 0xFFFFFFF7;a = a & (~(1 << 3));
  6. 位域操作
    unsigned int a; a为32位无符号整型 将a的第[7:4]改为0101 其他位不变

    1. 先清零

      a = a & (~(0xF << 4));
    2. 再置位

      a = a | (0x5 << 4);

    => a = a & (~(0xF << 4)) | (0x5 << 4);

    练习:
    unsigned int a; a为32位无符号整型 将a的第[28:23]改为101010 其他位不变

    a = a & (~(0x3F << 23)) | (0x2A << 23);
  7. 计算机的组成:
    计算机由输入设备、输出设备、存储器、运算器、控制器五部分组成,
    其中运算器、控制器共同组成了CPU

    1. 输入设备:
      输入设备的任务是把人们编好的程序和原始数据送到计算机中去
      并且将它们转换成计算机内部所能识别和接受的信息方式
      常见的有键盘、鼠标、扫描仪等

    2. 输出设备:
      输出设备的任务是将计算机的处理结果以人或其他设备所能接受的形式送出计算机
      常用的有显示器、打印机、绘图仪等。

    3. 存储器:
      存储器是用来存放程序和数据的部件,也是计算机能够实现“存储程序控制”的基础

      三级存储结构:

      • 高速缓存:
        速度最快、价格最贵、容量最小、断电数据丢失、cpu可直接访问
        存放当前正在执行的程序中的活跃部分,以便快速地向CPU提供指令和数据
      • 主存储器:
        速度、价格、容量介于高速缓存与辅助存储之间,数据断电丢失
        cpu可以直接访问,用来存放当前正在执行的程序和数据
      • 辅助存储器:
        速度最慢、价格最低、容量最大、断电数据不丢失、cpu不可直接访问
        用来存放暂时不参与运行的程序和数据,需要时再传送到主存

      地址空间:一个处理器能够访问的内存空间的大小
      N位地址总线的处理器能访问的空间是2的N次方

    4. 运算器:
      CPU对信息处理和运算的部件,常进行算术运算和逻辑运算,其核心是算术逻辑单元ALU

    5. 控制器:是整个计算机的指挥中心
      一条指令(机器码)的执行通常分为三个阶段:

      • 取址:根据PC中的值读取对应内存地址中的指令(机器码)到CPU
      • 译码:指令译码器对指令进行识别,将指令(机器码)翻译成具体的运算操作
      • 执行:执行指令并将结果写回寄存器
        每次完成取址后处理器内部的PC值自增使其指向下一条指令的地址

      编译原理:
      处理器能够识别的语言是机器码,一个处理器能够识别哪些机器码是由处理器的硬件决定的
      所以不同的机器码代表不同的运算,同样不同的处理器机器码是不兼容的即不可以移植
      汇编语言是机器码的符号化,即汇编就是使用符号代替机器码,所以不同的处理器汇编也不一样,汇编语言不可以移植
      C语言编译的时候我们可以使用不同的编译器将C编译成不同的汇编和机器码,所以C可以不依赖硬件

  8. 总线:
    能为多个部件服务的公共信息传送线路,能分时地发送与接收各部件的信息
    总线按照其传递的信息的类型可以分为数据总线、地址总线、控制总线

    DMA:直接内存操作(Direct Memory Access)
    使用DMA总线可以不通过CPU直接在内存和内存之间进行数据交换

  9. RISC(Reduced Instruction Set Computer)
    RISC:精简指令集处理器,
    RISC结构简单,选取了使用频率高的简单指令,指令长度固定,多为单周期指令
    在功耗、体积、价格等方面有很大优势,多用于嵌入式领域
    CISC:复杂指令集处理器
    侧重于硬件执行指令的功能性,CISC指令及处理器的硬件结构复杂
    CISC指令复杂,指令长度与周期不固定,在处理能力上有优势

  10. SoC:(System on Chip)片上系统
    将一个系统中所需要的全部部件集成在一个芯片上,在体积、功耗、价格上有很大优势

  11. ARM11以后的产品改用Cortex命名,并分成A、R、M三个分支,旨在为各种不同的市场提供服务
    Cortex-A: 面向尖端的基于虚拟内存的操作系统和用户应用
    Cortex-R: 实时处理器为要求可靠性、容错功能和实时响应的嵌入式系统提供高性能解决方案
    Cortex-M: 针对成本和功耗敏感的MCU和终端应用,一般不跑操作系统

  12. ARM Cortex-A9处理器为32位架构,能够单次对32位数据进行处理

  13. ARM 约定:
    Byte:8bits(1byte)
    Halfword:16bits(2byte)
    Word:32bits(4byte)

  14. 大部分ARM支持ARM指令集与Thumb指令集
    ARM指令集32bit,即每条指令占用32为的存储空间
    Thumb指令集16bit

  15. 当处理器运行ARM指令时
    所有指令必须word对齐
    pc值由其[31:2]决定,[1:0]位未定义,因为指令存储的起始地址必须为4的整数倍

  16. ARM中指令本身是多少位在内存存储时就应该多少位对其

  17. 多字节数据的存储
    小端对齐:低地址放低有效位,高地址放高有效位
    大端对齐:低地址放高有效位,高地址放低有效位
    ARM默认是小端对其

  18. ARM Cortex-A处理器有8个基本工作模式:
    User: 非特权模式,一般在执行上层的应用程序时处理器处于该模式
    FIQ: 当一个高优先级的中断产生时处理器将自动进入这种模式
    IRQ: 当一个低优先级(normal) 中断产生时将会进入这种模式
    SVC: 当复位或软中断指令执行时将会进入这种模式
    Abort: 当存取异常时将会进入这种模式
    Undef: 当执行未定义指令时会进入这种模式
    System: 使用和User模式相同寄存器集的特权模式
    Cortex-A处理器特有模式:
    Monitor:为了安全而扩展出的用于执行安全监控代码的模式

    模式的分类:
    1)除User模式外其他七种模式都是特权模式 - 权限比较高
    2)FIQ、IRQ、SVC、Abort、Undef异常模式 - 产生异常时进入这几种模式
    特定的模式下执行特定的代码,完成特定的功能,拥有特定的权限

  19. 寄存器:处理器内部的存储器
    处理器留给用户的接口
    寄存器处于CPU内部,没有地址
    每个模式只能使用本模式下可以使用的寄存器,一个模式下特有的寄存器其他模式下不可访问

    1. r13 (stack pointer, sp)
      栈指针,指向当前模式下的栈顶,保存的是栈顶的地址
    2. r14 (link register, lr)
      连接寄存器,当程序跳转时处理器自动将当前指令下一条指令的地址保存到r14,
      程序返回时将LR寄存器的值赋给PC就实现了程序的返回
    3. r15 (program counter, pc)
      程序计数器,存储了当前取址指令的地址
  20. 寄存器:CPU内部的存储器

    CPSR(current program status register)当前程序状态寄存器

    • bit[4:0]处理器模式位:
      决定当前处理器所处的模式

    • 中断禁止位:
      I=1:禁止IRQ中断
      F=1:禁止FIQ中断

    • 状态位:
      T=0:处理器处于ARM状态
      T=1:处理器处于Thumb状态

    • 条件位:
      N:ALU中产生了负数的结果
      Z:ALU中运算结果产生了0
      C:加法时产生了进位C自动置1否则为0,减法时产生了借位C位自动置0否则为1
      0xFFFFFFFE + 5 1 - 2
      V:对于有符号数符号位发生变化时自动置1

    [31:24]条件域F表示[23:16]状态域S表示[15:8]预留域X表示[8:0]控制域C表示

  21. ARM Cortex-A处理器的异常处理

    当处理器遇到异常后会暂停当前的程序转而去执行异常处理程序对异常进行处理
    处理完成后返回到被异常打断的代码的代码处继续执行

    1. 异常源:导致产生异常的事件
      FIQ、IRQ、Reset、软中断、DataAbort、PrefetchAbort、Undef

    2. 异常产生时ARM处理器的动作(自动完成):

      1. 拷贝CPSR到SPSR_
      2. 修改CPSR:
        • 改变处理器状态进入ARM状态
        • 改变处理器模式进入相应的异常模式
        • 设置中断禁止位禁止相应中断(如果需要)
      3. 保存返回地址到LR_
      4. 设置PC为相应的异常向量(跳转到异常向量表中对应的位置)
    3. 异常处理完成后,返回时需要(用户自己完成)

      1. 从SPSR_恢复CPSR,使处理器恢复到异常前的状态
      2. 从LR_恢复PC,程序返回到被异常打断的位置继续执行

      注:CPSR中保存的永远是当前程序运行状态,SPSR只是异常时对CPSR进行备份

    4. 7种异常源,异常发生时进入对应的异常模式

      异常源 FIQ IRQ Reset/软中断 DataAbort/PrefetchAbort Undef 异常模式 FIQ IRQ SVC Abort Undef
    5. 异常向量表
      异常发生时,ARM完成保护现场后自动将PC指向异常向量中对应的位置
      异常向量表是处于内存中的一段空间
      在异常向量表中为每个异常源分配了四个字节的存储空间
      一般情况下我们在异常向量表对应的位置写一条跳转指令使其跳转到异常处理程序入口

    6. 异常响应优先级
      Reset、Data Abort、FIQ、IRQ、Prefetch Abort、SWI、Undefined instruction

    7. FIQ的响应速度比IRQ快的原因:

      • FIQ位于异常向量表的最末
        可以直接把异常处理程序写在异常向量表之后,省去了程序跳转的时间
      • FIQ模式有5个私有寄存器 (r8-r12)
        执行中断处理程序前无需压栈保存现场,可直接处理中断
      • FIQ的优先级高于IRQ
        当两个异常同时发生时先响应FIQ
        FIQ可以中断RIQ,但RIQ不能中断FIQ
  22. 指令流水线
    指令执行过程中取址、译码、执行三个阶段使用的硬件电路相互独立
    当对N地址中的指令进行取址时译码器可以对N-4地址的指令进行译码
    运算器可以对N-8地址中的指令进行执行,从而形成了三级流水线结构
    这种结构降低了指令执行的平均周期。
    ARM处理器中当前取指的指令由PC决定,所以当前执行的指令的地址是PC-8
    不管多少级流水线PC指向的永远是当前取址的指令,当前执行的指令是PC-8地址处的指令

原创粉丝点击