Cortex-M3/M4内核中断及HAL库函数详解(1):中断相关寄存器

0 工具准备

Keil uVision5
Cortex M3权威指南(中文)
Cortex M3与M4权威指南
stm32f407的HAL库工程
STM32F4xx中文参考手册

1 NVIC相关寄存器介绍

在Cortex-M3/M4内核上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。其中,Cortex-M3/M4内核包括15个系统异常,大部分系统异常的中断优先级都可以设置。外部中断由厂商定义,以stm32f407为例,它一共有82个外部中断。
(1)系统异常
在这里插入图片描述
(2)外部中断(部分)
在这里插入图片描述

在这里插入图片描述

1.1 系统异常寄存器

(1)SHP(系统异常优先级)寄存器
在这里插入图片描述
系统异常优先级寄存器共有12个,可以用来设置优先级可配置的系统异常。
(2)SHCSR(系统异常控制和状态)寄存器
在这里插入图片描述
系统异常控制和状态寄存器可以设置或者读取当前系统异常是否使能,写1使能系统异常,读取值为1表示系统异常使能。

1.2 外部中断寄存器

NVIC属于M4的内核部分,在stm32f407工程的CMSIS->Include->core_cm4.h内可以看到NVIC寄存器的定义:

#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
typedef struct
{__IOM uint32_t ISER[8U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */uint32_t RESERVED0[24U];__IOM uint32_t ICER[8U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */uint32_t RSERVED1[24U];__IOM uint32_t ISPR[8U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */uint32_t RESERVED2[24U];__IOM uint32_t ICPR[8U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */uint32_t RESERVED3[24U];__IOM uint32_t IABR[8U];               /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */uint32_t RESERVED4[56U];__IOM uint8_t  IP[240U];               /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */uint32_t RESERVED5[644U];__OM  uint32_t STIR;                   /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */
}  NVIC_Type;

上述寄存器的详细含义如下:
(1)ISER(中断使能)寄存器
中断使能寄存器一共有8个,每个寄存器包含32个使能位,总共可以控制256个中断使能状态,实际上只用到了240个(F407只用到了82个)。在《Cortex M3权威指南(中文)》中的描述如下:
在这里插入图片描述
中断对应使能位写1则使能中断,写0无任何动作,读对应位可以获取当前设置值。在《Cortex M3与M4权威指南》中的描述如下:
在这里插入图片描述

(2)ICER(中断失能)寄存器
中断失能寄存器一共有8个,每个寄存器包含32个失能位,总共可以控制256个中断失能状态,实际上只用到了240个(F407只用到了82个)。在《Cortex M3权威指南(中文)》中的描述如下:
在这里插入图片描述
中断对应失能位写1则失能中断,写0无任何动作,读对应位可以获取当前设置值。在《Cortex M3与M4权威指南》中的描述如下:
在这里插入图片描述
(3)ISPR(中断挂起)寄存器
中断挂起寄存器一共有8个,每个寄存器包含32个挂起位,总共可以控制256个中断挂起状态,实际上只用到了240个(F407只用到了82个)。在《Cortex M3权威指南(中文)》中的描述如下:
在这里插入图片描述
中断对应挂起位写1则挂起中断,写0无任何动作,读对应位可以获取当前设置值。在《Cortex M3与M4权威指南》中的描述如下:
在这里插入图片描述

(4)ICPR(中断解挂)寄存器
中断解挂寄存器一共有8个,每个寄存器包含32个解挂位,总共可以控制256个中断解挂状态,实际上只用到了240个(F407只用到了82个)。在《Cortex M3权威指南(中文)》中的描述如下:
在这里插入图片描述
中断对应解挂位写1则挂起中断,写0无任何动作,读对应位可以获取当前中断挂起状态。在《Cortex M3与M4权威指南》中的描述如下:
在这里插入图片描述
(5)IABR(中断激活状态)寄存器
中断激活寄存器一共有8个,每个寄存器包含32个激活位,总共可以控制256个中断激活状态,实际上只用到了240个(F407只用到了82个)。在《Cortex M3权威指南(中文)》中的描述如下:
在这里插入图片描述
中断激活状态寄存器在处理器执行了中断对应的ISR(中断服务函数)第一条指令后,会被设置为1,只有当ISR返回时才会硬件清零。
中断激活状态寄存器是只读的,值为1时表示中断被激活,值为0时表示中断未激活。在《Cortex M3与M4权威指南》中的描述如下:
在这里插入图片描述

(6)IP(中断优先级)寄存器
中断优先级寄存器一共有240个,每个寄存器有8bit可以设置中断的优先级,总共可以设置240个中断的优先级(F407只用到了82个)。在《Cortex M3权威指南(中文)》中的描述如下:
在这里插入图片描述
在《Cortex M3与M4权威指南》中的描述如下:
在这里插入图片描述

(7)STIR(软件触发中断)寄存器
软件触发中断寄存器有1个,大小为32bit,可以使用软件触发任意中断。在《Cortex M3权威指南(中文)》中的描述如下:
在这里插入图片描述
当我们需要触发某个中断时,只需要将目标中断的序号写入到该寄存器即可,随后ISPR中断挂起寄存器对应位置1,等到更高优先级的中断执行完毕则会执行软件触发的中断。关于stm32f407中断序号在《STM32F4xx中文参考手册》描述如下:
在这里插入图片描述
也可以直接打开HAL库的中断源头文件定义(见stm32f407xx.h):
在这里插入图片描述
(8)中断优先级分组寄存器
在这里插入图片描述
中断优先级分组寄存器在《Cortex M3权威指南(中文)》中的描述如下:
在这里插入图片描述
可以看到,一共有3bit用于设置优先级分组,也就是0-7。stm32f407只用到了5组,优先级分组0、1、2、3、4的含义如下:
在这里插入图片描述
(10)PRIMASK中断屏蔽寄存器
在这里插入图片描述
如果BASEPRI寄存器的值为0,可以使用以下语句快速开/关全局中断响应:

__enable_irq(); // 使能全局中断响应
__disable_irq(); // 失能全局中断响应

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242310.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于C语言整型提升的讲解

目录 1.什么是整型提升 2.整型提升的意义 3.整型提升是怎么提升的 4.整型提升的实例 1.什么是整型提升 C语言中的整型算术运算总是以缺省&#xff08;默认&#xff09;整型类型的精度来进行的。为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前会被转换…

3d渲染软件有哪些?3d云渲染推荐

目前市面上的3D渲染软件非常多&#xff0c;不同的建模软件都有自己的渲染方式&#xff0c;根据所处行业的不同和项目需要&#xff0c;设计师可以选择不同的软件帮助展示最终效果。 主流的渲染软件有&#xff1a;VRay和Corona&#xff1a;一般用于室内效果图渲染&#xff0c;与3…

Git学习笔记(第5章):Git团队协作机制

目录 5.1 团队内协作 5.2 跨团队协作 Git进行版本控制都是在本地库操作的。若想使用Git进行团队协作&#xff0c;就必须借助代码托管中心。 5.1 团队内协作 问题引入&#xff1a;成员1&#xff08;大佬&#xff09;利用Git在宿主机上初始化本地库&#xff0c;完成代码的整体…

MFC 序列化机制

目录 文件操作相关类 序列化机制相关类 序列化机制使用 序列化机制执行过程 序列化类对象 文件操作相关类 CFile&#xff1a;文件操作类&#xff0c;封装了关于文件读写等操作&#xff0c;常见的方法&#xff1a; CFile::Open&#xff1a;打开或者创建文件CFile::Write/…

经典目标检测YOLO系列(二)YOLOV2的复现(1)总体网络架构及前向推理过程

经典目标检测YOLO系列(二)YOLOV2的复现(1)总体网络架构及前向推理过程 和之前实现的YOLOv1一样&#xff0c;根据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;在不脱离YOLOv2的大部分核心理念的前提下&#xff0c;重构一款较新的YOLOv2检测器&#xff0c;来对YOLOV2有…

k8s资源介绍

Kubernetes架构图 Kubernetes系统用于管理分布式节点集群中的微服务或容器化应用程序&#xff0c;并且其提供了零停机时间部署、自动回滚、缩放和容器的自愈&#xff08;其中包括自动配置、自动重启、自动复制的高弹性基础设施&#xff0c;以及容器的自动缩放等&#xff09;等…

SDL2 连续帧图像显示

QT使用SDL多窗口显示视频&#xff08;linux&#xff0c;ubuntu&#xff09;_linux qt sdl-CSDN博客 QT使用SDL播放YUV视频 - C - QT SDL调用OPENGL渲染图像 - C - 心得 C 使用SDL显示RGB图像数据_c sdl-CSDN博客 SDL库入门&#xff1a;掌握跨平台游戏开发和多媒体编程_sdl开…

【Python学习】Python学习21- 正则表达式(1)

目录 【Python学习】Python学习21- 正则表达式&#xff08;1&#xff09; 前言re.match函数实例 re.search方法re.match与re.search的区别参考 文章所属专区 Python学习 前言 本章节主要说明Python的正则表达式。 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的…

文心一言使用分享

ChatGPT 和文心一言哪个更好用&#xff1f; 一个直接可以用&#xff0c;一个还需要借助一些工具&#xff0c;还有可能账号会消失…… 没有可比性。 通用大模型用于特定功能的时候需要一些引导技巧。 import math import time def calculate_coordinate(c, d, e, f, g, h,…

Debian 10.13.0 安装图解

引导和开始安装 这里直接回车确认即可&#xff0c;选择图形化安装方式。 选择语言 这里要区分一下&#xff0c;当前选中的语言作为安装过程中安装器所使用的语言&#xff0c;这里我们选择中文简体。不过细心的同学可能发现&#xff0c;当你选择安装器语言之后&#xff0c;后续安…

WebDriverWait太强大

selenium webdriver及wait 1 implicitly包打天下2 Linkedin无法登录返回值很乱&#xff0c;怎么破&#xff1f; 1 implicitly包打天下 有了implicitly之后&#xff0c;基本上不再关注网速之类的影响。 self.driver.implicitly_wait(511)2 Linkedin无法登录返回值很乱&#xf…

【C语言编程之旅 6】刷题篇-for循环

第1题 解析 思路&#xff1a; 两个循环进行控制 外层循环控制打印多少行 内部循环控制每行打印多少个表达式以及表达式内容&#xff0c; 比较简单&#xff0c;具体参考代码 #include <stdio.h> int main() {int i 0;//控制行数for(i1; i<9; i){//打印每一行内容&am…

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(20)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置&#xff08;19&#xff09; 2.4 PCI总线的配置 PCI总线定义了两类配置请求&#xff0c;一个是Type 00h配置请求&#xff0c;另一个是Type 01h配置请求。PCI总线使用这些配置请求…

k8s 使用cert-manager证书管理自签

个人建议使用安装更快&#xff0c;比helm快&#xff0c;还要等待安装crd kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml#官网 https://cert-manager.io/docs/installation/kubectl/#创建自签的ClusterIssuer c…

Linux设备管理模型-02:sysfs

文章目录 sysfs1 使用sysfs控制GPIO2 sysfs编程2.1 完善sysfs属性文件的读写操作 上一篇文: 设备管理模型中的基础数据结构 sysfs sysfs是用于导出内核对象的文件系统&#xff0c;它是一个基于ram的文件系统&#xff0c;最初基于ramfs。 sysfs通常挂载在/sys目录下。它提供了一…

【 Qt 快速上手】-②- Qt 环境搭建

文章目录 1. Qt 开发工具概述1.1 Qt Creator 介绍1.2 Visual Studio 介绍1.3 Eclipse 介绍 2. Qt SDK 的下载与安装2.1 Qt SDK 的下载2.2 Qt SDK 的安装2.3 验证 Qt SDK 安装是否成功2.4 Qt 环境变量配置 1. Qt 开发工具概述 Qt 开发环境需要安装三个部分&#xff1a; C编译器…

分布式系统——树状算法

1 树状算法的基本理论 树算法常用于在分布式系统中实现广播操作&#xff0c;这里您提供了一些基本定义和一个引理关于广播操作的消息复杂度和时间复杂度的下界。 1.1 广播定义 广播操作是由单个处理器&#xff08;源节点&#xff09;发起的&#xff0c;其目的是向系统中的所有…

systemverilog/verilog文件操作

1、Verilog文件操作 Verilog具有系统任务和功能,可以打开文件、将值输出到文件、从文件中读取值并加载到其他变量和关闭文件。 1.1 、Verilog文件操作 1.1.1、打开和关闭文件 module tb; // 声明一个变量存储 file handler integer fd; initial begin // 以写权限打开一个文…

互联网加竞赛 基于机器视觉的手势检测和识别算法

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng…

【react】创建react项目+项目结构

使用create-react-app快速搭建开发环境 create-react-app是一个快速创建React开发环境的工具&#xff0c;底层由Webpack构建&#xff0c;封装了配置细节 npx create-react-app react_hm执行命令后开始创建 创建好执行cd react_hm npm start 当看到webpack compiled successfu…