打印
[应用相关]

STM32中断使用要点

[复制链接]
786|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
powerful1|  楼主 | 2015-2-8 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、NVIC的优先级概念
   占先式优先级 (pre-emption priority):
   高占先式优先级的中断事件会打断当前的主程序/中断程序运行— —抢断式优先响应,俗称中断嵌套。

   副优先级(subpriority):
   在占先式优先级相同的情况下,高副优先级的中断优先被响应;
   在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才 能得到响应——非抢断式响应(不能嵌套)。

沙发
powerful1|  楼主 | 2015-2-8 14:39 | 只看该作者
2、判断中断是否会被响应的依据
    首先是占先式优先级,其次是副优先级;
    占先式优先级决定是否会有中断嵌套;
    Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。

使用特权

评论回复
板凳
powerful1|  楼主 | 2015-2-8 14:39 | 只看该作者
3、STM32中用到的Cortex-M3寄存器说明
   在STM32中用到了Cortex-M3定义的三组寄存器,有关这三组寄存器的说明不在STM32的技术手册中,需要参考ARM公司发布的Cortex-M3 Technical Reference Manual (r2p0)。
   在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下:

使用特权

评论回复
地板
powerful1|  楼主 | 2015-2-8 14:40 | 只看该作者
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

使用特权

评论回复
5
powerful1|  楼主 | 2015-2-8 14:40 | 只看该作者
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

使用特权

评论回复
6
powerful1|  楼主 | 2015-2-8 14:41 | 只看该作者
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

使用特权

评论回复
7
mmuuss586| | 2015-2-8 18:11 | 只看该作者

不错,学习下;

使用特权

评论回复
8
右岸| | 2015-2-8 18:45 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

430

帖子

4

粉丝