在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

如何檢測I/O端口的電平變化判斷是否產生中斷/事件請求

jf_pJlTbmA9 ? 來源:jf_pJlTbmA9 ? 作者:jf_pJlTbmA9 ? 2023-09-18 16:37 ? 次閱讀

EXTI簡介

EXTI是外部中斷/事件控制器,包含多個邊沿檢測器,通過檢測I/O端口的電平變化判斷是否產生中斷/事件請求。

MM32F0140的EXTI包含19個外部中斷線,其中外部中斷線EXTI0 ~ EXTI15用于I/O映射,EXTI16連接到PVD輸出,EXTI19連接到比較器1輸出,EXTI24連接到IWDG中斷。可通過軟件控制任意一個I/O端口作為EXTI的輸入源,EXTI檢測對應端口是否產生邊沿觸發,若檢測到邊沿觸發則產生中斷/事件請求,GPIO對應的16個外部中斷/事件映射關系如圖1所示。

wKgZomUD7reAOxKFAAKXssqNeTQ140.png 圖1 MM32F0140 GPIO對應外部中斷/事件映射

EXTI進行邊沿檢測時包含三種觸發類型:

上升沿觸發

電平由低到高時的一瞬間稱為上升沿,由上升沿的產生觸發輸出變化就稱作上升沿觸發。

下降沿觸發

電平由高到低時的一瞬間稱為下降沿,由下降沿的產生觸發輸出變化則稱為下降沿觸發。

任意邊沿觸發

電平由上升沿或下降沿的產生而觸發輸出變化被稱作任意邊沿觸發。

中斷/事件產生過程如圖2所示,EXTI邊沿檢測引腳的外部輸入電平,若由于外部因素導致引腳電平變化并產生邊沿觸發,則邊沿檢測電路輸出有效信號。或門電路接收邊沿檢測電路輸出的信號與軟件事件中斷寄存器(EXTI_SWIER)的輸出,軟件事件中斷寄存器能夠通過軟件啟動中斷/事件線。當外部中斷線上觸發邊沿事件時,掛起寄存器(EXTI_PR)的對應位被置1,可通過讀EXTI_PR寄存器獲取當前中斷/事件狀態。或門電路的輸出與中斷屏蔽寄存器(EXTI_IMR)的輸出相與,在使能對應線中斷位且邊沿觸發有效信號時,輸出有效信號到內核的NVIC中,NVIC進行中斷處理。或門電路的輸出與事件屏蔽寄存器(EXTI_EMR)的輸出結果相與,當使能對應事件線位且邊沿觸發有效信號時,輸出有效信號1,即脈沖信號,該脈沖信號可用于其他外設,例如觸發TIM。

wKgaomUD7rmAOd3VAADdyL6nPNg005.png 圖2 EXTI模塊框圖

EXTI的配置

配置中斷

配置并使能中斷線,根據圖1判斷指定I/O端口對應的外部中斷線與SYSCFG_EXTICRx寄存器中的控制位,(EXTI0~EXTI3使用SYSCFG_EXTICR1寄存器,EXTI4~EXTI7使用SYSCFG_EXTICR2寄存器,EXTI8~EXTI11使用SYSCFG_EXTICR3寄存器,EXTI12~EXTI15使用SYSCFG_EXTICR4寄存器)向SYSCFG_EXTICRx寄存器中外部中斷線的對應位賦值,若使用PA管腳則對應位賦值為0000,PB管腳對應位賦值為0001,PC管腳對應位賦值為0010,PD管腳對應位賦值為0011。

配置邊緣檢測觸發器的觸發類型,若使用上升沿觸發,則對上升沿觸發選擇寄存器(EXTI_RTSR)的外部中斷線對應位置1;若使用下降沿觸發,則對下降沿觸發選擇寄存器(EXTI_FTSR)的外部中斷線對應位置1;若使用任意邊沿觸發,則EXTI_RTSR寄存器與EXTI_FTSR寄存器的外部中斷線對應位均置1。

中斷屏蔽寄存器(EXTI_IMR)的外部中斷線對應位置1,允許中斷請求。當指定的外部中斷線檢測到配置的觸發條件時,產生一個中斷請求,掛起寄存器(EXTI_PR)的對應位置1。通過軟件對掛起寄存器中對應位寫入1,使中斷被清除。

配置軟件中斷事件寄存器(EXTI_SWIER)的外部中斷線對應位為1并置1 EXTI_IMR寄存器的外部中斷線對應位,也能產生中斷。

配置事件

