嵌入式系统原理与应用 课件 第9章中断_第1页
嵌入式系统原理与应用 课件 第9章中断_第2页
嵌入式系统原理与应用 课件 第9章中断_第3页
嵌入式系统原理与应用 课件 第9章中断_第4页
嵌入式系统原理与应用 课件 第9章中断_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统原理与应用西安邮电大学计算机学院王忠民本章主要内容包括中断的基本概念、STM32F103中断系统和EXTI,以及外部中断应用实例等。首先介绍中断的基本概念;其次介绍STM32F103中NVIC的功能、中断优先级、中断向量表、NVIC主要寄存器;接下来介绍STM32F103外部中断/事件控制器EXTI的内部结构、主要特性、工作原理及内部寄存器的功能。最后以按键模拟外部中断为例,介绍STM32F103微控制器外部中断应用基于库函数调用的开发方式。通过本章学习,掌握STM32微控制器NVIC和EXTI的主要功能及基本用法,掌握外部中断应用的开发过程,所要用到的库函数等,初步形成裸机版嵌入式应用系统中断机制实现的整体思路。第9章STM32F103中断及应用本章学习目的理解中断的相关概念,理解NVIC的主要功能和基本用法,掌握基于库函数调用的开发过程;了解STM32F103中EXTI的内部结构、主要特性、工作原理,以及内部寄存器的功能和用法;结合本章实例,熟练掌握裸机版嵌入式应用系统中断机制实现的整体流程,以及相关工具软件的使用方法和程序仿真、调试方法,能独立完成包含中断应用的嵌入式系统设计与开发。第8章STM32F103定时器原理及应用---学习目的9.1中断概述

9.2STM32F103中断系统9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级 9.2.3STM32F103中断向量表9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容第9章STM32F103中断及应用---中断概述中断是一种常见的、外设主动请求与CPU进行通信的方式,CPU不需要浪费时间等待或查询外设状态,大大提高了工作效率,且能快速响应、及时处理异步事件。第9章STM32F103中断及应用---中断概述中断处理的一般过程:中断请求中断响应:应答;获取中断类型号,查找中断服务程序入口地址断点保护:中断返回地址入栈(硬件自动完成)中断处理中断返回中断优先级与中断嵌套ARMCortex-M3采用可嵌套的向量中断控制器(NVIC)来实现其中断机制,能够以最小的中断延迟提供灵活的中断管理功能,具备非常高效的中断处理能力。9.1中断概述

9.2STM32F103中断系统9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级 9.2.3STM32F103中断向量表9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容STM32F103具有丰富的外部设备和外设接口,支持功能强大的NVIC对GPIO、USART、SPI、I2C等多种中断源进行管理。开发人员可以通过NIVC的相关寄存器和位操作灵活、有效地实现中断状态查询、开启或关闭特定中断、优先级分组与中断嵌套、编写自定义中断服务例程等功能,从而实现复杂的嵌入式应用。STM32F103共支持60个可屏蔽中断通道(不包含16个Cortex™-M3中断线)、16个可编程的优先等级(使用了4位中断优先级),支持低延迟的异常和中断处理。除了个别中断的优先级被定死外,其他中断的优先级都是可编程的。每个中断源都有一个唯一的中断类型号IRQn。第9章STM32F103中断及应用---STM32F103中断系统类型编号中断名称优先级简介内部中断(系统异常)0N/AN/A系统堆栈指针1Reset-3(最高)复位2NMI-2不可屏蔽中断来自外部NMI输入引脚3HardFault-1硬件故障:总线故障、存储器管理故障以及应用故障的服务例程无法执行,就会触发硬件故障。另外,在读取中断向量时产生的总线fault也按硬fault处理。4MemoryManagementFault可编程设置存储器管理故障:访问存储保护单元MPU定义的不合法的内存区域,例如向只读区域写入数据5BusFault可编程设置总线故障:在读取指令、读写数据、读取中断向量、中断响应保存寄存器和中断返回恢复寄存器等情况下,检测到存储器访问错误使用错误6UsageFault可编程设置应用故障:使用未定义的指令或进行非法的状态转换。检测到除0操作或未对齐的内存访问7~10ReservedN/A保留11SVCall可编程设置使用SVC指令调用系统服务12DebugMonitor可编程设置可编程调试监控器断点、数据观察点或是外部调试请求13ReservedN/A保留14PendSV可编程设置可挂起的系统服务请求通常为系统设备而设,只能由软件来实现15SYSTICK可编程设置系统定时器Cortex-M3处理器的嵌套向量中断控制器NVICNMIIRQs片内外设看门狗等关键片内外设外部设备1外部设备n片内异常片外外设中断片内外设中断Cortex-M3的中断类型管理中断优先级:NVIC允许配置不同中断源的抢占优先级和子优先级,以确定中断的相对重要性和执行顺序。控制中断状态:NVIC提供位操作来开启或关闭特定中断,以决定是否允许中断请求。支持中断嵌套:NVIC支持中断嵌套,允许处理器在处理一个中断时,响应更高优先级的中断,以应对紧急情况。确保可靠中断处理:NVIC确保了中断向量表的正确性,以便中断请求能够准确地找到对应的中断处理程序入口。STM32F103微控制器内部NVIC的主要功能9.1中断概述

