STM32NVIC固件库分析与应用0_第1页
STM32NVIC固件库分析与应用0_第2页
STM32NVIC固件库分析与应用0_第3页
STM32NVIC固件库分析与应用0_第4页
STM32NVIC固件库分析与应用0_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

目录一、异常的种类 .2二、异常的优先级 .2三、NVIC 异常处理 .41、异常的处理 .42、抢占的处理 .43、异常的返回 .5四、复位过程 .6五、中断和事件 .7(1)硬件中断选择 .8(2)硬件事件选择 .8(3)软件 中断/事件选择 .8(4)外部中断/事件线路映射 .8(5)相关的功能寄存器 .8六、NVIC 库函数 .116.1 函数 NVIC_PriorityGroupConfig .116.2 函数 NVIC_Init .116.3 函数 NVIC_StructInit.136.4 函数 NVIC_SetVectorTable.136.5 函数 NVIC_GenerateSystemReset.146.6 函数 NVIC_GenerateCoreReset.146.7 函数 NVIC_SystemLPConfig .15其他相关函数 .15七、程序设计 .161、滴答时钟简单使用 .162、NVIC 外部中断配置实验 .17八、设计总结 .17STM32 NVIC 固件库分析与应用Cortex-M3 处理器和 NVIC 对所有优先级进行划分和处理。所有的异常处理均在Handle 模式下进行。当出现异常时,处理器的状态被自动保存到栈中;在中断服务子程序结束之后,又会自动从栈中恢复处理器的状态。获取中断向量和状态保存是同时进行的,这提高了进入中断处理的效率。Cortex-M3 处理器支持尾链技术,即当发生背靠背中断时,无需保存和恢复状态,而是继续执行。Cortex-M3 处理器的一下特性,提高了处理异常的效率并降低了时间的延迟。 处理器状态的自动保存和恢复; 中断向量表读取与处理器状态保存并行处理; 支持尾链技术,当处理背靠背的中断时,不需要在 2 个终端服务子程序之间进行入栈和出栈操作; 可动态重设优先级; NVIC 和 Cortex-M3 处理器和紧密耦合,可尽早处理中断,尤其是晚到的高优先级中断; 中断的数目可以配置,1240; 为 Handle 和 Thread 模式分别提供独立的栈和访问权限等级; 可屏蔽优先级以支持临界区。一、异常的种类Cortex-M3 处理器将复位、不可屏蔽中断、外部中断、故障都统一为异常,异常有多种类型。故障是指指令执行时由于错误的条件所导致的异常。故障可分为同步故障和一般故障,同步故障是指当指令产生错误时就同时报告错误,而异步故障则是指当指令产生错误时无法保证同时报告错误。下表列出了异常的类型、位置和优先级。位置是指中断向量在中断向量表中的位置,是相对于中断限量表开始处字的偏移。优先级的值越小,优先级越高。表 1-1 异常的类型异常类型 偏移 优先级 描述- 0 - 复位时,加载向量表中第一项作为栈顶地址复位 1 -3 电源开启可热复位时调用,在执行第一条指令时,优先级下降到最后,异步故障不可屏蔽中断 2 -2 除了复位,它不能被其他任何中断终止和抢占,异步故障硬故障 3 -1 如果故障由于优先级或可配置的故障处理程序被禁止而不能激活时,此时所有这些故障均为硬故障,同步故障存储管理 4 可配置 存储保护单元不匹配,包括不可访问和不匹配,同步故障;也用于 MPU 不可用或不存在的情况,以支持默认存储映射的从不执行区域总线故障 5 可配置 预取错误,存储器访问错误,以及其他地址/存储器相关的错误;当为精确地总线故障时是同步故障,不精确时为异步故障应用故障 6 可配置 应用错误,如执行未定义的指令或试图进行非法的状态装换,同步故障- 710 - 保留SVCall 11 可配置 使用 SVC 指令进行系统服务调用,同步故障调试监视异常 12 可配置 调试监视异常,同步故障,但只在允许时有效;如果它的优先级比当前激活的处理程序的优先级更低,则它不能激活- 13 - 保留PendSV 14 可配置 系统服务的可挂起请求,异步故障,只能由软件挂起SysTick 15 可配置 用于系统嘀嗒定时器,异步故障外部中断 16 可配置 由核外发出的中断,INTISR239:0,传递给 NVIC 都为异步故障二、异常的优先级在处理器处理异常时,优先级决定了处理器何时以及如何进行异常处理。可以给中断设置软件优先级以及对其进行分组。优先级 NVIC 支持通过软件设置的优先级。通过写中断优先级寄存器的 PRI_N 字段可以设置优先级,范围为 0255。硬件优先级随着中断号的增加而减小,优先级 0 为最高优先级,255 为最低优先级。通过软件设置的优先级权限高于硬件优先级。例如,如果设置 IRQ0的优先级为1,IRQ31的优先级为 0,则 IRQ31的优先级比 IRQ0的高。但通过软件设置的优先级对复位、不可屏蔽中断和硬件故障没有影响。当多个中断具有相同的优先级时,拥有最小中断号的挂起中断优先执行。例如,IRQ0和 IRQ1的优先级都为 1,则 IRQ0优先执行。优先级分组 为了更好的对大量的中断进行优先级管理和控制,NVIC 支持优先级分组。通过设定应用中断和复位中断控制寄存器的 PRIGROUP 字段,可以将 PRI_N 字段分成 2 个部分:抢占优先级和次要优先级,如表 2 所列。抢占优先级可以认为是优先级分组,当多个挂起的异常具有相同的抢占优先级时,次要优先级就起作用。优先级分组和次要优先级共同作用确定了异常的优先级,当两个挂起的异常具有完全相同的优先级时,硬件位置编号低的异常优先级被激活。表 2-1 优先级分组中断优先级字段 PRI_N7:0PRIGROUP2:0 分割点位置 抢占优先级字段 次要优先级字段 占先优先级数量 次要优先级数量B000 bxxxxxxx.y 7:1 0 128 2B001 bxxxxxx.yy 7:2 1:0 64 4B010 bxxxxx.yyy 7:3 2:0 32 8B011 bxxxx.yyyy 7:4 3:0 16 16B100 bxxx.yyyyy 7:5 4:0 8 32优先级对异常处理的影响异常的处理 异常的处理与优先级有很大的关系,异常处理中与优先级相关的操作入表 2-2 所列表 2-2 异常处理中宇优先级相关的操作操作 描述抢占 当新异常比当前异常或任务有更高的优先级时,则中断当前的操作流,响应新的中断,并执行新的 ISR,于是就产生了中断的嵌套。异常产生时,处理器的状态将自动入栈保护;与此同时,相应的中断向量被取出。保存处理器状态后,将执行 ISR 的第一条指令,进入了处理器流水线的执行阶段尾链 这时用于加快中断服务处理的机制。如果有一个新的 ISR 或任务比即将返回的 ISR 拥有更高的优先级,则处理器状态出栈就被跳过而去执行新的 ISR返回如果没有挂起的异常,或没有比栈中的 ISR 优先级更高的异常,则处理去执行出栈返回操作。ISR 完成时,将自动通过操作恢复进入 ISR 之前的处理器状态,在恢复处理器状态的过程中,如果有一个新到的中断比当前异常或任务有更高的优先级,则抛弃当前的操作,并对并新的中断做尾链处理迟到这时用于加快抢断速度的机制,当这在为先前到达的中断保存处理区状态时,如果有一个更高优先级的中断到达,则处理器的选择处理更高优先级的中断,并未该中断获取向量,但状态保存不会因晚到而受到影响,因为对于两个中断来说,保存处理器状态操作都是一样的,做保存状态不被中断而是继续进行,但保存完状态之后会执行迟到的中断的 ISR 的第一条指令。返回时则使用通常的尾链规则三、NVIC 异常处理 1、异常的处理当一个异常出现以后,Cortex 一 M3 处理器由硬件通过 Dbus 保存处理器状态,同时通过 Ibus 读取向量表中的 SP,更新 PC 和 LR,执行中断服务子程序。为了应对堆栈操作阶段到来后的更高优先级异常,CortexM3 支持迟到和抢占机制,以便对各种可能事件做出确定性的响应。B101 bxx.yyyyyy.7:6 5:0 4 64B110 bx.yyyyyyy 7 6:0 2 128B111 b.yyyyyyyy 无 7:0 0 2562、抢占的处理抢占是一种对更高优先级异常的响应机制。CortexM3 异常抢占的处理过程如图 1所示。当新的更高优先级异常到来时,处理器打断当前的流程,执行更高优先级的异常操作,这样就发生了异常嵌套。迟到是处理器用来加速抢占的一种机制。如果一个具有更高优先级的异常在上一个异常执行压栈期间到达,则处理器保存状态的操作继续执行,因为被保存的状态对于两个异常都是一样的。但是,NVIC 马上获取的是更高优先级的异常向量地址。这样在处理器状态保存完成后,开始执行高优先级异常的 ISR。3、异常的返回为了应对异常返回阶段可能遇到的新的更高优先级异常,CortexM3 支持完全基于硬件的尾链机制,简化了激活的和未决的异常之问的移动,能够在两个异常之间没有多余的状态保存和恢复指令的情况下实现 backtoback 处理。尾链发生的 2 个条件:异常返回时产生了新的异常;挂起的异常的优先级比所有被压栈的异常的优先级都高。尾链发生后,CortexM3 处理过程如图 3 中尾链分支所示。这时,Cortex M3 处理器终止正在进行的出栈操作并跳过新异常进入时的压栈操作,同时通过 Ibus 立即取出挂起异常的向量。在退出前一个 ISR 返回操作 6 个周期后,开始执行尾链的 ISR。四、复位过程Cotex-M3 处理器复位时,NVIC 同时复位并控制内核从复位中释放出来。复位的过程是可完全预知的,如下表表 4-1 复位的过程动作 描述NVIC 复位,控制内核 NVIC 清除其大部分寄存器,处理器处于 Thrend 模式,特权访问方式执行代码,堆栈使用 Main 栈NVIC 从复位中释放内核 NVIC 从复位中释放内核内核配置堆栈 内核从向量表开始处读取初始 SP,Main_SP内核设置 PC 和 LR 内核从向量表偏移中读取初始 PC,LR 设置为 0Xffffffff运行复位程序 禁止 NVIC 中断,并允许 NMI 和硬故障向量表在向量表的 0 位置处,仅需要包含 4 个值: 栈顶地址; 复位程序的入口地址; 非屏蔽中断 ISR 的入口地址; 硬故障 ISR 的入口地址。当中断允许时,不管向量表放在何处,向量总是指向所有可屏蔽异常的处理。同样,如果使用 SVC 指令, SVCall ISR 的位置也被定位。一个完整向量表的例子:Unsigned in stack_baseSTACK_SIZE;Void ResetISR(viod);Void NmiISR(viod);ISR_VECTOR_TABLE vevtor_table_at_0stack_base+sizeof(stack_base),RedetISR,NmiISR,FaultISR,0. /用于内存保护单元0, /用于总线故障0, /用于硬件故障0,0,0,0 /保留SVCallISR,0, / 用于调试监控程序0, /保留0, /用于可挂起的服务请求0, /用于 SysTick/以下向量用于外部中断Timer1ISR,GpioInISRGpioOoutISR,I2Cisr五、中断和事件外部中断/事件控制器(EXTI)由 19 个产生事件/ 中断要求的边沿检测器组成。每个输入线可以独立地配合输入类型和对应的触发事件。每个输入线都可以被独立地屏蔽,由挂起寄存器保持着状态线的中断要求。EXTI 控制器的结构图如图 5-1 所示,其主要特性如下: 每个中断/事件都有独立的触发和屏蔽; 每个中断线都有专用的状态线; 支持多达 19 个中断/事件请求; 检测脉冲宽度低于 APB2 时钟宽度的外部信号。图 5-1 外部中断/事件控制器框图如果要产生外部中断,那么中断线必须事先配置好并激活。配置内容包括:根据需要的边沿检测设置 2 个触发寄存器、在中断屏蔽寄存器的相应位写 1 以允许中断请求。当外部中断线出现相应的边沿信号时,将产生一个中断请求,对应的挂起位也随着置 1。通过写 1 到挂起寄存器,可以清除该中断请求。如果要产生事件请求,事件请求线必须事先配置好并激活。配置内容包括:根据需要的边沿检测设置 2 个触发寄存器、在中断屏蔽寄存器的相应位写 1 以允许中断请求。当事件请求线上出现相应的边沿信号时,将产生一个事件请求脉冲,对应的挂起位不置 1。也可以通过软件在中断/事件寄存器写 1,来产生一个中断/ 事件请求。下面具体介绍如何配置软硬中断/事件请求。(1)硬件中断选择通过下面的过程,可以配置 19 根线为中断源: 配置 19 根中断线的屏蔽位(EXTI_IMR);配置所选中断线的触发选择位; 配置那些控制映射到外部中断/事件控制器(EXTI)的 NVIC 中断通道的允许和屏蔽位,使得 19 根中断线中的请求可以被正确地响应。(2)硬件事件选择通过下面的过程,可以配置 19 根线为事件源:配置 19 根事件请求线的屏蔽位;配置事件线的触发选择位图 5-2 通用 I/O 与外部中断的映射关系(3)软件中断 /事件选择可以配置 19 根线为软件中断/事件请求线,通过以下过程可以产生软件中断: 配置 19 根中断/事件请求线的屏蔽位; 设置软件中断请求寄存器的请求。(4)外部中断 /事件线路映射80 个通用 I/O 端口可以用图 5-2 方式映射到16 根外部中断/事件线上。另外 3 种其他的外部中断/事件控制器的连接如下: EXTI 线 16 连接到 PVD 输出; EXTI 线 17 连接到 RTC 闹钟事件; EXTI 线 18 连接到 USB 唤醒事件。Cortex-M3 可以通过外部或内部事件来唤醒内核,利用以上 19 根中断/事件请求线,可以配置任何外部 I/O 端口、RTC 闹钟和 USB唤醒事件来唤醒 CPU。(5)相关的功能寄存器1、中断屏蔽寄存器(EXTI_IMB)该寄存器用来设置是否屏蔽中断请求线上的中断请求,31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16Reseved WR18 WR17 WR16rw rw rw15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0WR15 WR14 WR13 WR12 WR11WR10 WR9 WR8 WR7 WR6 WR5 WR4 WR3 WR2 WR1 WR0rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw图 5-3 EXTI_IMR 寄存器表 5-1 EXTI_IMR 寄存器的位域定义位 定义31:19 保留,必须始终保持为复位状态(0)18:0 MRx:线 x 上的中断屏蔽0:线 x 上的中断请求被屏蔽;1:线 x 上的中断请求不被屏蔽2、事件屏蔽寄存器(EXTI_EMR)该寄存器用来设置是否屏蔽事件请求线上的中断请求,31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16Reseved WR18 WR17 WR16rw rw rw15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0WR15 WR14 WR13 WR12 WR11WR10 WR9 WR8 WR7 WR6 WR5 WR4 WR3 WR2 WR1 WR0rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw图 5-4 EXTI_EMR 寄存器表 5-2 EXTI_EMR 寄存器的位域定义位 定义31:19 保留,必须始终保持为复位状态(0)18:0 MRx:线 x 上的事件屏蔽0:线 x 上的事件请求被屏蔽;1:线 x 上的事件请求不被屏蔽3、上升沿触发选择寄存器(EXTI_RTSR)该寄存器用来设置是否上升沿触发中断和事件31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16Reseved TR18

温馨提示

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

评论

0/150

提交评论