外部中断和中断控制器Word文档格式.docx
- 文档编号:17019573
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:34
- 大小:72.48KB
外部中断和中断控制器Word文档格式.docx
《外部中断和中断控制器Word文档格式.docx》由会员分享,可在线阅读,更多相关《外部中断和中断控制器Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
0x0000_001C
~0x0000_002B
3
SVCall
通过SWI指令的系统服务调用
0x0000_002C
4
调试监控
调试监控器
0x0000_0030
0x0000_0034
5
PendSV
可挂起的系统服务
0x0000_0038
6
SysTick
系统嘀嗒定时器
0x0000_003C
7
WWDG
窗口定时器中断
0x0000_0040
1
8
PVD
联到EXTI的电源电压检测(PVD)中断
0x0000_0044
2
9
TAMPER
侵入检测中断
0x0000_0048
10
RTC
实时时钟(RTC)全局中断
0x0000_004C
11
FLASH
闪存全局中断
0x0000_0050
12
RCC
复位和时钟控制(RCC)中断
0x0000_0054
6
13
EXTI0
EXTI线0中断
0x0000_0058
14
EXTI1
EXTI线1中断
0x0000_005C
15
EXTI2
EXTI线2中断
0x0000_0060
16
EXTI3
EXTI线3中断
0x0000_0064
17
EXTI4
EXTI线4中断
0x0000_0068
18
DMA1通道1
DMA1通道1全局中断
0x0000_006C
19
DMA1通道2
DMA1通道2全局中断
0x0000_0070
20
DMA1通道3
DMA1通道3全局中断
0x0000_0074
21
DMA1通道4
DMA1通道4全局中断
0x0000_0078
22
DMA1通道5
DMA1通道5全局中断
0x0000_007C
23
DMA1通道6
DMA1通道6全局中断
0x0000_0080
24
DMA1通道7
DMA1通道7全局中断
0x0000_0084
25
ADC
ADC全局中断
0x0000_0088
26
USB_HP_CAN_TX
USB高优先级或CAN发送中断
0x0000_008C
27
USB_LP_CAN_RX0
USB低优先级或CAN接收0中断
0x0000_0090
28
CAN_RX1
CAN接收1中断
0x0000_0094
29
CAN_SCE
CANSCE中断
0x0000_0098
30
EXTI9_5
EXTI线[9:
5]中断
0x0000_009C
31
TIM1_BRK
TIM1断开中断
0x0000_00A0
32
TIM1_UP
TIM1更新中断
0x0000_00A4
33
TIM1_TRG_COM
TIM1触发和通信中断
0x0000_00A8
34
TIM1_CC
TIM1捕获比较中断
0x0000_00AC
35
TIM2
TIM2全局中断
0x0000_00B0
36
TIM3
TIM3全局中断
0x0000_00B4
37
TIM4
TIM4全局中断
0x0000_00B8
38
I2C1_EV
I2C1事件中断
0x0000_00BC
39
I2C1_ER
I2C1错误中断
0x0000_00C0
40
I2C2_EV
I2C2事件中断
0x0000_00C4
41
I2C2_ER
I2C2错误中断
0x0000_00C8
42
SPI1
SPI1全局中断
0x0000_00CC
43
SPI2
SPI2全局中断
0x0000_00D0
44
USART1
USART1全局中断
0x0000_00D4
45
USART2
USART2全局中断
0x0000_00D8
46
USART3
USART3全局中断
0x0000_00DC
47
EXTI15_10
EXTI线[15:
10]中断
0x0000_00E0
48
RTCAlarm
联到EXTI的RTC闹钟中断
0x0000_00E4
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
57
TIM5
TIM5全局中断
0x0000_0108
58
SPI3
SPI3全局中断
0x0000_010C
59
UART4
UART4全局中断
0x0000_0110
60
UART5
UART5全局中断
0x0000_0114
61
TIM6
TIM6全局中断
0x0000_0118
62
TIM7
TIM7全局中断
0x0000_011C
63
DMA2通道1
DMA2通道1全局中断
0x0000_0120
64
DMA2通道2
DMA2通道2全局中断
0x0000_0124
65
DMA2通道3
DMA2通道3全局中断
0x0000_0128
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
要注意的几点是:
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位
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 外部 中断 控制器
![提示](https://static.bdocx.com/images/bang_tan.gif)