0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GD32 MCU是如何進(jìn)入中斷函數(shù)的

聚沃科技 ? 2024-01-30 09:45 ? 次閱讀

用過(guò)GD32 MCU的小伙伴們都知道,程序是順序執(zhí)行的,但當(dāng)有中斷來(lái)的時(shí)候程序會(huì)跳轉(zhuǎn)到中斷函數(shù),執(zhí)行完中斷函數(shù)后程序又繼續(xù)回到原來(lái)的位置繼續(xù)執(zhí)行,那么你們知道MCU是如何找到中斷函數(shù)入口的嗎?

今天我們就以GD32F303系列的EXTI0中斷來(lái)描述下MCU是如何進(jìn)入中斷的。

首先來(lái)看一個(gè)簡(jiǎn)單的代碼(以Keil為開(kāi)發(fā)環(huán)境):

wKgaomW4VDGAFyaiAAAfPibnKDk317.png

這段程序初始化了兩個(gè)LED燈,并將一個(gè)按鍵設(shè)置為中斷模式,這里用的是PA0,所以中斷號(hào)也為0,即EXTI0。

再來(lái)看一下中斷函數(shù):

wKgaomW4VDaAdupXAAAWnoUOW2g644.png

中斷函數(shù)也很簡(jiǎn)單,當(dāng)有中斷發(fā)生的時(shí)候,去翻轉(zhuǎn)一個(gè)LED燈狀態(tài)。

好,我們通過(guò)map文件看下這個(gè)中斷函數(shù)的地址在哪里(不會(huì)的小伙伴可以看看前面的視頻——《如果查看GD32 Keil和IAR工程的map文件》哦):

wKgZomW4VDqABPyOAACQCbjy4Ek810.png

沒(méi)錯(cuò),中斷函數(shù)就保存在0x08000193開(kāi)始的flash地址中,且該函數(shù)占用了24個(gè)byte的空間。

正常情況下,程序是不會(huì)跳轉(zhuǎn)到這個(gè)地址去執(zhí)行的,那為什么中斷信號(hào)一來(lái),程序就直接跳轉(zhuǎn)過(guò)去了呢?

下面重點(diǎn)來(lái)了,小伙伴們要仔細(xì)聽(tīng)哦。

我們來(lái)看下GD32F30x系列的啟動(dòng)文件:

wKgaomW4VD6ADS2fAADLoXDIfoQ299.png

其中用匯編寫(xiě)了一段代碼:使用DCD指令(DCD指令是為特定的數(shù)據(jù)分配地址)將棧頂指針__initial_sp和中斷函數(shù)分配到flash最開(kāi)始的地址中去,我們看下flash中的數(shù)據(jù):

wKgZomW4VEOAD9rvAAAi9QvSgto772.png

用紅框標(biāo)注的數(shù)據(jù)就是程序的棧頂指針,再看下第23個(gè)地址也就是0x08000058保存的數(shù)據(jù),就是0x08000193,剛好就是中斷函數(shù)EXTI0_IRQHandler的入口。

wKgaomW4VEiAaBuQAABOuZMOjhw295.png

實(shí)際上,flash最開(kāi)始保存的這一段數(shù)據(jù)有個(gè)專(zhuān)有名詞——中斷向量表,可以通過(guò)GD32F30x的用戶(hù)手冊(cè)查到:

wKgZomW4VEyAHXe6AAF0WLqIdDU814.png

注意:因?yàn)橄蛄烤幪?hào)是從0開(kāi)始的(0號(hào)即為棧頂指針),所以EXTI0的中斷編號(hào)為22,也就存在flash第23個(gè)地址(按字對(duì)齊)中。

當(dāng)有EXTI0中斷發(fā)生,MCU會(huì)知道是22號(hào)中斷來(lái)了,內(nèi)部總線就會(huì)去查flash最開(kāi)始地址中的中斷向量表,找到第23個(gè)地址(0x08000058),并取得里面的數(shù)據(jù)也就是中斷函數(shù)的入口,然后就跳轉(zhuǎn)到中斷函數(shù)中執(zhí)行程序了。