配置并使能事件線,對SYSCFG_EXTICRx寄存器中外部事件線的對應位賦值;配置邊緣檢測觸發寄存器為需要的觸發類型,對EXTI_RTSR寄存器與EXTI_FTSR寄存器賦值;事件屏蔽寄存器(EXTI_EMR)的對應位置1,允許事件請求。當檢測到配置的觸發條件時,產生一個事件請求,掛起寄存器對應位置 1;通過對掛起寄存器對應位寫1清除事件。

配置軟件中斷事件寄存器(EXTI_SWIER)的外部中斷/事件線對應位為1并置1 EXTI_EMR寄存器的對應位,也能產生事件。

實驗

本實驗在靈動官方開發板MB-023上進行,通過配置EXTI下降沿觸發中斷,按下按鍵后產生邊沿觸發,進行中斷處理,LED電平轉換。配置按鍵所使用的I/O端口的對應外部中斷線,對SYSCFG_EXTICRx寄存器的EXTIx位賦值,對EXTI_RTSR寄存器和EXTI_FTSR寄存器賦值配置觸發類型,使用EXTI_IMR寄存器使能中斷,EXTI_PR寄存器對應位置1清除中斷。具體實驗內容為配置按鍵K2的對應引腳PB2與LED2對應的PB3引腳(如圖3所示),配置PB2對應的外部中斷線為下降沿觸發,若按下K2,按鍵對應的端口輸入低電平,下降沿觸發,產生中斷。實驗現象為按下按鍵K2,LED2電平反轉一次。

wKgZomUD7ruAGioyAADEN-nO9vs813.png 圖3 MCU原理圖中的EXTI引腳

初始化外設時鐘

SYSCFG在APB2線上,GPIO在AHB線上,實驗使用SYSCFG配置外部中斷,按鍵K2與LED2的引腳均為GPIOB組的引腳。因此對RCC_APB2ENR寄存器的SYSCFGEN位置1,對RCC_AHBENR寄存器的GPIOB對應位置1,從而初始化外設時鐘。

// Enable SYSCFG clock.
RCC->APB2ENR |= (1u << 0u);
// Enable GPIOB clock.
RCC->AHB1ENR |= (1u << 18u);

初始化按鍵

實驗使用引腳為PB2的K2按鍵,按鍵原理圖如圖4所示,若K2按鍵按下則與GND導通,因此在初始化按鍵時需配置該端口的工作模式為上拉輸入。

wKgaomUD7ryAah6DAAB9MMRLVow498.png 圖4 原理圖中的按鍵

GPIOx_CRL寄存器為端口配置低寄存器,用于配置指定端口的速度與工作模式;GPIOx_BSRR寄存器用于設置/清除對應端口,該寄存器低16位的對應端口位置1會產生高電平。由圖5所示,K2所使用的端口PB2為GPIOx_CRL寄存器內第8 ~ 11位。

wKgZomUD7r2AVVsZAAGyPFhjx64029.png 圖5 GPIOx_CRL寄存器

// Clear the configuration bit of port 2.
GPIOB->CRL  = ~(0xf << 8u);
// Configure pull-up input mode.
GPIOB->CRL |= (0x8 << 8u);
// Configure PB2 pin to high level.
GPIOB->BSRR |= (1u << 2u);

初始化LED

實驗使用PB3引腳,使用GPIOx_CRL寄存器對LED進行初始化配置,如圖5所示,端口3為GPIOx_CRL寄存器內第12 ~ 15位。

// Clear the configuration bit of port 3.
GPIOB->CRL  = ~(0xf << 12u);
// Configure push-pull output mode.
GPIOB->CRL |= (0x1 << 12u);

配置中斷線

由圖1可知,PB2使用的外部中斷線為EXTI2,配置SYSCFG_EXTICR1寄存器的EXTI2對應位為0001,如圖6所示,EXTI2處于SYSCFG_EXTICR1寄存器的8~ 11位。

wKgaomUD7r-AcNoaAAFGR9Jf8Ew323.png 圖6 GPIOx_EXTICR1

// Clear EXTI2 and assign value, the corresponding value of PB is 0001.
SYSCFG->EXTICR1 = ( ( SYSCFG->EXTICR1   ~(0xf << 8u) ) | (0x1 << 8u) );

配置觸發類型

在按鍵初始化中配置按鍵未按下時處于高電平,因此,對上升沿觸發選擇寄存器(EXTI_RTSR)與下降沿觸發選擇寄存器(EXTI_FTSR)賦值時配置觸發類型為下降沿觸發。

// Clear the corresponding bit of EXTI2 triggered by rising edge.
EXTI->RTSR  = ~ (1u << 2u);
// Configure falling edge trigger.
EXTI->FTSR |= (1u << 2u);

使能中斷

配置EXTI_IMR寄存器的EXTI2對應位,使能中斷。

// Enable EXTI interrupt.
EXTI->IMR |= (1u << 2u);

配置NVIC

