0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

聚沃科技 2024-01-30 09:45 次阅读

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

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

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

wKgaomW4VDGAFyaiAAAfPibnKDk317.png

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

再来看一下中断函数:

wKgaomW4VDaAdupXAAAWnoUOW2g644.png

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

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

wKgZomW4VDqABPyOAACQCbjy4Ek810.png

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

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

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

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

wKgaomW4VD6ADS2fAADLoXDIfoQ299.png

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

wKgZomW4VEOAD9rvAAAi9QvSgto772.png

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

wKgaomW4VEiAaBuQAABOuZMOjhw295.png

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

wKgZomW4VEyAHXe6AAF0WLqIdDU814.png

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620834
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343620
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288438
  • GD32
    +关注

    关注

    7

    文章

    333

    浏览量

    23740
收藏 人收藏

    评论

    相关推荐

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

    单片机mcu
    聚沃科技
    发布于 :2024年01月31日 09:49:37

    GD32 MCU移植

    gd32是一款国产单片机。该芯片在很多方面和STM32有异曲同工之处。资料不是很多! GD32在外设方面、和STM32没有多大区别。 只是需要注意资源的引脚分配。虽然和STM32使用方式一样、但是也存在GD自带的一些设计理念。
    发表于 03-23 13:40

    GD32的外部中断介绍

    起因介绍因为公司之前用GD32F4和周立功的CSM300产品的一个SPI转CAN模块,做了个产品,其在收到CAN帧时INT引脚会为由高电平转为低电平。需要做一个中断接收的程序防止丢包。GD32的外部
    发表于 08-16 08:36

    GD32MCU介绍

    吧,但是基本上有99%,有部分寄存器比特位存在区别。另外兆芯的手册写的实在是不够精确,很多时候出现一种情况就是,我命名特么的用的是GD32MCU,写个驱动还要参考ST的手册?!真是见了鬼了。比如USB的这个寄存器,兆芯的描述简直了。很多时候吧,真的想支持国产,奈何国产芯
    发表于 11-01 06:03

    GD32 MCU原理及固件库开发指南》 + 初读感悟

    库开发能够避免每次操作寄存器时去查芯片的应用手册,这样能很好地提高开发效率。GD32 MCU原理固件库开发指南这本书它详细描述了基本所有外设的底层驱动程序和API接口,可以让我快速地明白各个API函数
    发表于 03-31 22:11

    GD32 MCU原理及固件库开发指南》+读后感

    、调试工具,再到库函数的使用、各个外设的程序实现,不仅有原理的介绍,还有实践的历程。这本书聚焦在GD32 MCU基本原理和固件库上,重点在于对固件库API的介绍,供了大量实例代码,这些代码都可以直接编译
    发表于 06-06 21:52

    GD32系列外部中断

    起因介绍因为公司之前用GD32F4和周立功的CSM300产品的一个SPI转CAN模块,做了个产品,其在收到CAN帧时INT引脚会为由高电平转为低电平。需要做一个中断接收的程序防止丢包。GD32的外部
    发表于 11-24 17:06 14次下载
    <b class='flag-5'>GD32</b>系列外部<b class='flag-5'>中断</b>

    推出采用GD32 RISC-V的MCU

    推出采用GD32 RISC-V的MCU ppt分享
    发表于 07-14 17:15 0次下载

    兆易创新GD32 MCU选型手册,适用于GD32全系列MCU

    兆易创新GD32MCU选型手册,适用于GD32全系列MCUGD32MCU选型手册,适用于GD32全系列MCU
    发表于 10-19 17:26 44次下载

    GD32如何配置中断优先级分组以及中断优先级

    使用GD32 MCU的过程中,大家可能会有以下疑问:中断优先级如何配置和使用?
    的头像 发表于 01-10 10:30 1113次阅读
    <b class='flag-5'>GD32</b>如何配置<b class='flag-5'>中断</b>优先级分组以及<b class='flag-5'>中断</b>优先级

    你了解GD32 MCU的命名规则吗

    下面为大家介绍GD32 MCU的通用命名规则,以GD32F303ZGT6为例,其中,GD32代表GD32
    的头像 发表于 01-13 09:38 1530次阅读
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的命名规则吗

    GD32 MCU启动后如何运行到main函数

    GD32 MCU启动后如何运行到main函数入口?你是否也有这样的疑虑。在执行到main函数之前MCU干了哪些事情呢?下面为大家解答。
    的头像 发表于 01-15 10:00 455次阅读
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>启动后如何运行到main<b class='flag-5'>函数</b>

    GD32 MCU的选项字节是什么?

    GD32 MCU的选项字节是什么,有什么功能呢?选项字节被误篡改如何回复?
    的头像 发表于 01-17 09:42 471次阅读
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的选项字节是什么?

    不同型号的GD32 MCU如何区分?

    大家是否碰到过以下应用场景:同一套软件代码希望跑在不同型号的GD32 MCU中,但有些地方需要根据MCU型号进行调整?或者上位机或其他MCUGD3
    的头像 发表于 01-27 09:32 343次阅读
    不同型号的<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何区分?

    你了解GD32 MCU上下电要求吗

    你了解GD32 MCU的上下电要求吗?MCU的上下电对于系统的稳定运行非常重要。
    的头像 发表于 02-02 09:36 342次阅读
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>上下电要求吗