外部中断和中断控制器.docx
- 文档编号:30485944
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:39
- 大小:71.56KB
外部中断和中断控制器.docx
《外部中断和中断控制器.docx》由会员分享,可在线阅读,更多相关《外部中断和中断控制器.docx(39页珍藏版)》请在冰豆网上搜索。
外部中断和中断控制器
第六章:
外部中断和中断控制器
向量中断控制器,简称NVIC,是Cortex‐M3不可分离的一部分,它与Cortex-M3内核的逻辑紧密耦合,有一部分甚至水乳交融在一起。
NVIC与Cortex-M3内核,相辅相成,里应外合,共同完成对中断的响应。
NVIC的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外,NVIC还包含了MPU的控制寄存器、SysTick定时器以及调试控制。
6.1嵌套向量中断控制器
6.1.1概述
嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和有效处理地处理晚到的中断。
嵌套向量中断控制器管理着包括核异常等中断。
有下述特点:
1.60个可屏蔽中断通道(不包含16个Cortex™-M3的中断线);
2.16个可编程的优先等级(使用了4位中断优先级);
3.低延迟的异常和中断处理;
4.电源管理控制;
5.系统控制寄存器的实现;
6.1.2中断和异常向量
表6-1-1STM32F10xxx产品的向量表
位置
优先级
优先级
类型
名称
说明
地址
-
-
-
保留
0x0000_0000
-3
固定
Reset
复位
0x0000_0004
-2
固定
NMI
不可屏蔽中断
RCC时钟安全系统(CSS)联接到NMI向量
0x0000_0008
-1
固定
硬件失效
所有类型的失效
0x0000_000C
0
可设置
存储管理
存储器管理
0x0000_0010
1
可设置
总线错误
预取指失败,存储器访问失败
0x0000_0014
2
可设置
错误应用
未定义的指令或非法状态
0x0000_0018
--
-
-
保留
0x0000_001C
~0x0000_002B
3
可设置
SVCall
通过SWI指令的系统服务调用
0x0000_002C
4
可设置
调试监控
调试监控器
0x0000_0030
--
-
-
保留
0x0000_0034
5
可设置
PendSV
可挂起的系统服务
0x0000_0038
6
可设置
SysTick
系统嘀嗒定时器
0x0000_003C
0
7
可设置
WWDG
窗口定时器中断
0x0000_0040
1
8
可设置
PVD
联到EXTI的电源电压检测(PVD)中断
0x0000_0044
2
9
可设置
TAMPER
侵入检测中断
0x0000_0048
3
10
可设置
RTC
实时时钟(RTC)全局中断
0x0000_004C
4
11
可设置
FLASH
闪存全局中断
0x0000_0050
5
12
可设置
RCC
复位和时钟控制(RCC)中断
0x0000_0054
6
13
可设置
EXTI0
EXTI线0中断
0x0000_0058
7
14
可设置
EXTI1
EXTI线1中断
0x0000_005C
8
15
可设置
EXTI2
EXTI线2中断
0x0000_0060
9
16
可设置
EXTI3
EXTI线3中断
0x0000_0064
10
17
可设置
EXTI4
EXTI线4中断
0x0000_0068
11
18
可设置
DMA1通道1
DMA1通道1全局中断
0x0000_006C
12
19
可设置
DMA1通道2
DMA1通道2全局中断
0x0000_0070
13
20
可设置
DMA1通道3
DMA1通道3全局中断
0x0000_0074
14
21
可设置
DMA1通道4
DMA1通道4全局中断
0x0000_0078
15
22
可设置
DMA1通道5
DMA1通道5全局中断
0x0000_007C
16
23
可设置
DMA1通道6
DMA1通道6全局中断
0x0000_0080
17
24
可设置
DMA1通道7
DMA1通道7全局中断
0x0000_0084
18
25
可设置
ADC
ADC全局中断
0x0000_0088
19
26
可设置
USB_HP_CAN_TX
USB高优先级或CAN发送中断
0x0000_008C
20
27
可设置
USB_LP_CAN_RX0
USB低优先级或CAN接收0中断
0x0000_0090
21
28
可设置
CAN_RX1
CAN接收1中断
0x0000_0094
22
29
可设置
CAN_SCE
CANSCE中断
0x0000_0098
23
30
可设置
EXTI9_5
EXTI线[9:
5]中断
0x0000_009C
24
31
可设置
TIM1_BRK
TIM1断开中断
0x0000_00A0
25
32
可设置
TIM1_UP
TIM1更新中断
0x0000_00A4
26
33
可设置
TIM1_TRG_COM
TIM1触发和通信中断
0x0000_00A8
27
34
可设置
TIM1_CC
TIM1捕获比较中断
0x0000_00AC
28
35
可设置
TIM2
TIM2全局中断
0x0000_00B0
29
36
可设置
TIM3
TIM3全局中断
0x0000_00B4
30
37
可设置
TIM4
TIM4全局中断
0x0000_00B8
31
38
可设置
I2C1_EV
I2C1事件中断
0x0000_00BC
32
39
可设置
I2C1_ER
I2C1错误中断
0x0000_00C0
33
40
可设置
I2C2_EV
I2C2事件中断
0x0000_00C4
34
41
可设置
I2C2_ER
I2C2错误中断
0x0000_00C8
35
42
可设置
SPI1
SPI1全局中断
0x0000_00CC
36
43
可设置
SPI2
SPI2全局中断
0x0000_00D0
37
44
可设置
USART1
USART1全局中断
0x0000_00D4
38
45
可设置
USART2
USART2全局中断
0x0000_00D8
39
46
可设置
USART3
USART3全局中断
0x0000_00DC
40
47
可设置
EXTI15_10
EXTI线[15:
10]中断
0x0000_00E0
41
48
可设置
RTCAlarm
联到EXTI的RTC闹钟中断
0x0000_00E4
42
49
可设置
USB唤醒
联到EXTI的从USB待机唤醒中断
0x0000_00E8
43
50
可设置
TIM8_BRK
TIM8断开中断
0x0000_00EC
44
51
可设置
TIM8_UP
TIM8更新中断
0x0000_00F0
45
52
可设置
TIM8_TRG_COM
TIM8触发和通信中断
0x0000_00F4
46
53
可设置
TIM8_CC
TIM8捕获比较中断
0x0000_00F8
47
54
可设置
ADC3
ADC3全局中断
0x0000_00FC
48
55
可设置
FSMC
FSMC全局中断
0x0000_0100
49
56
可设置
SDIO
SDIO全局中断
0x0000_0104
50
57
可设置
TIM5
TIM5全局中断
0x0000_0108
51
58
可设置
SPI3
SPI3全局中断
0x0000_010C
52
59
可设置
UART4
UART4全局中断
0x0000_0110
53
60
可设置
UART5
UART5全局中断
0x0000_0114
54
61
可设置
TIM6
TIM6全局中断
0x0000_0118
55
62
可设置
TIM7
TIM7全局中断
0x0000_011C
56
63
可设置
DMA2通道1
DMA2通道1全局中断
0x0000_0120
57
64
可设置
DMA2通道2
DMA2通道2全局中断
0x0000_0124
58
65
可设置
DMA2通道3
DMA2通道3全局中断
0x0000_0128
59
66
可设置
DMA2通道4_5
DMA2通道4和DMA2通道5全局中断
0x0000_012C
6.1.3中断优先级介绍
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。
具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。
如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:
所有8位用于指定响应优先级
最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
最高7位用于指定抢占式优先级,最低1位用于指定响应优先级
这就是优先级分组的概念。
Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:
第0组:
所有4位用于指定响应优先级
第1组:
最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:
最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:
最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:
所有4位用于指定抢占式优先级
可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:
NVIC_PriorityGroup_0=>选择第0组
NVIC_PriorityGroup_1=>选择第1组
NVIC_PriorityGroup_2=>选择第2组
NVIC_PriorityGroup_3=>选择第3组
NVIC_PriorityGroup_4=>选择第4组
接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:
//选择使用优先级分组第1组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//使能EXTI0中断
NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//指定抢占式优先级别1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//指定响应优先级别0
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
//使能EXTI9_5中断
NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//指定抢占式优先级别0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//指定响应优先级别1
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
要注意的几点是:
1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;
2)抢占式优先级别相同的中断源之间没有嵌套关系;
3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。
6.2外部中断/事件控制器(EXTI)
外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。
每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。
每个输入线都可以被独立的屏蔽。
挂起寄存器保持着状态线的中断要求。
6.2.1特征
EXTI控制器的主要特性如下:
1.每个中断/事件都有独立的触发和屏蔽
2.每个中断线都有专用的状态位
3.支持多达19个中断/事件请求
检测脉冲宽度低于APB2时种宽度的外部信号。
参见数据手册中电气特性部分的相关参数。
6.2.2唤醒事件管理
STM32F10xxx可以处理外部或内部事件来唤醒内核(WFE)。
唤醒事件可以通过下述配置产生:
1.在外设的控制寄存器使能一个中断,但不在NVIC中使能,同时在Cortex-M3的系统控制寄存器中使能SEVONPEND位。
当MCU从WFE恢复后,需要清除相应外设的中断挂起位和外设NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)。
2.配置一个外部或内部EXTI线为事件模式,当MCU从WFE恢复后,因为对应事件线的挂起位没有被置位,不必清除相应外设的中断挂起位或NVIC中断通道挂起位。
使用外部I/O端口作为唤醒事件,请参见6.2.3节的功能说明
6.2.3功能说明
如果要产生中断,必须事先配置好并使能中断线。
根据所需的边沿检测条件,设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写’1’允许中断请求。
当外部中断线上发生了需要的边沿时,将产生一个中断请求,对应的挂起位也随之被置’1’。
在挂起寄存器的对应位写’1’,可以清除该中断请求。
如果要为产生事件,必须事先配置好并使能事件线。
根据所需的边沿检测条件,通过设置2个触发寄存器,同时在事件屏蔽寄存器的相应位写’1’允许事件请求。
当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不被置’1’。
通过在软件中断/事件寄存器写’1’,也可以通过软件产生中断/事件请求。
6.2.3.1硬件中断选择
通过下面的过程来配置19个线路做为中断源:
1.配置19个中断线的屏蔽位(EXTI_IMR)
2.配置所选中断线的触发选择位(EXTI_RTSR和EXTI_FTSR);
3.配置那些控制映像到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位,使得19个中断线中的请求可以被正确地响应。
6.2.3.2硬件事件选择
通过下面的过程,可以配置19个线路为事件源
1.配置19个事件线的屏蔽位(EXTI_EMR)。
2.配置事件线的触发选择位(EXTI_RTSR和EXTI_FTSR)。
6.2.3.3软件中断/事件的选择
19个线路可以被配置成软件中断/事件线。
下面是产生软件中断的过程:
1.配置19个中断/事件线屏蔽位(EXTI_IMR,EXTI_EMR)。
2.设置软件中断寄存器的请求位(EXTI_SWIER。
6.2.4外部中断/事件线路映像
112通用I/O端口以图6-2-1的方式连接到16个外部中断/事件线上:
图6-2-1外部中断I/O映像
另外三种其他的外部中断/事件控制器的连接如下:
1.EXTI线16连接到PVD输出
2.EXTI线17连接到RTC闹钟事件
3.EXTI线18连接到USB唤醒事件
6.3NVIC库函数介绍
NVIC驱动有多种用途:
例如使能或者失能IRQ中断,使能或者失能单独的IRQ通道,改变IRQ通道的优先级等等。
6.3.1函数NVIC_DeInit
表6-3-1.描述了函数NVIC_DeInit
表6-3-1.NVIC_DeInit
函数名
NVIC_DeInit
函数原形
voidNVIC_DeInit(void)
功能描述
将外设NVIC寄存器重设为缺省值
输入参数1
无
输出参数
无
返回值
无
先决条件
无
被调用函数
无
例:
复位NVIC寄存器的值
NVIC_DeInit();
6.3.2函数NVIC_PriorityGroupConfig
表6-3-2描述了函数NVIC_PriorityGroupConfig
表6-3-2NVIC_PriorityGroupConfig
函数名
NVIC_PriorityGroupConfig
函数原形
voidNVIC_PriorityGroupConfig(u32NVIC_PriorityGroup)
功能描述
设置优先级分组:
先占优先级和从优先级
输入参数
NVIC_PriorityGroup:
优先级分组位长度
输出参数
无
返回值
无
先决条件
优先级分组只能设置一次
被调用函数
无
NVIC_PriorityGroup
该参数设置优先级分组位长度(见表6-3-3.)
表6-3-3NVIC_PriorityGroup值
NVIC_PriorityGroup
描述
NVIC_PriorityGroup_0
先占优先级0位从优先级4位
NVIC_PriorityGroup_1
先占优先级1位从优先级3位
NVIC_PriorityGroup_2
先占优先级2位从优先级2位
NVIC_PriorityGroup_3
先占优先级3位从优先级1位
NVIC_PriorityGroup_4
先占优先级4位从优先级0位
例:
定义先占优先级1位,从优先级3位
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
6.3.3函数NVIC_Init
表6-3-4描述了函数NVIC_Init
表6-3-4NVIC_Init
函数名
NVIC_Init
函数原形
voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)
功能描述
根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
输入参数
NVIC_InitStruct:
指向结构NVIC_InitTypeDef的指针,包含了外设GPIO的配置信息
输出参数
无
返回值
RCC_FLAG的新状态(SET或者RESET
先决条件
无
被调用函数
无
NVIC_InitTypeDefstructure结构体
typedefstruct
{
u8NVIC_IRQChannel;
u8NVIC_IRQChannelPreemptionPriority;
u8NVIC_IRQChannelSubPriority;
FunctionalStateNVIC_IRQChannelCmd;
}NVIC_InitTypeDef;
NVIC_IRQChannel:
该参数用以使能或者失能指定的IRQ通道。
表6-3-5给出了该参数可取的值
表6-3-5NVIC_IRQChannel值
NVIC_IRQChannel
描述
WWDG_IRQChannel
窗口看门狗中断
PVD_IRQChannel
PVD通过EXTI探测中断
TAMPER_IRQChannel
篡改中断
RTC_IRQChannel
RTC全局中断
FlashItf_IRQChannel
FLASH全局中断
RCC_IRQChannel
RCC全局中断
EXTI0_IRQChannel
外部中断线0中断
EXTI1_IRQChannel
外部中断线1中断
EXTI2_IRQChannel
外部中断线2中断
EXTI3_IRQChannel
外部中断线3中断
EXTI4_IRQChannel
外部中断线4中断
DMAChannel1_IRQChannel
DMA通道1中断
DMAChannel2_IRQChannel
DMA通道2中断
DMAChannel3_IRQChannel
DMA通道3中断
DMAChannel4_IRQChannel
DMA通道4中断
DMAChannel5_IRQChannel
DMA通道5中断
DMAChannel6_IRQChannel
DMA通道6中断
DMAChannel7_IRQChannel
DMA通道7中断
ADC_IRQChannel
ADC全局中断
USB_HP_CANTX_IRQChannel
USB高优先级或者CAN发送中断
USB_LP_CAN_RX0_IRQChannel
USB低优先级或者CAN接收0中断
CAN_RX1_IRQChannel
CAN接收1中断
CAN_SCE_IRQChan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 外部 中断 控制器