




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、本章大纲一、嵌套向量中断控制器NVIC CM3内核搭载了一个异常响应系统,通过NVIC(嵌套向量中断控制器)来管理和配置。NVIC是一个总的控制器,相当于51的IE,不论是来自CM3内部的异常还是来自外设的中断,都进入该控制器进行处理和逻辑控制。并且NVIC还通过优先级系统,来控制中断的嵌套。1. 中断优先级优先级的数值越小,则优先级越高。NVIC支持中断嵌套,使得高优先级异常会抢占低优先级异常。 有3个系统异常:复位、NMI(不可屏蔽中断)以及硬件失效(Hard fault),它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其他异常。原则上,NVIC支持3个固定的高优先级和多达
2、256级的可设置优先级,用一个字节的8个比特位来表示。STM32F107采用最高有效位对齐,在设计时裁掉表达优先级的4个低端有效位,所以只支持16级优先级。 2. 抢占优先级与从优先级NVIC中有一个寄存器是“应用程序中断及复位控制寄存器”,它里面有一个位段名为“优先级组”。它把优先级分为2个位段:MSB所在的位段对应抢占优先级,抢占优先级决定了抢占行为。LSB所在的位段对应从优先级,从优先级则处理“内务”。 在STM32F107中,只使用4个位来表达优先级(7:4),如果抢占优先级组从比特5处分,则得到4级抢占优先级,且在每个抢占优先级的内部有4个从优先级(00 01 10 11)。3. 中
3、断输入与悬起 当中断输入脚被置为有效后,该中断就被“悬起”。所谓“悬起”,也就是等待、就绪的意思。即使后来中断源撤消了中断请求,已经被标记成悬起的中断也被记录下来。 当某中断的服务程序开始执行时,就称此中断进入了“活跃”状态,并且其悬起位会被硬件自动清除。在一个中断活跃后,直到其服务例程执行完毕,并且返回后,才能对该中断的新请求予以响应。当NVIC响应一个中断时,会自动完成以下三项工作,以便安全、准确地跳转到相应的中断服务程序: 入栈:把8个寄存器的值压入栈。 当响应中断时,如果当前的代码正在使用PSP,则压入PSP(进程堆栈),否则就压入MSP(主堆栈)。一旦进入了服务例程,就一直使用主堆栈
4、。在自动入栈的过程中,将寄存器写入堆栈的顺序与时间顺序无关,CM3会保证正确的寄存器被保存到正确的位置。取向量:当数据总线(系统总线)进行入栈操作时,指令总线(I-Code总线)正在从向量表中找出正确的中断向量与对应的服务程序入口地址。 更新寄存器。注意: 如果在某个中断得到响应之前,其悬起状态被清除了,则中断被取消。 新请求在得到响应时,由硬件自动清零其悬起标志位。 如果中断源咬住请求信号不放,该中断就会在其上次服务例程返回后再次被置为悬起状态。 如果某个中断在得到响应之前,其请求信号以若干的脉冲的方式呈现,则被视为只有一次中断请求 如果在服务例程执行时,中断请求释放了,但是在服务例程返回前
5、又重新被置为有效,则NVIC会记住此动作,重新悬起该中断。 4. 中断返回当中断完成,返回主程序时,NVIC自动完成以下两步: 出栈:先前压入栈中的寄存器在这里恢复。内部的出栈顺序与入栈时的相对应,堆栈指针的值也改回先前的值。 更新NVIC 寄存器:伴随着中断的返回,它的活动位也被硬件清除。对于外部中断,倘若中断输入再次被置为有效,则悬起位也将再次置位,新一次的中断响应序列也会再次开始。5. CM3异常和中断系统-SYSTICK定时器 SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号15)。它又叫滴答中断,它的作用是规定不同任务执行时间,防止一个任务一直霸占系统。此外
6、,还有操作系统提供的各种定时功能,都与滴答中断有关。在STM32F107中,系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值)时产生1ms 时间基准。 对于SysTick,库函数文件misc.c中也有一个函数可以对其时钟源进行配置,该函数的原型为:SysTick_CLKSourceConfig( ) /*source(源头);config(配置)void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);SysTick_CLKSource描述SysTick_CLKSource_HCLK_Div8SysTick
7、时钟源为AHB时钟除以8SysTick_CLKSource_HCLKSysTick时钟源为AHB时钟6. 中断向量当发生了异常或中断,并且要响应它时,CM3 需要定位其服务程序的入口地址。通过入口地址找到相应的中断服务程序。这些入口地址存储在“(异常)向量表”中。 缺省情况下,CM3 认为(异常)向量表位于零地址处,且各向量占用 4 字节。STM32F107的异常响应系统是CM3的裁剪和细化 。在STM32F107中,这种映射关系具体体现在启动代码startup_stm32f10x_cl.s文件中。该文件已经对这些向量表等进行了映射和配置,并指定了中断服务程序的名称,出于标准化和固件库的要求,
8、一般不建议进行修改。该文件由汇编写成。【代码4- 2】 startup_stm32f10x_cl.s/*复位异常服务函数,函数名为Reset_Handler。PROC表示:定义子程序。与ENDP相对应。Reset_Handler PROC/*输出一个标号,供全局使用。WEAK表示如果其他文件同样定义了该标号,则不使用WEAK定义的本标号。 EXPORT Reset_Handler WEAK;从其他文件读入一个标号SystemInit IMPORT SystemInit;从其他文件读入一个标号main IMPORT _main将SystemInit标号地址赋值给R0并跳转 LDR R0, =Sy
9、stemInit BLX R0;将main标号地址赋值给R0并跳转 LDR R0, =_main BX R0 ENDP 二、外部中断/事件控制器EXTI与NVIC不同,外部中断/事件控制器EXTI是STM32F107的一个外设,不属于CM3内核的范畴,主要用于配置GPIO的外部中断线。对于一般中断来说,还需要配合NVIC设置其优先级才能真正的正常工作。主要特性为:EXTI由20个产生事件/中断请求的边沿检测器组成。每个中断/事件都有独立的触发和屏蔽。 每个中断线都有专用的状态位。 支持多达20个软件的中断/ 事件请求。 检测脉冲宽度低于APB2时钟宽度的外部信号。 3、 NVIC库函数配置NV
10、IC涉及的库函数存放在misc.c文件中,并非类似stm32f10x_gpio.c的命名,这是因为NVIC属于CM3内核部件,遵从CMSIS接口协议。就其库函数来看,NVIC主要是设置中断的优先级,以达到控制其运行先后及嵌套等功能。 下面以实例来介绍:配置EXTI3中断的抢占优先级为0x07,从优先级为0x07,并使能该中断。 void NVIC_Config (void)NVIC_InitTypeDef NVIC_InitStructure;/*配置中断通道为EXTI3,channel(通道)*/ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn
11、; /* 在NVIC_InitStructure中配置中断抢占优先级为3 ,preemption抢先占有,priority 优先权*/ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x07; /* 在NVIC_InitStructure中配置中断从优先级为1 ,sub 潜水艇,地铁,替补队员*/NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_Ini
12、tStructure);注:抢占优先级去从优先级的选择NVIC_PriorityGroupPreemptionPrioritySubPriority描述NVIC_PriorityGroup_000-15抢占优先级0位从优先级4位NVIC_PriorityGroup_10-10-7抢占优先级1位从优先级3位NVIC_PriorityGroup_20-30-3抢占优先级2位从优先级2位NVIC_PriorityGroup_30-70-1抢占优先级3位从优先级1位NVIC_PriorityGroup_40-150抢占优先级4位从优先级0位下面以介绍如何编写EXTI函数来介绍EXTI:void EXT
13、I_Config(void) EXTI_InitTypeDef EXTI_InitStructure; /*定义结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /*配置GPIO线上的外部中断,必须先使能AFIO时钟。这句是rcc.h中的一句函数:RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3); /*配置PD3管脚
14、作为EXTI线,这句是gpio.h中的函数,参数为(uint8_t GPIO_PortSource(端口源),uint8_t GPIO_PinSource(引脚源));EXTI_InitStructure.EXTI_Line = EXTI_Line3;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /*中断模式:Interrupt 中断模式; Event 事件模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /*触发方式:Falling下降沿触发;Rising 上升沿触发;
15、Rising_Falling 边沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE; /*指定中断状态:ENABLE 使能,DISABLE 关闭EXTI_Init(&EXTI_InitStructure);下面以实际例子来介绍如何编写中断程序将PD3管脚接一个按键,作为外部中断线3的输入源,每次按下该按键产生一个中断,在中断服务函数中驱动PC9管脚控制LED4灯翻转输出状态。编写main函数:#Include “stm32x.h”void GPIO_Config(void);void NVIC_Config(void);void EXTI_Config(vo
16、id);Int main(void) GPIO_Config(); NVIC_Config();EXTI_Config();while(1); 编写GPIO_Config()void GPIO_Config(void);GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE); /* 配置PC9管脚作为推挽输出 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructu
17、re.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC, &GPIO_InitStructure);/* 配置PD3作为浮空输入,为外部中断做准备 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_ModeG;_IN_FLOATINGPIO_Init(GPIOD, &GPIO_InitStructure);注:GPIO_Mode描述GPIO_Mode_AIN设置管脚工作模式为模拟输入GPIO_Mode_IN_FLOATING设置管脚工作模式为浮空输入GPIO_Mode_IPD设置管脚工作模式为输入下拉GPIO_Mode_IPU设置管脚工作模式为输入上拉GPIO_Mode_Out_OD设置管脚工作模式为开漏输出GPIO_Mode_Out_PP设置管脚工作模式为推挽输出GPIO_Mode_AF_OD设置管脚工作模式为复用的开漏GPIO_Mode_AF_PP设置管脚工作模式为复用的推挽配置NVIC配置EXTI中断函数的编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 促就业联合行动协议书
- 提升能力经济法试题及答案
- 2025年河南省南阳市方城县中考三模化学试题
- 护士法律试题及答案
- 国家计算机二级c考试试题及答案
- 财务成本管理在危机管理中的重要性与试题与答案
- 2025年Web考试心得总结与分享
- 法律宣讲面试题及答案
- 法律体系面试题目及答案
- 法律实物试题及答案
- 肠易激综合征中西医结合诊疗专家共识(2025)解读课件
- 《金属疲劳与断裂》课件
- 2025年《民法典》应知应会知识竞赛题库(含各题型)
- 灸法完整版本
- 剧场协议合同范例
- 建筑概论考试试题及答案
- 回弹法混凝土强度检测方法课件
- 人教版九年级语文中考真题汇编 《红星照耀中国》(2022-2024)全国中考语文真题
- 滨州市沾化区区属国有企业招聘笔试题库2025
- (三诊)绵阳市高中2022级高三第三次诊断性考试 英语试卷A卷(含答案)
- 2024-2025学年上海市民办华育中学八年级(下)期中数学试卷 (含详解)
评论
0/150
提交评论