STM32学习笔记(4) |
您所在的位置:网站首页 › 优先级和优先数的关系 › STM32学习笔记(4) |
目录一、NVIC中断优先级管理1. 中断简介2. 中断向量表3. 嵌套向量中断控制器(NVIC)4. NVIC的定义以及库函数二、外部中断EXTI1. EXTI功能框图(0)信号线(1)输入线(2)边沿检测电路(3)或门(4)与门(5)输出至NVIC(6)与门(7)脉冲发生器(8)产生事件2. EXTI的定义以及库函数三、一个简单的例程
一、NVIC中断优先级管理
1. 中断简介
在Cortex-M3(CM3)内核中,每个中断的优先级都是用寄存器中的8位来设置的,这样就有2^8 =256级中断,意味着可以支持256个中断,这其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但许多芯片厂商并没有使用CM3内核的全部东西,而是只用了它的一部分,而多余的部分应该是设计者考虑到后续应用发展而冗余设计的。 实际情况中,芯片厂商根据自己生产的芯片做出了调整。比如ST(意法半导体)公司的STM32F1xx和F4xx系列只使用了这个(寄存器NVIC->IPR,如图所示)8位中的高四位[7:4],低四位取零,这样2^4=16,只能表示16级中断嵌套。 STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。我们使用的是STM32F103系列,只有60个可屏蔽中断,而在107系列有68个。 2. 中断向量表中断向量表为每个外设作了硬件编号,可以把它理解为默认顺序。如果有两个外设工作顺序发生冲突(一般在NVIC设置好后就很少发生这种情况)时,就按照这个表来分执行先后。 STM32的中断向量表如下(可对照STM32中文参考手册9.1.2节中断和异常向量中的表):
其中灰色的部分(图片未显示)为异常向量,其余白色部分为中断向量。 在头文件stm32f10x.h的163行开始中定义了各中断向量的顺序编号,现摘录该定义(IRQ = Interrupt Request): /****** Cortex-M3 Processor Exceptions Numbers 内核处理器异常编号(用户一般不使用,说白就是不用管) ***************************************************/ NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ ······ /****** STM32 specific Interrupt Numbers STM32特定中断号 *********************************************************/ WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ TAMPER_IRQn = 2, /*!< Tamper Interrupt */ ······ //省略号表示下面还有很多很多,而且使用的是条件编译,因为不同型号对应不同中断号。在头文件core_cm3.h中可以看到配置与中断相关的寄存器。实际上ST芯片用不到这么大的寄存器,因此我们在网上借鉴了一段代码,反映了ST芯片真实使用到的寄存器大小。其余未使用到的空间均为保留。 /* cortex-m3内核分组方式(8组)结构体表达方式: */ typedef struct { __IO uint32_t ISER[8]; //中断使能设置寄存器,作用:用来使能中断 //32位寄存器,每个位控制一个中断的使能。STM32F10x只有60个可屏蔽中断,所以只使用了其中的ISER[0]和ISER[1]。 //ISER[0]的bit0~bit31分别对应中断0~31。ISER[1]的bit0~27对应中断32~59; /*!< 偏移量: 0x000 Interrupt Set Enable Register */ uint32_t RESERVED0[24]; //这些保留的不用看,也不要使用 __IO uint32_t ICER[8]; //中断清除使能寄存器,作用:用来失能中断 //32位寄存器,每个位控制一个中断的失能。STM32F10x只有60个可屏蔽中断,所以只使用了其中的ICER[0]和ICER[1]。 //ICER[0]的bit0~bit31分别对应中断0~31。ICER[1]的bit0~27对应中断32~59,下面都差不多 /*! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |