第6章 Cortex-M3异常与NVICppt课件_第1页
第6章 Cortex-M3异常与NVICppt课件_第2页
第6章 Cortex-M3异常与NVICppt课件_第3页
第6章 Cortex-M3异常与NVICppt课件_第4页
第6章 Cortex-M3异常与NVICppt课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

.,第六章Cortex-M3异常与NVIC,补充知识1、Cortex-M3异常与NVIC的关系2、Cortex-M3中异常与中断的区别3、Cortex-M3异常和中断类型4、中断优先级5、中断执行顺序支持中断嵌套6、外部中断和外部事件7、EXTI寄存器8、外部中断例程,.,补充知识:1、中断源外部中断:中断源是处理器内核外硬件电路中发生的突发事件,它们通过响应的芯片内部通道或外部引脚向处理器提出中断请求,如定时器外部中断、ADC转换结束中断等。内核中断:中断源是处理器内核正在执行的过程引发的异常情况,如当指令执行了“非法操作”、访问被禁的内存区间、因各种错误产生的fault以及不可屏蔽中断。,.,补充知识:2、中断优先级及中断嵌套中断嵌套遵循以下几个原则。CPU同时接收到几个中断时,首先响应优先级最高的中断请求。正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。正在进行的低优先级中断服务,能被高优先级中断请求中断。,.,补充知识:3、中断类型码与中断向量处理器为了识别中断源,给每一个中断分配了一个编号,这就是中断类型码,它是识别中断源的唯一标志处理器的中断管理系统将所有中断服务程序的入口地址集中存放在内存的某个区域中,从而建立了一个中断服务程序的入口地址表,称为中断向量表。,.,补充知识:4、中断响应中断响应是当处理器发现有中断请求发生时,中止、保存当前程序的执行,转而执行中断处理程序的过程。信息保存,处理器将保存一些重要的信息,如返回地址和一些特定寄存器值等信息,这部分主要是进行压栈操作,从这一点来讲几乎所有的处理器都是一样的,用压栈保护现场。同时处理器会获得的中断类型码,并根据获得的中断类型码查找中断向量表,获得中断服务程序的入口地址。中断执行,执行相应功能的中断服务程序。中断返回,当中断服务程序执行结束时,从堆栈中取出返回地址等各种信息,程序继续执行。,.,1、Cortex-M3异常与NVIC的关系,Cortex-M3在内核水平上搭载了一个异常响应系统,支持多种的系统异常和外部中断共256个中断,除了个别异常的优先级已经固定外,其它异常的优先级都是可编程的。Cortex-M3的异常是由嵌套向量中断控制器NVIC(NestedVectoredInterruptController)统一进行管理的。STM32采用了Cortex-M3内核,所以这部分仍旧保留使用,但STM32并没有使用Cortex-M3内核全部的东西,因此它的NVIC是cortex_m3内核的NVIC的子集。,.,2、Cortex-M3中异常与中断的区别,对于Cortex-M3核来讲异常是指因为Cortex-M3内核的活动而打断了正在执行的程序,于Cortex-M3内核来说是“同步”的,如:当指令执行了“非法操作”、访问被禁的内存区间、因各种错误产生的fault以及不可屏蔽中断。中断于Cortex-M3内核来说请求信号来自Cortex-M3内核的外面,来自各种片上外设和外扩的外设,因此相对于Cortex-M3内核来说是“异步”的,如定时器外部中断。,.,3、Cortex-M3异常和中断类型,Cortex-M3异常类型见书P70STM32F10 xxx系列非互联网产品支持中断共为76个,包括16个内核中断和60个外部中断见书P73,.,4、中断优先级,Cortex-M3的异常优先级可以被分组为抢占式优先级和响应优先级,有时又称为组优先权和子优先权。每个中断源都需要被指定这两种优先级,256级优先级被按位分成高、低两段,高段设置抢占式优先级,低段设置响应优先级。Cortex-M3中定义了8个比特位用于设置中断源的优先级,见书P71同时注意:优先级数值越小,优先级别反而越高抢占式优先级和响应优先级的关系?若中断A抢占优先级比B高,那么A的中断可以在B里面触发,忽略响应优先级;中断A和B抢占优先级相同,则A、B的响应顺序由响应优先级决定谁先响应;,.,以STM32为例,有16个可编程的优先等级,也就是可以4位来表达优先级,分组方式如下:第0组:无抢占式优先级设置,所有4位用于指定响应优先级第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级第4组:所有4位用于指定抢占式优先级,.,第0组,第1组,第2组,第3组,第4组,.,以STM32的优先级第3组设置为例,.,5、中断执行顺序支持中断嵌套,1、复位(Reset)、不可屏蔽中断(NMI)、所有类型的失效(HardFault)等优先级为负(高于普通中断优先级)且不可调整2、高抢占优先级的中断事件会打断低抢占优先级的中断(中断嵌套)抢占优先级决定是否会有中断嵌套3、抢占优先级相同的情况下,如果有低响应优先级的中断在执行时,来了一个高响应优先级的中断请求,则高响应优先级的中断请求要等待低响应优先级的中断执行完了,才能响应高响应优先级的中断请求不可以嵌套;当然若高响应优先级的中断和低响应优先级的中断请求同时发生,会先响应高响应优先级的中断请求判断中断是否被响应的依据:先看抢占优先级,再看响应优先级,.,可知使用中断时需要配置应该包括:1、设置中断号,选择哪个中断?2、选择优先级分组为第几组?3、抢占式优先级为多少?4、响应优先级为多少?,.,NVIC_InitTypeDef的数据结构定义如下:typedefstructuint8_tNVIC_IRQChannel;/*中断类型对应的中断号*/uint8_tNVIC_IRQChannelPreemptionPriority;/*!抢占式优先级*/uint8_tNVIC_IRQChannelSubPriority;/*响应优先级*/FunctionalStateNVIC_IRQChannelCmd;/*允许或禁止中断,可设置为ENABLE或DISABLE*/NVIC_InitTypeDef,定义在misc.h中,各成员值见书P199,.,6、外部中断和外部事件,图6.2外部中断/事件控制框图,外部中断和事件,中断,事件,19路EXIT控制器,.,可知使用EXTI中断时还需要配置应该包括:若配置EXTI的输入线为中断源,过程如下:5、配置上升沿或下降沿触发选择寄存器?6、配置中断屏蔽寄存器?若配置EXTI的输入线为事件源,过程如下:配置所选事件线的屏蔽寄存器?,.,书P79中断屏蔽寄存器(EXTI_IMR)事件屏蔽寄存器(EXTI_EMR)上升沿触发选择寄存器(EXTI_RTSR)下降沿触发选择寄存器(EXTI_FTSR)软件中断事件寄存器(EXTI_SWIER)挂起寄存器(EXTI_PR),EXTI寄存器,.,中断屏蔽寄存器(EXTI_IMR),MRx:线x上的中断屏蔽(InterruptMaskonlinex)0:屏蔽来自线x上的中断请求;1:开放来自线x上的中断请求。,.,事件屏蔽寄存器(EXTI_EMR),MRx:线x上的事件屏蔽(EventMaskonlinex)0:屏蔽来自线x上的事件请求;1:开放来自线x上的事件请求。,.,上升沿触发选择寄存器(EXTI_RTSR),TRx:线x上的上升沿触发事件配置0:禁止输入线x上的上升沿触发(中断和事件);1:允许输入线x上的上升沿触发(中断和事件),.,下降沿触发选择寄存器(EXTI_FTSR),TRx:线x上的下降沿触发事件配置0:禁止输入线x上的下降沿触发(中断和事件);1:允许输入线x上的下降沿触发(中断和事件),.,软件中断事件寄存器(EXTI_SWIER),SWIERx:线x上的软件中断,当该位为0时,写1将设置EXTI_PR中相应的挂起位。如果在EXTI_IMR和EXTI_EMR中允许产生该中断,则此时将产生一个中断。,.,挂起寄存器(EXTI_PR),PRx:挂起位(Pendingbit)0:没有发生触发请求;1:发生了选择的触发请求当在外部中断线上发生了选择的边沿事件,该位被置1。在该位中写入1可以清除它,也可以通过改变边沿检测的极性清除。,.,EXTI_TypeDef的数据结构定义如下:typedefstruct_IOuint32_tIMR;/*中断屏蔽寄存器*/_IOuint32_tEMR;/*事件屏蔽寄存器*/_IOuint32_tRTSR;/*上升沿触发选择寄存器*/_IOuint32_tFTSR;/*下降沿触发选择寄存器*/_IOuint32_tSWIER;/*软件中断事件寄存器*/_IOuint32_tPR;/*挂起寄存器*/EXTI_TypeDef;,定义在Stm32f10 x.h中,用于寄存器编程法编程,EXIT初始化结构体相关配置寄存器,.,#definePERIPH_BASE(uint32_t)0 x40000000)#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0 x10000)#defineEXTI_BASE(APB2PERIPH_BASE+0 x0400)#defineEXTI(EXTI_TypeDef*)EXTI_BASE),.,EXTI_InitTypeDef的结构体如下:Typedefstructuint32_tEXTI_Line;/选择使能或失能的外部线路EXTIMode_TypeDefEXTI_Mode;/事件请求或中断请求选择EXTITrigger_TypeDefEXTI_Trigger;/触发方式FunctionalStateEXTI_LineCmd;/线路状态enable/disableEXTI_InitTypeDef;,定义在Stm32f10 x_exit.h中,各成员值见书P198,.,以STM32非互联型产品为例,其芯片内部有19路EXTI控制器,那么每一路对应的外部中断/事件线路是怎样的?EXTI0EXTI15是I/O端口通过图6.3的方式连接到16个外部中断/事件线上;EXTI16连接的是PVD输出;EXTI17连接的是RTC闹钟事件;EXTI18连接的是USB唤醒事件。,.,可知使用EXTI中断时还需要配置应该包括:7、选择EXTI的输入线路?,GPIO的复用选择设置,.,小结:完成EXTI中断时需要配置应该包括:1、设置中断号,选择哪里中断?2、选择优先级分组为第几组?3、抢占式优先级为多少?4、响应优先级为多少?5、配置上升沿或下降沿触发选择寄存器?6、配置中断屏蔽寄存器?7、选择EXTI的输入线路?对应的中断服务程序,结构体NVIC_InitTypeDef,结构体EXTI_InitTypeDef,用到:stm32f10 x_it.cstm32f10 x_it.h,GPIO复用选择,.,voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup);voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct);voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);voidEXTI_ClearITPendingBit(u32EXTI_Line);,常用函数(除常用GPIO函数外),NVIC库函数,见书199,voidGPIO_EXTILineConfig(uint8_tGPIO_PortSource,uint8_tGPIO_PinSource)voidRCC_APB2PeriphClockCmd(uint32_tRCC_APB2Periph,FunctionalStateNewState);,EXIT库函数,见书198,GPIO库函数,见书187,RCC库函数,见书191,.,7、外部中断例程,设计要求:当按下按键S1时,发光二极管DS1的状态改变一次;当按下按键S2时,发光二极管DS2的状态改变一次;以此类推。(采用中断方式编程),.,程序设置如下:设置好相应的时钟设置相应的中断,包括中断号、优先级、中断允许将相应的GPIO口设置为中断线路(要在设置外部中断之前)并初始化I/O口初始化,包括按键及LED完成中断服务(响应)函数主程序,.,/引脚定义#defineRCC_GPIO_LEDRCC_APB2Periph_GPIOF/*LED使用的GPIO时钟*/#defineLEDn4/*IIILED数量*/#defineGPIO_LEDGPIOF/*IIILED灯使用的GPIO组*/#defineDS1_PINGPIO_Pin_6/*DS1使用的GPIO管脚*/#defineDS2_PINGPIO_Pin_7/*DS2使用的GPIO管脚*/#defineDS3_PINGPIO_Pin_8/*DS3使用的GPIO管脚*/#defineDS4_PINGPIO_Pin_9/*DS4使用的GPIO管脚*/#defineGPIO_LED_ALLDS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN#defineRCC_KEY1RCC_APB2Periph_GPIOD#defineGPIO_KEY1_PORTGPIOD#defineGPIO_KEY1GPIO_Pin_3#defineRCC_KEY2RCC_APB2Periph_GPIOA#defineGPIO_KEY2_PORTGPIOA#defineGPIO_KEY2GPIO_Pin_8#defineRCC_KEY3RCC_APB2Periph_GPIOC#defineGPIO_KEY3_PORTGPIOC#defineGPIO_KEY3GPIO_Pin_13#defineRCC_KEY4RCC_APB2Periph_GPIOA#defineGPIO_KEY4_PORTGPIOA#defineGPIO_KEY4GPIO_Pin_0,.,设置好相应的时钟,voidRCC_config()/打开PEPDPCPB端口时钟,并且打开复用时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO,ENABLE);,因为使用到中断,.,设置相应的中断,包括中断号、优先级、中断允许,NVIC的数据结构定义如下:typedefstructuint8_tNVIC_IRQChannel;/*中断类型对应的中断号*/uint8_tNVIC_IRQChannelPreemptionPriority;/*抢占式优先级*/uint8_tNVIC_IRQChannelSubPriority;/*响应优先级*/FunctionalStateNVIC_IRQChannelCmd;/*允许或禁止中断,可设置为ENABLE或DISABLE*/NVIC_InitTypeDef,各参数的取值表见书P200,.,voidNVIC_config()NVIC_InitTypeDefNVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/选择中断分组2NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;/选择中断通道0NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;/抢占式中断优先级设置为0NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;/响应式中断优先级设置为0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;/使能中断NVIC_Init(,参数的取值表见书P199,.,将相应的GPIO口设置为中断线路(要在设置外部中断之前)并初始化,EXTI的数据结构定义如下:typedefstruct_IOuint32_tIMR;/*中断屏蔽寄存器*/_IOuint32_tEMR;/*事件屏蔽寄存器*/_IOuint32_tRTSR;/*上升沿触发选择寄存器*/_IOuint32_tFTSR;/*下降沿触发选择寄存器*/_IOuint32_tSWIER;/*软件中断事件寄存器*/_IOuint32_tPR;/*挂起寄存器*/EXTI_TypeDef;,定义在Stm32f10 x.h中,.,库函数使用中的初始化外设EXIT寄存器结构体typedefstructuint32_tEXTI_Line;EXTIMode_TypeDefEXTI_Mode;EXTITrigger_TypeDefEXTI_Trigger;FunctionalStateEXTI_LineCmd;EXTI_InitTypeDef;,参数的取值表见书P198,EXTI_Init(EXTI_ClearITPendingBit(EXTI_Line0);/清空中断标志/选择中断管脚PA.0PC.13PA.8PD.3GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);EXTI_InitStructure.EXTI_Line=EXTI_Line0|EXTI_Line13|EXTI_Line8|EXTI_Line3;/选择中断线路01383EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;/设置为中断请求,非事件请求EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;/设置中断触发方式为下降沿触发EXTI_InitStructure.EXTI_LineCmd=ENABLE;/外部中断使能EXTI_Init(,.,I/O口初始化,包括按键及LED,voidGPIO_KEY_config(void)GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin=GPIO_KEY1;GPIO_Init(GP

温馨提示

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

评论

0/150

提交评论