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(); // 失能全局中断响应

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[AutoSar]BSW_OS 07 Autosar OS_时间保护

一、 目录 一、关键词平台说明一 时间保护的概念 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC) >>>>>回到总目录<<<<<…

【设计模式】什么是外观模式并给出例子!

什么是外观模式&#xff1f; 外观模式是一种结构型设计模式&#xff0c;主要用于为复杂系统、库或框架提供一种简化的接口。这种模式通过定义一个包含单个方法的高级接口&#xff0c;来隐藏系统的复杂性&#xff0c;使得对外的API变得简洁并易于使用。 为什么要使用外观模式&a…

详解IPV6地址

华子目录 IPV6IPV4和IPV6的报头IPV6的地址组成IPV6地址写法IPV6地址分类单播地址多播地址IPV6下的组播MAC地址 协议ICMPV61.PMTU2.NDP3.前缀通告auto-config 配置静态RIPNGOSPFV3BGP4 解决IPV4和IPV6兼容问题 (共存问题)普通tunnel6to4 tunnel双栈 IPV6 特征&#xff08;升级点…

Lattice Diamond软件下载

Lattice Diamond软件官方下载方法 对于电子设计中的很多开发软件&#xff0c;下载渠道有很多&#xff0c;但是安装包的下载&#xff0c;任何时候在官网上都可以可靠的找到资源并进行下载&#xff0c;因此这里对Diamond软件的下载&#xff0c;介绍官网的下载方法。 1 Lattice官…

渣土车识别摄像机

渣土车识别摄像机是一种应用于城市管理和交通监控领域的先进技术设备。它通过摄像头实时捕捉道路上行驶的车辆画面&#xff0c;并利用先进的图像识别和算法分析技术对渣土车进行准确识别。渣土车识别摄像机的设计需要兼顾高清晰度、高速度、大容量等特点&#xff0c;以满足实际…

大数据导论(3)---大数据技术

文章目录 1. 大数据技术概述2. 数据采集与预处理2.1 数据采集2.2 预处理 3. 数据存储和管理3.1 分布式基础架构Hadoop3.2 分布式文件系统HDFS3.3 分布式数据库HBase3.4 非关系型数据库NoSQL 4. 数据可视化与保护 1. 大数据技术概述 大数据技术主要包括数据采集与预处理、数据存…

字节跳动 ByteHouse 云原生之路 – 计算存储分离与性能优化

01 起源 ByteHouse 的故事从字节跳动对于先进数据处理和分析的需求开始&#xff0c;这一需求随着公司业务规模的迅速扩张而日益增长&#xff0c;起源是对开源数据库管理系统 ClickHouse 的改造和增强。面对数据处理的高延迟、大规模数据操作的复杂性以及数据存储和处理成本的上…

Ubuntu 在更新内核后 Virtual Box 不能为虚拟电脑打开一个新任务

前言 我也不知道啥时候自动给我更新了内核&#xff0c;重启电脑之后我的内核升级成6.5.0-14-generic&#xff0c;导致Virtual Box无法找到内核文件。 解决方法 方法1 sudo apt update sudo apt install linux-headers-generic build-essential dkms sudo apt remove virtua…

go 语言爬虫库goquery介绍

文章目录 爬虫介绍goquery介绍利用NewDocumentFromReader方法获取主页信息Document介绍通过查询获取文章信息css选择器介绍goquery中的选择器获取主页中的文章链接 爬取总结 爬虫介绍 爬虫&#xff0c;又称网页抓取、网络蜘蛛或网络爬虫&#xff0c;是一种自动浏览互联网并从网…

推荐两个工具:DeepSpeed-FastGen和DataTrove

DeepSpeed-FastGen 通过 MII 和 DeepSpeed-Inference 加速LLM生成文本 仓库地址&#xff1a;https://github.com/microsoft/DeepSpeed/tree/master/blogs/deepspeed-fastgen GPT-4 和 LLaMA 等大型语言模型 (LLM) 已成为服务于各个级别的人工智能应用程序的主要工作负载。从一…

使用OpenCV绘制图形

使用OpenCV绘制图形 绘制黄色的线&#xff1a; # 绘制一个黑色的背景画布 canvas np.zeros((300, 300, 3), np.uint8) # 在画布上&#xff0c;绘制一条起点坐标为(150, 50)、终点坐标为(150, 250)&#xff0c;黄色的&#xff0c;线条宽度为20的线段 canvas cv2.line(canvas,…

网易真的大规模裁员吗?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 以前互联网公司裁员&#xff0c;大家不紧张&#xff0c;因为容易找工作&#xff0c;而现在不知道怎么回事&#xff0c;只要以提高某某公司裁员&#xff0c;这就能迅速登上热榜。 这不&#xff0c;最近网传网易裁员1…

web架构师编辑器内容-编辑器组件图层面板功能开发-锁定隐藏、键盘事件功能的开发

我们这一部分主要是对最右侧图层面板功能进行剖析&#xff0c;完成对应的功能的开发: 每个图层都对应编辑器上面的元素&#xff0c;有多少个元素就对应多少个图层&#xff0c;主要的功能如下&#xff1a; 锁定功能&#xff1a;点击锁定&#xff0c;在编辑器中没法编辑对应的组…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-6 fieldset

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>fieldset</title> </head><body> <form action"#"><fieldset><legend>学生信息</legend>姓名&#xff1a;&…

基于python旅游推荐系统 协同过滤算法 爬虫 Echarts可视化 Django框架(源码)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

2024年一整年的考试报名时间表不许再错过考试啦

每个大学生都不能错过的超全考试报名表&#xff01; 有了它谁还会再错过考试哇&#xff01;&#xff01;&#xff01; 1月报名 专转本考试 12月底-1月报名 卫生资格考试 1月中旬报名 教师资格证笔试 1月报名 各省省考 2月报名 医师资格考试 2月报名 初级高级会计 2月报名 计算机…

专业137总分439东南大学920专业基础综合考研经验电子信息与通信电路系统芯片

我本科是南京信息工程大学&#xff0c;今年报考东南大学信息学院&#xff0c;成功逆袭&#xff0c;专业137&#xff0c;政治69&#xff0c;英语86&#xff0c;数一147&#xff0c;总分439。以下总结了自己的复习心得和经验&#xff0c;希望对大家复习有一点帮助。啰嗦一句&…

NLP论文阅读记录 - 2021 | WOS 基于多头自注意力机制和指针网络的文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.问题定义和解决问题的假设问题定义解决问题的假设 三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4…

[ VSCode ]command ‘python.setInterpreter‘ not found

ctrlshiftP 想用Python选择解释器 却出现如下报错&#xff0c;十分苦恼 开始解决问题 首先&#xff0c; 然后&#xff0c; 这里的路径是您安装在您电脑的路径&#xff0c;我的是如下 最后重启vscode或者电脑就好啦

vue.js js 雪花算法ID生成 vue.js之snowFlake算法

随着前端业务越来越复杂&#xff0c;自定义表单数据量比较大&#xff0c;每条数据的id生成则至关重要。想到前期IOS中实现的雪花算法ID&#xff0c;照着其实现JS版本&#xff0c;供大家学习参考。 一、库的建立引入 在你项目中创建一个snowFlake.js的文件&#xff1a;拷贝以下…