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

  • 相关阅读:
    【开发笔记】- Linux命令大全
    【面试突击】- SpringMVC那些事(一)
    【阿里云开发】- 搭建和卸载svn服务器
    【阿里云开发】- 安装tomcat
    SpringCloud之Eureka服务发现和注册(二)
    springcloud之环境工程模块(一)
    java多线程中篇(三) —— 线程的控制(创建,运行,阻塞,中断,结束)
    java多线程中篇(二) —— 线程的创建和Synchronized锁关键字
    java多线程中篇(一) —— Thread详情
    JUC之AbstractQueuedSynchronizer原理分析
  • 原文地址:https://www.cnblogs.com/hnrainll/p/1936060.html
Copyright © 2011-2022 走看看