EXTI控制中斷,NVIC處理中斷,使用Cortex-M0 core_cm0.h頭文件中的NVIC_EnableIRQ使能中斷線,EXTI2對應中斷為EXTI2_3_IRQn。

// Setup NVIC.
NVIC_EnableIRQ (EXTI2_3_IRQn);

編寫中斷服務程序

中斷使能中使用EXTI2_3_IRQn,中斷處理函數要與其匹配,因此使用EXTI2_3_IRQHandler,設置變量app_exti_event_on作為中斷狀態標志,該變量初始時為false,中斷請求產生時中斷狀態標志轉換為true,將EXRI_PR寄存器的對應位寫入1來清除中斷。

void EXTI2_3_IRQHandler(void)
{
    uint32_t flags = EXTI->PR;
    if ( 0u != ( flags   (1u << 2u) ) )
    {
        app_exti_event_on = true;
    }

    EXTI->PR |= (1u << 2u); // Clear interrupt.
}

main()函數

主程序中初始化變量app_exti_event_times為0,設置該變量從0開始計數,當中斷狀態標志app_exti_event_on為true,即產生中斷請求時,計數值加1,由于LED2初始化后顯示為亮,計算計數值取余2,若余數不等于0則LED2滅,若余數為0則LED2亮。實驗效果如圖7所示。

int main(void)
{
    // Enable SYSCFG and GPIOB clock.
    RCC->APB2ENR |= (1u << 0u);
    RCC->AHB1ENR |= (1u << 18u);

    // Setup K2.
    GPIOB->CRL  = ~(0xf << 8u);
    GPIOB->CRL |= (0x8 << 8u);
    GPIOB->BSRR |= (1u << 2u);

    // Setup LED2.
    GPIOB->CRL  = ~(0xf << 12u);
    GPIOB->CRL |= (0x1 << 12u);

    // Setup SYSCFG EXTI2.
    SYSCFG->EXTICR1 = ( ( SYSCFG->EXTICR1   ~(0xf << 8u) ) | (0x1 << 8u) );

    // Setup EXTI.
    EXTI->RTSR  = ~ (1u << 2u);
    EXTI->FTSR |= (1u << 2u);

    // Enable EXTI interrupt.
    EXTI->IMR |= (1u << 2u);

    // Setup NVIC.
    NVIC_EnableIRQ (EXTI2_3_IRQn);

    while (1)
    {
        while ( !app_exti_event_on )
        {
        }
        app_exti_event_on = false;

        app_exti_event_times++;
        if ( (app_exti_event_times % 2u) != 0u )
        {

            GPIOB->BSRR = (1u << 3u);// LED2(PB3 pin) off.
        }
        else
        {

            GPIOB->BRR = (1u << 3u);// LED2(PB3 pin) on.
        }
    }
}

pYYBAGIzEOKAeTqnACuqPlbdUq0694.gif 圖7 實驗現象