9.2STM32F103中断系统

9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级

9.2.3STM32F103中断向量表9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容STM32F103中断优先级的定义和设置遵循Cortex-M3的规范。中断优先级通常由以下两部分组成:抢占优先级(PreemptionPriority,也称主优先级)和响应优先级(Subpriority,子优先级)。中断优先级的定义和设置如下:抢占优先级(PreemptionPriority)抢占优先级决定了中断源的相对重要性,具有更高抢占优先级的中断能够打断正在执行的具有较低抢占优先级的中断。编号越小,表明它的优先级别越高。响应优先级(Subpriority)响应优先级用于区分拥有相同抢占优先级的中断。它允许在同一抢占优先级下进一步细化中断的执行顺序。如果抢占优先级相同的两个中断同时达到,则优先处理响应优先级高的中断。STM32F103的中断优先级CM3的优先级定义CM3的优先级定义无CortexM3核理论上有256个中断源在进行优先级管理时,CM3提供最多

128个不同的中断优先级排序,IPR的d0位没有用

(有效位只有7位)意法半导体在设计STM32F103R6微控制器时,仅实现IPR的高4位(IPR[7:4]),仅支持16个不同的中断优先级排序

(优先级数值0-15)。无Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源优先级,因此STM32把指定中断优先级的寄存器位减少到4位,该分组的设置是由SCB->AIRCR寄存器的bit10~8来定义的。STM32F103的中断优先级组号抢占优先级响应优先级位数优先级数位数优先级数000416112382242433812441600STM32F103中断的响应顺序:先比较抢占优先级,抢占优先级高的中断优先响应当抢占优先级相同时,比较响应优先级,响应优先级高的中断优先响应当抢占优先级和响应优先级都相同时,比较它们在中断向量表中的位置,位置低(更靠前)的中断优先响应STM32F103的中断优先级9.1中断概述

9.2STM32F103中断系统

9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级 9.2.3STM32F103中断向量表9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容Cortex-M3中断系统理论上最多可以对256个中断源进行管理,其中16个内部中断源,240个外部中断源,如右表所示。每个中断源产生中断时,都需要执行一个对应的中断服务程序来实现对中断的响应。Cortex-M3把这256个中断源的中断服务程序入口地址放到中断向量表中,由于每个服务程序的入口地址为32位,在向量表中占用四个单元,Cortex-M3中断向量表占用了地址底端0x00000000-0x000003FF共1024个单元。Cortex-M3的中断向量表复位时中断向量表被默认地放在了地址空间最低端0x00000000-0x000003FF的1024个单元。为了支持动态重新分配中断,Cortex-M3允许中断向量表重定位,即从其它地址处开始定位异常向量表。为了实现上述功能,NVIC中有一个寄存器VTOR(VectorTableOffsetRegister,向量表偏移量寄存器,地址0xE000ED08),通过修改它的值就能重定位向量表。复位时,该寄存器的值为0。Cortex-M3的中断向量表9.1中断概述

