GD32 MCU是如何进入中断函数的

用过GD32 MCU的小伙伴们都知道,程序是顺序执行的,但当有中断来的时候程序会跳转到中断函数,执行完中断函数后程序又继续回到原来的位置继续执行,那么你们知道MCU是如何找到中断函数入口的吗?

今天我们就以GD32F303系列的EXTI0中断来描述下MCU是如何进入中断的。

首先来看一个简单的代码(以Keil为开发环境):

这段程序初始化了两个LED灯,并将一个按键设置为中断模式,这里用的是PA0,所以中断号也为0,即EXTI0。

再来看一下中断函数:

中断函数也很简单,当有中断发生的时候,去翻转一个LED灯状态。

好,我们通过map文件看下这个中断函数的地址在哪里(不会的小伙伴可以看看前面的视频——《如果查看GD32 Keil和IAR工程的map文件》哦):

没错,中断函数就保存在0x08000193开始的flash地址中,且该函数占用了24个byte的空间。

正常情况下,程序是不会跳转到这个地址去执行的,那为什么中断信号一来,程序就直接跳转过去了呢?

下面重点来了,小伙伴们要仔细听哦。

我们来看下GD32F30x系列的启动文件:

其中用汇编写了一段代码:使用DCD指令(DCD指令是为特定的数据分配地址)将栈顶指针__initial_sp和中断函数分配到flash最开始的地址中去,我们看下flash中的数据:

用红框标注的数据就是程序的栈顶指针,再看下第23个地址也就是0x08000058保存的数据,就是0x08000193,刚好就是中断函数EXTI0_IRQHandler的入口。

实际上,flash最开始保存的这一段数据有个专有名词——中断向量表,可以通过GD32F30x的用户手册查到:

注意:因为向量编号是从0开始的(0号即为栈顶指针),所以EXTI0的中断编号为22,也就存在flash第23个地址(按字对齐)中。

当有EXTI0中断发生,MCU会知道是22号中断来了,内部总线就会去查flash最开始地址中的中断向量表,找到第23个地址(0x08000058),并取得里面的数据也就是中断函数的入口,然后就跳转到中断函数中执行程序了。

本期视频内容会有点绕,小伙伴们可以多看几遍哦,了解MCU是如何进入中断函数对于平时的开发是非常有用的,如果有不懂的小伙伴,欢迎评论区留言讨论哦。

更多GD32 MCU相关咨询:https://www.gd32bbs.com/

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

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

相关文章

JavaScript进阶之作用域解构箭头函数

目录 一、作用域1.1 局部作用域1.2 全局作用域1.3 作用域链1.4 垃圾回收机制1.5 闭包1.6 变量提升 二、函数进阶2.1 函数提升2.2 函数参数2.3 箭头函数(重要) 三、解构赋值3.1 数组解构3.2 对象解构(重要重要) 一、作用域 1.1 局…

【BUG】已解决:ModuleNotFoundError: No module named‘ pip‘

已解决:ModuleNotFoundError: No module named‘ pip‘ 目录 已解决:ModuleNotFoundError: No module named‘ pip‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…

SpringCloud--负载均衡

目录 前言 一.负载均衡的引入 1.1问题引入 1.2代码修改实现 二.负载均衡介绍 2.1实现负载均衡 2.2负载均衡策略 2.3LoadBalancer 原理 学习专栏:http://t.csdnimg.cn/tntwg 前言 在前面的Eureka当中,我们虽然实现了从注册中心中获取url&#xf…

桌面小宠物发布一周,第一次以独立开发者的身份赚到了100块

收入数据(AppStore一周收入统计) AppStore付费工具榜第七 应用简介 桌面新宠(NewPet),是我耗时半年开发的一款桌面宠物。我是被 QQ 宠物影响的那批人,上学时天天给 QQ 宠物喂食,很可惜它现在不在了。所以,我开发的初衷是想要在电…

Mysql-查询

1.基本查询 //查询所有内容 select * from 表名;//查询指定字段 select 字段1,字段2,字段3.....from 表名;//查询时给字段起别名 select 字段1 as 别名1 , 字段2 as 别名2 ... from 表名;//去重查询 select distinct 字段列表 from 表名; …

解决显存不足问题:深度学习中的 Batch Size 调整【模型训练】

解决显存不足问题:深度学习中的 Batch Size 调整 在深度学习训练中,显存不足是一个常见的问题,特别是在笔记本等显存有限的设备上。本文将解释什么是 Batch Size,为什么调整 Batch Size 可以缓解显存不足的问题,以及调…

