zoukankan      html  css  js  c++  java
  • STM32 中断学习Interrupt/Evens

    1、NVIC的优先级概念
       占先式优先级 (pre-emption priority):
       高占先式优先级的中断事件会打断当前的主程序/中断程序运行— —抢断式优先响应,俗称中断嵌套。
       副优先级(subpriority):
       在占先式优先级相同的情况下,高副优先级的中断优先被响应;
       在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才 能得到响应——非抢断式响应(不能嵌套)。
    2、判断中断是否会被响应的依据
        首先是占先式优先级,其次是副优先级;
        占先式优先级决定是否会有中断嵌套;
        Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。
    3、STM32中用到的Cortex-M3寄存器说明
       在STM32中用到了Cortex-M3定义的三组寄存器,有关这三组寄存器的说明不在STM32的技术手册中,需要参考ARM公司发布的Cortex-M3 Technical Reference Manual (r2p0)。
       在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下:
       1)、NVIC寄存器组
           STM32的固件库中有如下定义:
           typedef struct
           {
             vu32 ISER[2];
             u32 RESERVED0[30];
             vu32 ICER[2];
             u32 RSERVED1[30];
             vu32 ISPR[2];
             u32 RESERVED2[30];
             vu32 ICPR[2];
             u32 RESERVED3[30];
             vu32 IABR[2];
             u32 RESERVED4[62];
             vu32 IPR[11];
           } NVIC_TypeDef;
           它们对应ARM手册中的名称为
           ISER = Interrupt Set-Enable Registers
           ICER = Interrupt Clear-Enable Registers
           ISPR = Interrupt Set-Pending Register
           ICPR = Interrupt Clear-Pending Register
           IABR = Active Bit Register
           IPR = Interrupt Priority Registers
           每个寄存器有240位,以Interrupt Set-Enable Registers说明,ISER[0]对应中断源0~31,ISER[1]对应中断源32~63,STM32只有60个中断源,所以没有ISER[2:7]。
           参考STM32技术参考手册中的中断向量表,中断源的位置为:
           位置0 - WWDG = Window Watchdog interrupt
           位置1 - PVD = PVD through EXTI Line detection interrupt
           位置2 - TAMPER = Tamper interrupt
           ......
           位置58 - DMA2_Channel3 = DMA2 Channel3 global interrupt
           位置59 - DMA2_Channel4_5 = DMA2 Channel4 and DMA2 Channel5 global interrupts
       2)、系统控制寄存器组
           STM32的固件库中有如下定义:
           typedef struct
           {
             vuc32 CPUID;
             vu32 ICSR;
             vu32 VTOR;
             vu32 AIRCR;
             vu32 SCR;
             vu32 CCR;
             vu32 SHPR[3];
             vu32 SHCSR;
             vu32 CFSR;
             vu32 HFSR;
             vu32 DFSR;
             vu32 MMFAR;
             vu32 BFAR;
             vu32 AFSR;
           } SCB_TypeDef; /* System Control Block Structure */
           它们对应ARM手册中的名称为
           CPUID = CPUID Base Register
           ICSR = Interrupt Control State Register
           VTOR = Vector Table Offset Register
           AIRCR = Application Interrupt/Reset Control Register
           SCR = System Control Register
           CCR = Configuration Control Register
           SHPR = System Handlers Priority Register
           SHCSR = System Handler Control and State Register
           CFSR = Configurable Fault Status Registers
           HFSR = Hard Fault Status Register
           DFSR = Debug Fault Status Register
           MMFAR = Mem Manage Address Register
           BFAR = Bus Fault Address Register
           AFSR = Auxiliary Fault Status Register
       3)、系统时钟寄存器组
           STM32的固件库中有如下定义:
           typedef struct
           {
             vu32 CTRL;
             vu32 LOAD;
             vu32 VAL;
             vuc32 CALIB;
           } SysTick_TypeDef;
           它们对应ARM手册中的名称为
           CTRL = SysTick Control and Status Register
           LOAD = SysTick Reload Value Register
           VAL = SysTick Current Value Register
           CALIB = SysTick Calibration Value Register

  • 相关阅读:
    LeetCode 485. Max Consecutive Ones
    LeetCode 367. Valid Perfect Square
    LeetCode 375. Guess Number Higher or Lower II
    LeetCode 374. Guess Number Higher or Lower
    LeetCode Word Pattern II
    LeetCode Arranging Coins
    LeetCode 422. Valid Word Square
    Session 共享
    java NIO
    非阻塞IO
  • 原文地址:https://www.cnblogs.com/hnrainll/p/1936060.html
Copyright © 2011-2022 走看看