9.2STM32F103中断系统

9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级 9.2.3STM32F103中断向量表

9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容STM32F103中NVIC的主要寄存器寄存器寄存器名称位和功能说明ISER0、ISER1中断配置使能寄存器ISER0[31:0]:置1可使能中断向量表中位置编号为0~31的32个中断源;ISER1[31:0]:置1可使能中断向量表中位置编号为32~59的32个中断源;写1有效,写0无效ICER0、ICER1中断清除使能寄存器功能和ICER相反,且每一位与ICER中的位一一对应写1有效,写0无效ISPR0、ISPR1中断挂起寄存器ISPR0[31:0]:置1可挂起中断向量表中位置编号为0~31的32个中断源;ISPR1[31:0]:置1可挂起中断向量表中位置编号为32~59的32个中断源;写1有效,写0无效ICPR0、ICPR1中断挂起清除寄存器功能和ISPR相反,且每一位与ISPR中的位一一对应写1有效,写0无效IABR0、IABR1中断激活标志寄存器中断正在执行标志位只读;执行中断时硬件置1,中断执行完毕硬件置0IP0~14中断优先级控制寄存器[31:28]:为向量表中的中断分配优先级(IPx+3)[23:20]:为向量表中的中断分配优先级(IPx+2)[15:12]:为向量表中的中断分配优先级(IPx+1)[7:4]:为向量表中的中断分配优先级(IPx+0)编号从0~14共15个寄存器,为60个中断源分配优先级配置NVIC的基本步骤选择优先级分组在库文件misc.c中voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)NVIC_PriorityGroup_0=>选择第0组,所有4位均用于指定响应优先级NVIC_PriorityGroup_1=>选择第1组,最高1位

抢占优先级,最低3位

响应优先级NVIC_PriorityGroup_2=>选择第2组,最高2位

抢占优先级,最低2位

响应优先级NVIC_PriorityGroup_3=>选择第3组,最高3位

抢占优先级,最低1位

响应优先级NVIC_PriorityGroup_4=>选择第4组,所有4位均用于指定抢占优先级选择中断源,配置抢占优先级和响应优先级,使能中断。例如:NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);编写中断服务函数misc.h文件中关于NVIC库函数的声明9.1中断概述

9.2STM32F103中断系统9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级 9.2.3STM32F103中断向量表9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容EXTI内部结构与主要特性STM32F103有19个能产生事件/中断请求的边沿检测器。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。EXTI控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达20个软件的中断/事件请求检测脉冲宽度低于APB2时钟宽度的外部信号外部信号输入电平边沿检测电路与相关寄存器最终输送到NVIC中断控制器可用于触发定时器或转换ADC等事件EXTI线16:连接到PVD输出---电源电压检测,这是电源管理的关键功能EXTI线17:连接到RTC闹钟事件,RTC闹钟到达指定时间时触发(精准定时任务)场景:每日凌晨3:00启动数据采集每小时触发一次系统自检EXTI线18:连接到USB唤醒事件,USB设备从挂起模式唤醒时触发(低功耗USB设计)场景:USB键盘按下任意键唤醒睡眠中的设备USB主机发送数据时唤醒从机9.1中断概述