本期視頻內(nèi)容會(huì)有點(diǎn)繞,小伙伴們可以多看幾遍哦,了解MCU是如何進(jìn)入中斷函數(shù)對(duì)于平時(shí)的開(kāi)發(fā)是非常有用的,如果有不懂的小伙伴,歡迎評(píng)論區(qū)留言討論哦。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631989
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16885

    瀏覽量

    349920
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302039
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24111
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32 MCU 入門(mén)教程】GD32 MCU 常見(jiàn)外設(shè)介紹(12)FMC 模塊介紹

    閃存控制器(FMC),提供了片上閃存需要的所有功能。FMC 也提供了頁(yè)擦除,整片擦除,以及32 位整字或 16 位半字編程閃存等操作。 GD32 MCU 支持不同類(lèi)型編程的具體說(shuō)明如下表 GD32
    的頭像 發(fā)表于 08-21 09:56 ?929次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門(mén)教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 常見(jiàn)外設(shè)介紹(12)FMC 模塊介紹

    GD32 MCU是如何進(jìn)入中斷函數(shù)的?#GD32 #MCU #中斷函數(shù)

    單片機(jī)mcu
    聚沃科技
    發(fā)布于 :2024年01月31日 09:49:37

    GD32的外部中斷介紹

    起因介紹因?yàn)楣局坝?b class='flag-5'>GD32F4和周立功的CSM300產(chǎn)品的一個(gè)SPI轉(zhuǎn)CAN模塊,做了個(gè)產(chǎn)品,其在收到CAN幀時(shí)INT引腳會(huì)為由高電平轉(zhuǎn)為低電平。需要做一個(gè)中斷接收的程序防止丟包。GD32的外部
    發(fā)表于 08-16 08:36

    GD32 MCU原理及固件庫(kù)開(kāi)發(fā)指南》+讀后感

    、調(diào)試工具,再到庫(kù)函數(shù)的使用、各個(gè)外設(shè)的程序?qū)崿F(xiàn),不僅有原理的介紹,還有實(shí)踐的歷程。這本書(shū)聚焦在GD32 MCU基本原理和固件庫(kù)上,重點(diǎn)在于對(duì)固件庫(kù)API的介紹,供了大量實(shí)例代碼,這些代碼都可以直接編譯
    發(fā)表于 06-06 21:52

    GD32系列外部中斷

    起因介紹因?yàn)楣局坝?b class='flag-5'>GD32F4和周立功的CSM300產(chǎn)品的一個(gè)SPI轉(zhuǎn)CAN模塊,做了個(gè)產(chǎn)品,其在收到CAN幀時(shí)INT引腳會(huì)為由高電平轉(zhuǎn)為低電平。需要做一個(gè)中斷接收的程序防止丟包。GD32的外部
    發(fā)表于 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分享
    發(fā)表于 07-14 17:15 ?0次下載

    兆易創(chuàng)新GD32 MCU選型手冊(cè),適用于GD32全系列MCU

    兆易創(chuàng)新GD32MCU選型手冊(cè),適用于GD32全系列MCUGD32MCU選型手冊(cè),適用于GD32全系列MCU
    發(fā)表于 10-19 17:26 ?49次下載

    GD32如何配置中斷優(yōu)先級(jí)分組以及中斷優(yōu)先級(jí)

    使用GD32 MCU的過(guò)程中,大家可能會(huì)有以下疑問(wèn):中斷優(yōu)先級(jí)如何配置和使用?
    的頭像 發(fā)表于 01-10 10:30 ?2870次閱讀
    <b class='flag-5'>GD32</b>如何配置<b class='flag-5'>中斷</b>優(yōu)先級(jí)分組以及<b class='flag-5'>中斷</b>優(yōu)先級(jí)

    你了解GD32 MCU的命名規(guī)則嗎

    下面為大家介紹GD32 MCU的通用命名規(guī)則,以GD32F303ZGT6為例,其中,GD32代表GD32
    的頭像 發(fā)表于 01-13 09:38 ?3377次閱讀
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的命名規(guī)則嗎

    GD32 MCU啟動(dòng)后如何運(yùn)行到main函數(shù)

    GD32 MCU啟動(dòng)后如何運(yùn)行到main函數(shù)入口?你是否也有這樣的疑慮。在執(zhí)行到main函數(shù)之前MCU干了哪些事情呢?下面為大家解答。
    的頭像 發(fā)表于 01-15 10:00 ?990次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>啟動(dòng)后如何運(yùn)行到main<b class='flag-5'>函數(shù)</b>

    GD32 MCU的選項(xiàng)字節(jié)是什么?

    GD32 MCU的選項(xiàng)字節(jié)是什么,有什么功能呢?選項(xiàng)字節(jié)被誤篡改如何回復(fù)?
    的頭像 發(fā)表于 01-17 09:42 ?1199次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的選項(xiàng)字節(jié)是什么?

    不同型號(hào)的GD32 MCU如何區(qū)分?

    大家是否碰到過(guò)以下應(yīng)用場(chǎng)景:同一套軟件代碼希望跑在不同型號(hào)的GD32 MCU中,但有些地方需要根據(jù)MCU型號(hào)進(jìn)行調(diào)整?或者上位機(jī)或其他MCUGD3
    的頭像 發(fā)表于 01-27 09:32 ?917次閱讀
    不同型號(hào)的<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何區(qū)分?

    GD32 MCU 入門(mén)教程】GD32 MCU 常見(jiàn)外設(shè)介紹(14)RTC 模塊介紹

    GD32 MCU內(nèi)部提供了一個(gè)RTC(實(shí)時(shí)時(shí)鐘)模塊,通過(guò)RTC可以實(shí)現(xiàn)日歷時(shí)鐘、鬧鐘等功能。RTC也可以用于深度睡眠或待機(jī)模式的低功耗喚醒。不同系列的GD32 MCU在RTC設(shè)計(jì)和功
    的頭像 發(fā)表于 08-23 09:18 ?356次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門(mén)教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 常見(jiàn)外設(shè)介紹(14)RTC 模塊介紹

    GD32 MCU 入門(mén)教程】GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的頭像 發(fā)表于 08-25 09:24 ?409次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門(mén)教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> FPU 使用方法

    GD32 MCU入門(mén)教程】GD32 MCU GPIO 結(jié)構(gòu)與使用注意事項(xiàng)

    本文是專(zhuān)門(mén)為基于GD32 MCU開(kāi)發(fā)的工程設(shè)計(jì)人員提供,主要介紹了GPIO的功能配置、內(nèi)部結(jié)構(gòu)以及在不同場(chǎng)景使用時(shí)的注意事項(xiàng),旨在幫助GD32 MCU開(kāi)發(fā)者優(yōu)化對(duì)通用型輸入輸出端口(G
    的頭像 發(fā)表于 09-07 10:34 ?521次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>入門(mén)教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> GPIO 結(jié)構(gòu)與使用注意事項(xiàng)