• ARM7内核寄存器、中断向量控制器


              ARM7内核寄存器分布

    ARM7TDMI-S内核共37个寄存器。

    R0R7,通用寄存器,共8个。

    R8R12,除快中断有自己寄存器(Rx_fiq),其他模式共用,共10个。

    R13,栈指针寄存器。用户、系统共用外,其他模式有独立寄存器,共6个。

    R14,连接寄存器。当程序跳转(BL)、异常模式时,用于保存当前PC值。同上,共6个。

    R15,程序计数寄存器,所有模式共用,1个。

    CPSR,程序状态寄存器,同上,1个。

    SPSR,程序状态保存寄存器,用户、系统模式没有。其他模式各自独立。进入异常模式时,用于保存用户、系统模式的CPSR。共5个。

    以上为ARM7内核中的37个寄存器。

    CPSR位分布

    ARM7LPC2000系列,中断向量控制器。

    ARM内核本身只有FRQIRQ2条中断输入信号线。为了扩展中断源,ARM7采用中断向量控制器管理中断源,从而扩展出来了32个中断请求输入。中断向量控制器属于内核外设!

    CPUIRQFIQ中断由CPSR67位控制,1禁止,0使能。

    中断分类,FIQ、向量IRQ、非向量IRQ,优先级依次降低。

    FIQ一般只分配一个,不建议分配两个以上。

    ②向量IRQ最多可分配16个相爱难过来那个IRQ中断。

    ③非向量IRQ中断只有一个。

    基于VIC的每一个中断都有一个VIC通道号。LPC2000系列不足32个中断。

    模块

    标志

    VIC通道号

    WTD

    看门狗

    0

    ——

    (保留给软件)

    1

    ARM内核

    EmbeddedICERx

    2

    ARM内核

    EmbeddedICETx

    3

    Timer0

    匹配、捕获

    4

    Timer1

    匹配、捕获

    5

    UART0

    6

    UART1

    7

    PWM0

    8

    I²C0

    SI(状态改变)

    9

    SPI0

    10

    SPI1

    11

    PLL

    PLL锁定(PLOCK)

    12

    RTC

    计数器增加

    13

        系统控制

    EINT0

    14

    EINT1

    15

    EINT2

    16

    EINT3

    17

    A/D0

    18

    I²C1

    SI(状态改变)

    19

    BOD

    掉电检测

    20

    VIC用若干寄存器配置管理32个中断源

    一,VIC控制配置寄存器

    中断选择寄存器            VICIntSelect

    中断使能寄存器            VICIntEnable

    中断使能清零寄存器        VICIntEnclr

    三个寄存器的32位对应相应32中断源,实现32个中断的配置。

    VICIntSelect      相应位置 相应中断分配 FIQ中断,置 分配 IRQ中断

    VICIntEnable     相应位置 使能分配的相应的中断,置 无效

    VICIntEnClr      相应位置 禁止分配的相应的中断,置 无效

    二,VIC地址寄存器

    向量地址寄存器          VICVectAddr     保存向量IRQ中断地址

    默认向量地址寄存器      VICDefVectAddr  保存非向量IRQ中断地址      

    向量地址寄存器015     VICVectAddr X   保存向量IRQ中断地址

    向量控制寄存器015     VICVectCntl X

    VICVectCntl X相应位描述

    31:6

    5

    4:0

    功能

    保留

    向量IRQ使能

    分配给该向量IRQ通道的中断请求或软件中断的编号

    VICVectCntl X   bit5  1使能中断,置0并不会禁止中断本身,中断只是变为分享量的形式ARM7硬件不支持中断嵌套。

    向量IRQ通道有01516个,优先级依次降低。

    VICVectCntl X    4:0 bit 存放  中断通道号(基于VIC的编号032),中断编号放入较高向量IRQ通道控制寄存器,该中断就是向量IRQ中断中优先级较高的!

    例如:VICVectCntl0 = 0x20 | 4;         定时器0分配为向量IRQ通道0

    三,状态寄存器

    IRQ状态寄存器  VICIRQStatus  读取得到分配并使能为IRQ的中断状态

    FIQ状态寄存器  VICFIQStatus  读取得到分配并使能为FIQ的中断状态

    所有中断状态寄存器 VICRawIntr 读取得到所有中断状态

    以上寄存器位分配,对应VIC通道号

    读取,某位是 则代表该中断激活。

  • 相关阅读:
    质量属性分析之《淘宝网》
    每日总结(3.7)
    每日总结(3.6)
    读架构漫谈有感
    每日总结(3.5)
    每日总结(3.4)
    laravel 输出时间少了8小时
    laravel 循环添加新的数据之后如何排序
    php trait使用详解
    laravel Guzzle使用
  • 原文地址:https://www.cnblogs.com/qianggezhishen/p/7349480.html
Copyright © 2020-2023  润新知