9.2STM32F103中断系统9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级 9.2.3STM32F103中断向量表9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容EXTI工作原理外部中断/事件请求的产生和传输过程:外部信号从STM32F103微控制器的引脚输入;经过边沿检测电路:根据用户对相关寄存器的配置(上升沿、下降沿、双边沿),在检测到有效的边沿信号时产生中断/事件;和软件中断事件寄存器一起进入或门:经请求挂起寄存器后和中断屏蔽寄存器一起进入与门,最后送至NVIC和事件屏蔽寄存器一起进入脉冲发生器:脉冲发生器把一个跳变的信号转变为一个单脉冲,输出到STM32F103微控制器的其他功能模块EXTI工作原理外部中断与事件:由外部中断与事件请求信号的产生和传输过程可知:从外部激励信号来看,中断和事件的请求信号没有区别;一路信号(中断)被送至NVIC向CPU产生中断请求,由对应的中断服务程序决定CPU将如何响应;一路信号(事件)会向其他功能模块(如定时器、USART、DMA、ADC等)发送脉冲触发信号,由对应的功能模块来决定如何响应这个脉冲触发信号。9.1中断概述

9.2STM32F103中断系统9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级 9.2.3STM32F103中断向量表9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容名称位宽描述访问复位值端口偏移地址EXTI_IMR32中断屏蔽寄存器读写0x000000000x00EXTI_EMR32事件屏蔽寄存器读写0x000000000x04EXTI_RTSR32上升沿触发选择寄存器读写0x000000000x08EXTI_FTSR32下降沿触发选择寄存器读写0x000000000x0cEXTI_SWIER32软件中断事件寄存器(通过软件置位EXTI线,模拟硬件中断信号,实现测试目的)读写0x000000000x10EXTI_PR32挂起寄存器读写0xxxxxxxxx0x14EXTI的主要内部寄存器中断屏蔽寄存器EXTI_IMR事件屏蔽寄存器EXTI_EMR上升沿触发选择寄存器EXTI_RTSR下降沿触发选择寄存器EXTI_FTSR软件中断事件寄存器EXTI_SWIER挂起寄存器EXTI_PR9.1中断概述

9.2STM32F103中断系统9.2.1可嵌套的向量中断控制器NVIC

9.2.2STM32F103中断优先级 9.2.3STM32F103中断向量表9.2.4NVIC的主要寄存器 9.3STM32F103外部中断/事件控制器EXTI

9.3.1EXTI内部结构与主要特性9.3.2EXTI工作原理9.3.4EXTI内部寄存器9.4基于标准外设库的外部中断应用实例仿真与实现9.4.1标准外设库中断及EXTI相关接口函数

9.4.2软件设计与仿真实现

第9章STM32F103中断及应用---学习内容标准外设库中断相关库函数STM32F10x的NVIC库函数存放在misc.h和misc.c等文件中头文件misc.h:存放NVIC和SysTick相关结构体和宏定义、NVIC和SysTick库函数声明源代码文件misc.c:存放NVIC和SysTick库函数定义STM32F10x的NVIC常用库函数:NVIC_PriorityGroupConfig:设置优先级分组(设置SCB->AIRCR[10:8])NVIC_Init:根据NVIC_InitStruct中指定的参数初始化NVICNVIC_DeInit:将NVIC的寄存器恢复为复位启动时的默认值NVIC_PriorityGroupConfig函数原型:voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)功能描述:设置优先级分组,即抢占优先级和子优先级各自所占的位数输入参数NVIC_PriorityGroup的取值:

NVIC_PriorityGroup_0NVIC_PriorityGroup_1NVIC_PriorityGroup_2NVIC_PriorityGroup_3NVIC_PriorityGroup_4NVIC_Init函数原型:voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)功能描述:根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器输入参数NVIC_InitStruct:指向结构体NVIC_InitTypeDef的指针,包含相关配置信息。STM32F10x的EXTI相关库函数STM32F10x的EXTI相关库函数存放在stm32f10x_exti.h和stm32f10x_exti.c等文件中头文件stm32f10x_exti.h:存放EXTI相关结构体和宏定义、EXTI库函数声明源代码文件stm32f10x_exti.c:存放EXTI库函数定义STM32F10x的EXTI常用库函数EXTI_DeInit:将EXTI的寄存器恢复为复位启动时的默认值EXTI_Init:根据EXTI_InitStruct中指定的参数初始化EXTIEXTI_GetFlagStatus:检查指定的外部中断/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论