審核編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    114

    文章

    17022

    瀏覽量

    183269
  • 比較器
    +關注

    關注

    14

    文章

    1842

    瀏覽量

    108696
  • 電平
    +關注

    關注

    5

    文章

    367

    瀏覽量

    40458
  • 端口
    +關注

    關注

    4

    文章

    1046

    瀏覽量

    32764
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    請教一個I/O檢測問題。

    本帖最后由 eehome 于 2013-1-5 09:59 編輯 用I/O口作為輸入口檢測時要先置1吧,那當I/O
    發表于 08-14 12:33

    CC2530的I/O外部中斷

    為輸入后,可以用于產生中斷中斷可以設置在外部信號的上升或下降沿觸發。P0、P1或P2 端口都有中斷使能位,對位于IENl-2 寄存器內的端口
    發表于 04-15 16:03

    MM32如何使用比較器產生中斷

    /4Vrefint)時比較器會產生一個上升沿信號輸出高電平,在輸入信號由高電平變化為低電平(小于/4Vrefint)時比較器會
    發表于 03-09 09:55

    通用I/O ,矢量中斷,實時中斷模塊介紹

    ,或者在雙邊沿都產生中斷。 對于 GIO 通用 I/O口的外部連接有一些設計上需要注意的地方,當GIO 作 為輸出引腳使用的時候,在 2mA 驅動能力下,可以保證輸出的高電平電壓一定
    發表于 05-25 01:18

    是否可以通過傳感器自檢產生中斷

    大家好,我想測試LSM6DS3傳感器的中斷而不進行任何移動。您知道是否可以通過傳感器自檢產生中斷?如果我編寫一個低中斷閾值并啟動傳感器的自檢,是否
    發表于 03-01 13:30

    請問STM32F103VE的中斷引腳,數據端口,地址端口是那些,怎么控制和產生中斷

    1,STM32F103VE的中斷引腳,數據端口,地址端口是那些?2,如何控制中斷產生中斷
    發表于 03-19 06:34

    PSoC低壓檢測何時產生中斷

    PSoC 4100/4200系列PSoC 4架構的TRM,001-85634啟號文件。*a3.3.2.3低壓檢測(LVD)何時產生中斷?只有在事件當電源電壓低于監測水平或在狀態是積極的嗎?
    發表于 09-12 08:46

    GPIO口有中斷能力的端口

    GPIO口有中斷能力的端口:1. 中斷使能寄存器PxIE位置位表示允許對應的引腳在電平變化時(正跳變或負跳變)
    發表于 11-29 06:23

    靈動微課堂 (第202講) | MM32F0140 EXTI 學習筆記

    EXTI簡介 EXTI是外部中斷/事件控制器,包含多個邊沿檢測器,通過檢測I/O端口
    發表于 03-17 18:44

    請問如何讓CH32V103對Set Interface請求產生中斷

    使用CH32V103芯片實現USB Device, 枚舉過程不產生Set Interface中斷,在Bus hound上可看到主機有向控制端點發送Set Interface請求。請問如何讓CH32V103對Set Interfa
    發表于 06-06 06:42

    在執行程序及產生中斷時CPU內會發生什么變化?資料下載

    電子發燒友網為你提供在執行程序及產生中斷時CPU內會發生什么變化?資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-04 08:52 ?2次下載
    在執行程序及<b class='flag-5'>產生中斷</b>時CPU內會發生什么<b class='flag-5'>變化</b>?資料下載

    可靠的邏輯高電平I/O電路

    可靠的邏輯高電平I/O電路(輸入) 微控制器I/O端口線能承受的最大電壓不超過5V(不同微控制器
    的頭像 發表于 08-16 14:52 ?8444次閱讀
    可靠的邏輯高<b class='flag-5'>電平</b><b class='flag-5'>I</b>/<b class='flag-5'>O</b>電路

    系統芯片設計—中斷產生及處理流程

    中斷控制器是系統芯片中用于中斷源收集,屏蔽和優先級管理的IP核。產生中斷信號的部件稱為中斷源,中斷產生
    的頭像 發表于 08-12 14:46 ?3750次閱讀

    MAX7321 I2C端口擴展器,具有8路漏極開路I/O技術手冊

    所有配置成輸入的I/O口狀態變化(瞬態檢測)。狀態變化由一個漏極開路的/INT輸出指示。器件鎖存中斷
    的頭像 發表于 05-23 11:41 ?154次閱讀
    MAX7321 <b class='flag-5'>I</b>2C<b class='flag-5'>端口</b>擴展器,具有8路漏極開路<b class='flag-5'>I</b>/<b class='flag-5'>O</b>技術手冊

    MAX7301 4線接口、2.5V至5.5V、20端口或28端口輸入/輸出擴展器技術手冊

    邏輯輸出,能夠吸取10mA,源出4.5mA,或施密特邏輯輸入,帶有可選的內部上拉。其中七個端口具有可配置的跳變檢測邏輯,當端口邏輯電平變化
    的頭像 發表于 05-26 14:07 ?153次閱讀
    MAX7301 4線接口、2.5V至5.5V、20<b class='flag-5'>端口</b>或28<b class='flag-5'>端口</b>輸入/輸出擴展器技術手冊
    主站蜘蛛池模板: 亚洲免费视频一区 | 77米奇影院 | 亚洲人成伊人成综合网久久 | 丁香六月在线 | 中文字幕精品一区 | 亚洲一区二区三区播放在线 | 在线视频91 | 五月激情综合婷婷 | 久操伊人 | 狠狠躁夜夜躁人人爽天天miya | 9984四虎永久免费网站 | 亚洲成人在线免费观看 | 亚欧一区 | 天堂黄网| 午夜久久免费视频 | 日韩一级片在线观看 | 黄色美女免费网站 | 国产视频每日更新 | 色香蕉在线视频 | 天天干天天射天天插 | 色综合图片二区150p | 天堂最新版在线www在线 | 九九51精品国产免费看 | 在线免费视频一区二区 | 在线观看视频在线观看 | 亚洲涩综合 | 黄色插插插 | 色吧在线视频在线观看 | 美女被免费视频网站九色 | 台湾久久| 亚洲三级小视频 | 美国一级毛片片aa久久综合 | 亚洲男人的天堂久久香蕉 | 美女扒开尿口让男人桶 | 亚洲精品美女久久久aaa | 日本片免费观看一区二区 | 丝袜紧身裙国产在线播放 | 啪啪.com| 亚洲日本色图 | 日本黄色视 | 久久久久女人精品毛片 |