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

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

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

【GD32 MCU 入門教程】GD32 MCU 常見外設(shè)介紹(4)EXTI 中斷介紹

聚沃科技 ? 2024-08-13 11:20 ? 次閱讀

EXTI(中斷/事件控制器)包含多個相互獨立的邊沿檢測電路并且能夠向處理器內(nèi)核產(chǎn)生中斷請求或喚醒事件。 EXTI 有三種觸發(fā)類型:上升沿觸發(fā)、下降沿觸發(fā)和任意沿觸發(fā)。 EXTI中的每一個邊沿檢測電路都可以獨立配置和屏蔽。

4.1.GD32 EXTI 外設(shè)原理簡介

GD32 EXTI 主要特性(以 GD32F30x 為例)

? 高效的中斷處理;

? 支持異常搶占和咬尾中斷;

? 將系統(tǒng)從省電模式喚醒;

? 3 種觸發(fā)類型:上升沿觸發(fā),下降沿觸發(fā)和任意沿觸發(fā);

? 軟件中斷或事件觸發(fā);

? 可配置的觸發(fā)源;

? Cortex-M4系統(tǒng)異常;

? 多達68種可屏蔽的外設(shè)中斷;

? 4位中斷優(yōu)先級配置位,可配置16個中斷優(yōu)先級;

? EXTI中有多達20個相互獨立的邊沿檢測電路;

EXTI 框圖

輸入圖片說明

如圖所示,EXTI 可分為兩大部分功能,一個是產(chǎn)生中斷,另一個是產(chǎn)生事件。EXTI的輸入線可以通過寄存器設(shè)置為任意GPIO,也可以是一些外設(shè)的事件,輸入線是存在電平變化的信號。

EXTI包含一個邊沿檢測電路,它會根據(jù)上升沿觸發(fā)選擇寄存器和下降沿觸發(fā)選擇寄存器對應位的設(shè)置來控制信號觸發(fā)。邊沿檢測電路以輸入線作為信號輸入端,如果檢測到有邊沿跳變就輸出有效信號給邊沿檢測電路,否則輸出無效信號,而通過配置寄存器,可設(shè)置邊沿檢測電路響應跳變過程,如設(shè)置為上升沿觸發(fā)、下降沿觸發(fā)和雙邊沿觸發(fā)。

EXTI還包含一個或門電路,它一個輸入來自邊沿檢測電路,另外一個輸入來自軟件中斷事件寄存器。軟件中斷事件寄存器允許我們通過程序控制就可以啟動中斷/事件線,這在某些地方非常有用。

中斷/事件線

不同系列的MCU對應有不同數(shù)量、不同種類的中斷/事件線,以GD32F10x系列為例,如EXTI中斷線圖所示它有20個中斷/事件線,每個 GPIO都可以被設(shè)置為輸入線,占用 EXTI0至EXTI15,另外 4根特定外設(shè)中斷/事件線由外設(shè)觸發(fā),比如EXTI16代表低壓檢測LVD中斷、EXTI17代表RTC鬧鐘中斷、EXTI18代表USB喚醒中斷、EXTI19代表以太網(wǎng)喚醒中斷。

EXTI 中斷線

輸入圖片說明

EXTI0至 EXTI15用于 GPIO,通過編程控制可以實現(xiàn)任意一個 GPIO作為 EXTI的輸入源。由表可知,EXTI0 可以通過 EXTI源選擇寄存器0寄存器(AFIO_EXTISS0)的EXTI0_SS[3:0]位選擇配置為 PA0、PB0、PC0、PD0、PE0、PF0、PG0,其他 EXTI線(EXTI中斷/事件線)使用配置都是類似的。

注意:多組中同一標號PIN僅可配置一個IO口為外部中斷,例: PA0、 PB0、 PC0僅支持三個中的其中一個IO口產(chǎn)生外部中斷,不支持三個同為外部中斷模式。

各系列 EXTI 功能差異

GD32系列MCU有關(guān)SPI外設(shè)各系列功能差異如 GD32 MCU 各系列 EXTI 功能差異表所示。

輸入圖片說明

4.2.硬件連接說明

外部中斷輸入檢測可以通過配置上升沿、下降沿或者任意沿觸發(fā),讀者可根據(jù)輸入信號的初始狀態(tài)進行配置。如按鍵設(shè)計原理圖所示,該圖為GD32 開發(fā)板按鍵設(shè)計原理圖,在按鍵未按下時KEY引腳狀態(tài)為高電平,按下后,引腳電平狀態(tài)為低電平,因而可以配置為下降沿(按鍵按下時)觸發(fā)EXTI、上升沿(按鍵松開后)觸發(fā)EXTI或任意沿(按鍵按下和松開后)觸發(fā)EXTI。

輸入圖片說明

4.3.軟件配置說明

本小節(jié)講解EXTI_Example歷程中EXTI模塊的配置說明,主要包括外設(shè)時鐘配置、GPIO引腳配置、EXTI外設(shè)配置、主函數(shù)介紹以及運行結(jié)果。本例程主要介紹GD32 MCU各系列EXTI外部中斷的使用。

外設(shè)時鐘配置

外設(shè)時鐘配置如代碼清單EXTI例程時鐘配置代碼所示,在該歷程中使用PA0作為EXTI輸入檢測引腳,因而,在GD32全系列MCU中均需打開GPIOA的時鐘,另外,在GD32F1X0、GD32F3X0和GD32E23X中需要打開CFGCMP時鐘,以及在GD32F4XX中需要打開SYSCFG時鐘,主要由于 EXTI源選擇控制位在系統(tǒng)配置寄存器中。

