文档章节

STM32 异常与中断

 奔跑的夕阳_
发布于 2017/08/17 10:35
字数 1056
阅读 43
收藏 0
点赞 0
评论 0

    Cortex_M3的内核编号1-15为系统异常,大于等于16的为外部中断。

    所有能打断正常执行流的事件都称为异常。异常是因为内核活动产生的(执行指令或访问存储器),对CM3来讲是同步的。

    中断对CM3核来说是意外突发事件,是来自外设的请求信号,对CM3来讲是异步的。

 

    异常分为不同的优先级,优先级的数值越小,优先级越高。

    CM3支持中断嵌套,使得高优先级异常会抢占低优先级的异常。

    有三个系统异常:复位、NMI、以及硬fault。它们优先级固定且都是负数,使得它们优先级最高。其余的异常的优先级都是可编程的。

    原则上,CM3支持3个固定的高优先级和256个可编程的优先级,支持128级抢占。最少使用三位表达优先级,即最少支持8级优先级。

抢占优先级与子优先级

优先级组把优先级分为高低两段。

    子优先级最少是一位,抢占优先级最多能有7位表示。也就是说CM3原则上支持128级抢占。

    例子:如果只使用 3 个位来表达优先级([7:5]),并且优先级组的值是 5(从比特 5 处分组),则得到 4 级抢占优先级,且在每个抢占优先级的内部有 2 个子优先级。

向量表

    当系统发生异常并要响应该异常的时候,CM3要定位其服务例程的入口地址,这些入口地址就存在向量表中。缺省时,默认位于零地址,各向量占用4字节,故各表项占用4字节。

    零地址一般用于存储引导代码。所以一般将向量表映射到FLASH或者RAM,它们的值在运行时不得被改变。

    为了支持动态重分发中断, CM3 允许向量表重定位——从其它地址处开始定位各异常向量。这些地址对应的区域可以是代码区,但更多是在 RAM 区。在 RAM 区就可以修改向量的入口地址了。为了实现这个功能, NVIC 中有一个寄存器,称为“向量表偏移量寄存器”(在地址 0xE000_ED08 处),通过修改它的值就能重定位向量表。但必须注意的是:向量表的起始地址是有要求的:必须先求出系统中共有多少个向量,再把这个数字向上“圆整”到 2 的整次幂,而起始地址必须对齐到后者的边界上。例如,如果一共有 32 个中断,则共有 32+16(系统异常) =48 个向量,向上圆整到 2 的整次幂后值为 64,因此向量表重定位的地址必须能被 64*4=256 整除,从而合法的起始地址可以是: 0x0, 0x100, 0x200 等。向量表偏移量寄存器的定义如表 7.7 所示。

  

    如果需要动态地更改向量表,则对于任何器件来说,向量表的起始处都必须包含以下向量:
 主堆栈指针(MSP)的初始值
 复位向量
 NMI
 硬 fault 服务例程
    后两者也是必需的,因为有可能在引导过程中发生这两种异常。
    可以在 SRAM 中开出一块空间用于存储向量表。在引导期间先填写好各向量,然后在引导完成
后,就可以启用内存中的新向量表,从而实现向量可动态调整的能力。

  中断悬起

    

    当中断输入脚被置为有效(asser) t 后,该中断就被悬起。即使后来中断源撤消了中断请求,已经被标记成悬起的中断也被记录下来。到了系统中它的优先级最高的时候,就会得到响应。
    但是,如果在某个中断得到响应之前,其悬起状态被清除了(例如,在 PRIMASK 或 FAULTMASK置位的时候软件清除了悬起状态标志),则中断被取消。

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 11
码字总数 3649
作品 0
杭州
STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记二(5):Cortex-M3处理器能量管理

Stm32和Cortex-M3处理器睡眠模式降低能量损耗: 睡眠模式停止处理器时钟,所有其它系统和外设时钟保持运行。 深度睡眠模式停止了大部分stm32系统和外设时钟。在产品级别,可能相应的为停止模...

qq_35014146 ⋅ 03/28 ⋅ 0

STM32之SysTick定时器

SysTick-------操作系统的心跳 SysTick是系统滴答定时器,可以说是操作系统的的“心跳”,它被绑在NVIC中,用于产生SysTick异常(异常号:15)。一旦产生SysTick异常,就会产生滴答中断,这个...

panrenqiu ⋅ 04/14 ⋅ 0

STM32系统滴答_及不可不知的延时技巧 - (上)

我想每个单片机爱好者及工程开发设计人员都有过点灯的经历。流水灯是个好东西,尤其是在调试资源有限的环境中,有时会帮上大忙。 然在最初入门时,如何让这些小灯们按照我们的想法欢快地跑起...

小汉憨憨 ⋅ 2014/04/29 ⋅ 0

SysTick的优先级是高还是低

SysTick系统嘀嗒定时器并非STM32独有的,它是Cortex内核的部分,CM3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15)。这样它可以很方便的移植到不同厂商出CM3内核...

OceanStack ⋅ 2015/01/24 ⋅ 0

[Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~

3D相关开发 [direct-X] 1、direct-X最小框架 [OpenGL] 1、环境搭建及最小系统 [OpenGL] 2、企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [51单片机] 1602液晶显示控制代码 [51单片机] 1...

史迪奇2号 ⋅ 2017/08/01 ⋅ 0

STM32F103使用硬件i2c作为从机模式

一、简单说明 本例子参考了ST官方历程,官方历程的链接如下 http://www.st.com/content/stcom/zh/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-stand......

c1033177205 ⋅ 01/25 ⋅ 0

STM32 定时器输入捕获实现红外遥控数据接收

之前已经写过了一个使用定时器普通计时功能来识别红外遥控数据的文章。本次是使用定时器输入捕获来实现,这种方法比起定时器普通计数来说要更加复杂一些,不过效果会更好。 一、原理 1、红外...

u011303443 ⋅ 2017/09/11 ⋅ 0

STM32 串口采用DMA方式收发

转载:http://blog.csdn.net/gdjason/article/details/51019219 一直都没有整理STM32 DMA应用,这篇文章算是抛砖引玉吧,欢迎拍砖。 本人QQ 330952038,欢迎交流学习 什么是DMA —- Directi...

zn2016 ⋅ 01/11 ⋅ 0

【转】浅析STM32中SysTick在3.5固件库中的应用

最近一直在忙STM32的学习,在学习中遇到了不少问题,也经过各种尝试解决问题,在这里我通过博文的形式写出来,也希望能够帮到遇见同样问题的人们。对于STM32系列的芯片,有一个好处就是官方给...

jerry2012cn ⋅ 2013/06/23 ⋅ 0

关于STM32F1系列的时钟配置和自定义BootLoader升级的问题

对于STM32F1的V3.5的固件库,单片机在上电的时候,会在启动文件中自动调用系统初始化函数,即在启动文件中会有这样一段代码 ResetHandler PROC EXPORT ResetHandler [WEAK] IMPORT __main I...

yunzhonghefei1 ⋅ 05/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

apollo配置中心的学习笔记

公司现在配置文件太多了,导致配置文件修改起来还是非常麻烦的。在boss(业务运营支撑系统)中,配置文件是存放在jar包的,通过应用jar包来引用配置文件(区分不同环境)。这种方式虽然能够满足...

miaojiangmin ⋅ 2分钟前 ⋅ 0

Jena增删改查AP

插入、更新数据 public static void insert(){ String query = "PREFIX book: <http://www.book.com/jinyong/> \n" + " INSERT DATA \n" + ......

Vincent-Duan ⋅ 3分钟前 ⋅ 0

springMVC之与json数据交互方法

因为我也要返回json数据。所以需要这个注解@ResponseBody,把Java对象转换成json字符串 注意: 1、@RequestBody不能省,因为前台发过来的数据是json数据,得用这个注解去解析该怎么接收这些数...

颖伙虫 ⋅ 7分钟前 ⋅ 0

用实例域代替序号(31)

1、许多枚举天生就与一个单独的int 值相关联 ordinal 方法,返回枚举常量在类型中的数字位置 下述,枚举修改很不方便,不好维护 永远不要根据枚举的序数导出与他相关联的值 而是将他保存在一...

职业搬砖20年 ⋅ 8分钟前 ⋅ 0

并发编程---ConcurrentHashMap源码解析

ConcurrentHashMap是java中为了解决HashMap不能支持高并发而设计的新的实现。 ConcurrentHashMap的类结构 public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements C......

千古一梦888 ⋅ 12分钟前 ⋅ 0

微服务 WildFly Swarm 简介

我们将看到的最后一个Java微服务框架是一个相对较新的场景,它利用了 JBoss WildFly 应用服务器中已试过且受信任的 JavaEE 功能。WildFly Swarm 是 WildFly 应用服务器的一个完整的拆下来的组...

woshixin ⋅ 16分钟前 ⋅ 0

android apk 瘦身

头条APK瘦身之路 随着版本迭代,功能增加安装包体积也会慢慢增大。 今日头条576版本APK达到了25M,通过一系列的优化,到目前的607版本为12M。本文主要是介绍头条APK瘦身中用到的一些方法。 ...

GoldenVein ⋅ 20分钟前 ⋅ 1

mac机器学习开发环境部署及helloworld

一、下载并安装Anaconda2.7 https://repo.anaconda.com/archive/Anaconda2-5.2.0-MacOSX-x86_64.pkg 路径:/Users/shijun/anaconda2 二、运行Anaconda Navigator -> Environments -> base(ro......

八戒八戒八戒 ⋅ 31分钟前 ⋅ 0

关于日常开发的经验总结(Java),持续更新中

常量尽量使用枚举来表示,这样表现力会很强,因为枚举比一个常量类要有更多的扩展性 方法的入参和出参尽量不要使用Map,因为Map会让调用者感到迷惑,他不知道你里面装的什么,面向对象的开发...

小99 ⋅ 32分钟前 ⋅ 0

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 32分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部