zoukankan      html  css  js  c++  java
  • cortex_M3嵌套向量中断控制器NVIC

    CortexM3处理器中,NVIC的存在不仅方便了低延时异常和中断的处理,而且还实现了电源管理和系统的寄存器。

    NVIC 支持240 个优先级可动态配置的中断,每个中断的优先级有256 个选择。低延迟的中断处理可以通过紧耦合的NVIC 和处理器内核接口来实现,让新进的中断可以得到有效的处理。NVI 通过时刻关注压栈(嵌套)中断来实现中断的末尾连锁(tail-chaining)。

    用户只能在特权模式下完全访问 NVIC,但是如果使能了配置控制寄存器,就可以在用户模式下挂起(pend)中断。其他用户模式的访问会导致总线故障。一般情况下,NVIC的所有寄存器都可采用字节,半字和字方式进行访问。

    不管处理器存储字节的顺序如何,所有 NVIC 寄存器和系统调试寄存器都是采用小端(little endian)字节排列顺序,即低位字节存储在低地址。

    NVIC控制器除了实现异常处理还实现了一些系统控制功能。NVIC寄存器空间分成以下几部分:

    ● 0xE000E000 - 0xE000E00F. 中断类型寄存器;

    ● 0xE000E010 - 0xE000E0FF. 系统定时器;

    ● 0xE000E100 - 0xE000ECFF. NVIC;

    ● 0xE000ED00 - 0xE000ED8F. 系统控制模块,包括CPUID,系统控制、配置和状态,故障报告;

    ● 0xE000EF00 - 0xE000EF0F. 软件触发异常寄存器;

    ● 0xE000EFD0 - 0xE000EFFF. ID 空间。

    表2.15列出了NVIC寄存器。

    表2.15 NVIC寄存器

    名称

    类型

    地址

    复位值

    中断控制类型寄存器

    只读

    0xE000E004

     

    系统时钟节拍(SysTick)控制与状态寄存器

    读/写

    0xE000E010

    0x00000000

    系统时钟节拍(SysTick)重装值寄存器

    读/写

    0xE000E014

    不可预测

    系统时钟节拍(SysTick)当前值寄存器

    读/写清除

    0xE000E018

    不可预测

    系统时钟节拍(SysTick)校准值寄存器

    只读

    0xE000E01C

    STCALIB

    Irq0~31 使能设置寄存器

    读/写

    0xE000E100

    0x00000000

    Irq224~239 使能设置寄存器

    读/写

    0xE000E11C

    0x00000000

    Irq0~31 使能清除寄存器

    读/写

    0xE000E180

    0x00000000

    Irq224~239 使能清除寄存器

    读/写

    0xE000E19C

    0x00000000

    Irq0~31 挂起设置寄存器

    读/写

    0xE000E200

    0x00000000

    Irq224~239 挂起设置寄存器

    读/写

    0xE000E21C

    0x00000000

    Irq0~31 挂起清除寄存器

    读/写

    0xE000E280

    0x00000000

    Irq224~239 挂起清除寄存器

    读/写

    0xE000E29C

    0x00000000

    Irq 0~31 激活位寄存器

    只读

    0xE000E29C 0x00000000

    0x00000000

    Irq 224~239 激活位寄存器

    只读

    0xE000E31C

    0x00000000

    Irq 0~31 优先级寄存器

    读/写

    0xE000E400

    0x00000000

    Irq236~239 优先级寄存器

    读/写

    0xE000E4F0

    0x00000000

    CPUID 基址寄存器

    只读

    0xE000ED00

    0x410FC230

    中断控制状态寄存器

    读/写或只读

    0xE000ED04

    0x00000000

    向量表偏移寄存器

    读/写

    0xE000ED0C

    0x00000000

    应用中断/复位控制寄存器

    读/写

    0xE000ED0C

    0x00000000

    系统控制寄存器

    读/写

    0xE000ED10

    0x00000000

    配置控制寄存器

    读/写

    0xE000ED14

    0x00000000

    系统处理器4-7 优先级寄存器

    读/写

    0xE000ED18

    0x00000000

    系统处理器8-11 优先级寄存器

    读/写

    0xE000ED1C

    0x00000000

    系统处理器12-15 优先级寄存器

    读/写

    0xE000ED20

    0x00000000

    系统处理器控制与状态寄存器

    读/写

    0xE000ED24

    0x00000000

    可配置故障状态寄存器

    读/写

    0xE000ED28

    0x00000000

    硬故障状态寄存器

    读/写

    0xE000ED2C

    0x00000000

    调试故障状态寄存器

    读/写

    0xE000ED30

    0x00000000

    存储器管理地址寄存器

    读/写

    0xE000ED34

    不可预测

    总线故障地址寄存器

    读/写

    0xE000ED38

    不可预测

    PFR0:处理器功能寄存器0

    只读

    0xE000ED40

    0x00000000

    PFR1:处理器功能寄存器1

    只读

    0xE000ED44

    0x00000000

    DFR0:调试功能寄存器0

    只读

    0xE000ED48

    0x00000000

    AFR0:辅助功能寄存器0

    只读

    0xE000ED4C

    0x00000000

    MMFR0:存储器模型功能寄存器0

    只读

    0xE000ED50

    0x00000000

    MMFR1:存储器模型功能寄存器1

    只读

    0xE000ED54

    0x00000000

    MMFR2:存储器模型功能寄存器2

    只读

    0xE000ED58

    0x00000000

    MMFR3:存储器模型功能寄存器3

    只读

    0xE000ED5C

    0x00000000

    ISAR0:ISA 功能寄存器0

    只读

    0xE000ED60

    0x01141110

    ISAR1:ISA 功能寄存器1

    只读

    0xE000ED64

    0x02111000

    ISAR2:ISA 功能寄存器2

    只读

    0xE000ED68

    0x21112231

    ISAR3:ISA 功能寄存器3

    只读

    0xE000ED6C

    0x01111110

    ISAR4:ISA 功能寄存器4

    只读

    0xE000ED70

    0x01310102

    软件触发中断寄存器

    只写

    0xE000EF00

    -

    外设识别寄存器(PERIPHID4)

    只读

    0xE000EFD0

    0x04

    外设识别寄存器(PERIPHID5)

    只读

    0xE000EFD4

    0x00

    外设识别寄存器(PERIPHID6)

    只读

    0xE000EFD8

    0x00

    外设识别寄存器(PERIPHID7)

    只读

    0xE000EFDC

    0x00

    外设识别寄存器位7:0(PERIPHID0)

    只读

    0xE000EFE0

    0x00

    外设识别寄存器位15:8(PERIPHID1)

    只读

    0xE000EFE4

    0xB0

    外设识别寄存器位23:16(PERIPHID2)

    只读

    0xE000EFE8

    0x0B

    外设识别寄存器位31:24(PERIPHID3)

    只读

    0xE000EFEC

    0x00

    元件识别寄存器位7:0(PCELLID0)

    只读

    0xE000EFF0

    0x0D

    元件识别寄存器位15:8(PCELLID1)

    只读

    0xE000EFF4

    0xE0

    元件识别寄存器位23:16(PCELLID2)

    只读

    0xE000EFF8

    0x05

    元件识别寄存器位31:24(PCELLID3)

    只读

    0xE000EFFC

    0xB1

    关于NVIC寄存器的具体定义,请参见Cortex-M3处理器参考手册。

    Cortex-M3处理器支持电平中断和脉冲中断。电平中断保持有效,直到访问器件的 ISR 将它清除。脉冲中断是边沿模型的一个变量。边沿不是异步的,相反,它必须在Cortex-M3 时钟HCLK的上升沿被采样。

    对于电平中断,如果中断程序返回前该信号没有失效,那么中断重新挂起和重新激活。这一点对于FIFO 和基于缓冲器的器件特别有用,因为它可以保证无需额外的工作,仅通过使用一个ISR 或重复调用就可将FIFO 和缓冲器清空。即器件将该信号保持有效,直至器件变空。

    脉冲中断在 ISR 过程中可以重新变有效,所以中断可以同时挂起和激活。应用设计必须确保只有在第一个脉冲激活后下一个脉冲才能到达。第二个挂起由于已经挂起所以没有什么用处。但是如果中断在一个或一个以上的周期内保持有效,那么NVIC 会锁存该挂起位。当ISR 激活时将挂起位清零。如果在激活的同时中断再次被确定,它可以再次锁存挂起位。脉冲中断大都使用在外部信号、速率或重复信号中。

  • 相关阅读:
    b站漫画部门测试面经
    b站测试面经
    面试7
    面试6
    UI自动化测试:App的Webview页面元素左滑删除
    UI自动化测试:TouchAction & TouchActions区别
    UI自动化测试:获取元素隐藏属性
    iOS自动化测试元素定位
    UI自动化测试:测试异步场景的临时处理
    UI自动化测试:异常标签页切换
  • 原文地址:https://www.cnblogs.com/ju-an/p/3214247.html
Copyright © 2011-2022 走看看