void rcu_config(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X rcu_periph_clock_enable(RCU_GPIOA); #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E23X rcu_periph_clock_enable(RCU_GPIOA); #if defined GD32F1X0 || GD32F3X0 || GD32E23X rcu_periph_clock_enable(RCU_CFGCMP); #elif defined GD32F4XX rcu_periph_clock_enable(RCU_SYSCFG); #endif #endif }

GPIO 引腳配置

GPIO引腳配置如代碼清單EXTI例程GPIO引腳配置代碼所示,PA0引腳需要配置為浮空輸入狀態(tài)。

void gpio_config(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0); #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E23X gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0); #endif }

EXTI 外設(shè)配置

EXTI外設(shè)配置代碼如代碼清單EXTI例程EXTI外設(shè)配置代碼所示,在該代碼中,首先使能EXTI中斷,之后配置EXTI源以及所需要的邊沿,最后清除EXTI中斷標志。

void exti_config(void) { #if defined GD32F10X_HD|| GD32F30X_HD || GD32F1X0 || GD32F20X_CL || GD32F4XX || GD32F3X0 || GD32E10X || GD32E23X #if defined GD32F1X0 || GD32F3X0 || GD32E23X || GD32F4XX #if defined GD32E23X /* enable and set key EXTI interrupt to the lowest priority */ nvic_irq_enable(EXTI0_1_IRQn, 2U); #elif defined GD32F4XX nvic_irq_enable(EXTI0_IRQn, 2U,0U); #elif defined GD32F1X0 || GD32F3X0 nvic_irq_enable(EXTI0_1_IRQn, 2U,0U); #endif /* connect key EXTI line to key GPIO pin */ syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0); /* configure key EXTI line */ exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_0); #else nvic_irq_enable(EXTI0_IRQn, 2U,0U); gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_0); /* configure key EXTI line */ exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_0); #endif #endif }

主函數(shù)說明及中斷處理函數(shù)說明

主函數(shù)配置十分簡單,如代碼清單EXTI例程主函數(shù)所示,主要包括外設(shè)時鐘初始化調(diào)用、GPIO初始化調(diào)用以及EXTI配置函數(shù)。

int main(void) { /* peripheral clock enable */ rcu_config(); /* GPIO config */ gpio_config(); /* SPI config */ exti_config(); while(1) { } }

中斷處理函數(shù)如代碼清單EXTI中斷處理函數(shù)所示。在中斷處理函數(shù)中,首先判斷產(chǎn)生EXTI的中斷是否為EXTI_0的中斷標志,如果是,則進入EXTI_0的中斷處理,處理完成后,清除EXTI_0的中斷標志。

void EXTI0_IRQHandler(void) { if(exti_interrupt_flag_get(EXTI_0) == SET) { exti_interrupt_flag_clear(EXTI_0); } }

運行結(jié)果

將EXTI_Example例程按照對應的芯片工程編譯完成后,下載到對應芯片中,在中斷處理函數(shù)中加斷點,可以發(fā)現(xiàn),當PA0有下降沿發(fā)生時,會產(chǎn)生EXTI中斷,進入EXTI中斷處理函數(shù)。

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)

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

    關(guān)注

    6026

    文章

    44452

    瀏覽量

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

    關(guān)注

    146

    文章

    16796

    瀏覽量

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

    關(guān)注

    5052

    文章

    18909

    瀏覽量

    300739
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24048
  • EXTI
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    3646
收藏 人收藏

    評論

    相關(guān)推薦

    GD32 MCU 入門教程GD32 MCU 常見外設(shè)介紹(12)FMC 模塊介紹

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

    GD32的外部中斷介紹

    起因介紹因為公司之前用GD32F4和周立功的CSM300產(chǎn)品的一個SPI轉(zhuǎn)CAN模塊,做了個產(chǎn)品,其在收到CAN幀時INT引腳會為由高電平轉(zhuǎn)為低電平。需要做一個中斷接收的程序防止丟包。GD32
    發(fā)表于 08-16 08:36

    GD32MCU介紹

    其實兆芯的MCU為了兼容ST,外設(shè)的寄存器設(shè)計與ST保持一致了。比如GD32VF103或者GD32E103系列的USBFS這個外設(shè),基本等同
    發(fā)表于 11-01 06:03

    GD32 MCU原理及固件庫開發(fā)指南》 + 初讀感悟

    GD32 MCU原理固件庫開發(fā)指南這本書內(nèi)容豐富,囊括了GD32中的所有外設(shè),書中首先介紹了如何使用MDK或IAR軟件搭建
    發(fā)表于 03-31 22:11

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

    。 第2章介紹GD32 MCU快速入門與開發(fā)平臺搭建的方法,包括對軟硬件開發(fā)平臺、調(diào)試工具、GD32 M
    發(fā)表于 06-06 21:52

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

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

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

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

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

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

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

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

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(1)使用Keil開發(fā)GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 15:01 ?769次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(1)使用Keil開發(fā)<b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(2)使用 IAR 開發(fā) GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 15:40 ?476次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(2)使用 IAR 開發(fā) <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 16:03 ?630次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程GD32 MCU 常見外設(shè)介紹(14)RTC 模塊介紹

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

    GD32 MCU 入門教程GD32 MCU FPU 使用方法

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

    GD32 MCU入門教程GD32 MCU GPIO 結(jié)構(gòu)與使用注意事項

    本文是專門為基于GD32 MCU開發(fā)的工程設(shè)計人員提供,主要介紹了GPIO的功能配置、內(nèi)部結(jié)構(gòu)以及在不同場景使用時的注意事項,旨在幫助GD32 MC
    的頭像 發(fā)表于 09-07 10:34 ?415次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b><b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> GPIO 結(jié)構(gòu)與使用注意事項