杰发科技AC7840——SENT数据解析及软件Sent发送的实现

0. 测试环境 AC7840官方Demo板; 图莫斯0503 DSlogic U2Basic 使用引脚 输出脚:PB1 时钟:PB2,其他引脚可以不初始化,不接线 1. 数据解析 以下是SENT数据的格式(1tick以3us为例)&#…

数据库中的事务

一、理解事务 1、本质 事务由一组DML语句组成,这一组语句要么全部成功,要么全部失败。在逻辑上,事务就是一组sql语句,但在实际中,公共的数据库一定会高并发地接受各种事务的请求,所以一个事务要有4个属性…

国内访问Docker Hub慢问题解决方法

在国内访问Docker Hub时可能会遇到一些困难,但幸运的是,有多种解决方案可以帮助你顺利下载Docker镜像。以下是一些有效的解决方案: 配置Docker镜像源:你可以通过配置Docker的daemon.json文件来使用国内镜像源,比如DaoC…

SpringCloud极限速通版

1.SpringCloud概述 1.1 什么是微服务 1.1.1 单体架构 业务所有功能都打包在一个war包或jar包,这种方式就是单体架构,单体架构的应用就是单体应用。这种架构开发简单,部署简单,一个项目包含所有功能;省去了多个项目之…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(七)-广播远程识别码(Broadcast Remote ID)

目录 引言 5.5 广播远程识别码(Broadcast Remote ID) 5.5.1 使用PC5的广播远程识别码 5.5.2 使用MBS的广播远程识别码 引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及…

Sui主网升级至V1.28.4版本

Sui主网现已升级至V1.28.4版本,同时Sui协议升级至51版本。其他升级要点如下所示: #18536 将所有可能的connect_lazy错误推迟到请求时间处理。 #18206 明确将每轮领导者人数设置为1,以支持Mysticeti提交。 #17868 引入新功能标志和协议配…

MyBatis:高级标签使用技巧的详细指南

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、简述 MyBatis 是一个优秀的持久层框架,提供了简单和灵活的 SQL 映射功能。除了基础的查询、插入、更新和删除操作外,MyBatis 还提供了一些高级标签,帮…

SQL 简单查询

目录 一、投影查询 1、指定特定列查询 2、修改返回列名查询 3、计算值查询 二、选择查询 1、使用关系表达式 2、使用逻辑表达式 3、使用 BETWEEN关键字 4、使用 IN关键字 5、使用 LIKE关键字 6、使用 IS NULL/ NOT NULL关键字 7、符合条件查询 三、聚合函数查询 一…

Docker_一刀流_好用、好玩还方便_(持续更新)

Docker 简介一、镜像和容器的概念镜像(Image)容器(Container)镜像和容器的关系 宿主机二、Dockerfile2.1 什么是Dockerfile2.2 Dockerfile中的常见指令2.3Dockerfile实例2.4 详细扩展 三、镜像3.1 镜像的创建3.2对于镜像的一些常用…

知识表示 | 利用 Protégé 软件构建小型本体

Hi,大家好,我是半亩花海。本项目旨在利用 Protg 软件构建小型本体,探索本体建模的实际应用,特别是应用本体与上层本体之间的关系继承与映射。我们将重点理解应用本体如何继承上层本体的关系,以及如何通过推理机制揭示实…

一起搭WPF界面之MVVM架构的简单搭建

一起搭WPF界面之MVVM架构的简单搭建 1 前言2 创建项目2.1新建项目2.2WPF2.3创建完成 3 MVVM划分3.1 划分逻辑3.2文件夹创建3.3文件创建3.3.1 Views——可在主界面的基础上,划分多个用户控件模块3.3.2 ViewModels——创建数据结构存放的cs文件3.3.3 Models——创建处…

网络安全入门教程(非常详细)从零基础入门到精通_网路安全 教程

前言 1.入行网络安全这是一条坚持的道路,三分钟的热情可以放弃往下看了。2.多练多想,不要离开了教程什么都不会了,最好看完教程自己独立完成技术方面的开发。3.有时多百度,我们往往都遇不到好心的大神,谁会无聊天天给…

用神经网络求解微分方程

微分方程是物理科学的主角之一,在工程、生物、经济甚至社会科学中都有广泛的应用。粗略地说,它们告诉我们一个量如何随时间变化(或其他参数,但通常我们对时间变化感兴趣)。我们可以了解人口、股票价格,甚至…