本帖最后由 kkhkbb 于 2018-3-3 09:53 編輯
一、概述 1、中斷簡介 中斷是指計算機運行過程中,出現(xiàn)某些意外情況需主機干預時,機器能自動停止正在運行的程序并轉(zhuǎn)入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續(xù)運行。 中斷的分類: (1)硬件中斷 - 可屏蔽中斷:硬件中斷的一類,可通過在中斷屏蔽寄存器中設(shè)定位掩碼來關(guān)閉。
- 非可屏蔽中斷:硬件中斷的一類,無法通過在中斷屏蔽寄存器中設(shè)定位掩碼來關(guān)閉。典型例子是時鐘中斷(一個硬件時鐘以恒定頻率—如50Hz—發(fā)出的中斷)。
- 處理器中斷:一種特殊的硬件中斷。由處理器發(fā)出,被其它處理器接收。僅見于多處理器系統(tǒng),以便于處理器間通信或同步。
- 偽中斷:一類不希望被產(chǎn)生的硬件中斷。發(fā)生的原因有很多種,如中斷線路上電氣信號異常,或是中斷請求設(shè)備本身有問題。
(2)軟件中斷:是一條CPU指令,用以自陷一個中斷。由于軟中斷指令通常運行一個切換CPU至內(nèi)核態(tài)的子例程,它常被用作實現(xiàn)系統(tǒng)調(diào)用。 中斷優(yōu)先權(quán): 在某一時刻有幾個中斷源同時發(fā)出中斷請求時,處理器只響應其中優(yōu)先權(quán)最高的中斷源。當處理機正在運行某個中斷服務(wù)程序期間出現(xiàn)另一個中斷源的請求時,如果后者的優(yōu)先權(quán)低于前者,處理機不予理睬,反之,處理機立即響應后者,進入所謂的“嵌套中斷”。中斷優(yōu)先權(quán)的排序按其性質(zhì)、重要性以及處理的方便性決定,由硬件的優(yōu)先權(quán)仲裁邏輯或軟件的順序詢問程序來實現(xiàn)。 中斷過程: (1)中斷源發(fā)出中斷請求; (2)判斷當前處理機是否允許中斷和該中斷源是否被屏蔽; (3)優(yōu)先權(quán)排隊; (4)處理機執(zhí)行完當前指令或當前指令無法執(zhí)行完,則立即停止當前程序保護斷點地址和處理機當前狀態(tài),轉(zhuǎn)入相應的中斷服務(wù)程序。 (5)執(zhí)行中斷服務(wù)程序; (6)恢復被保護的狀態(tài),執(zhí)行“中斷返回”指令回到被中斷的程序或轉(zhuǎn)入其他程序。 2、外部中斷/事件控制器(EXTI) EXTI主要特性: (1)每個中斷/事件線上都具有獨立的觸發(fā)和屏蔽。 (2)每個中斷線都具有專用的狀態(tài)位。 (3)支持多達23個軟件事件/中斷請求。 圖3_0外部中斷/事件控制器框圖 外部中斷/事件線映射: 多達140個的GPIO通過以下方式連接到16個外部中斷/事件線: 圖3_1外部中斷/事件線映射圖 另外七根EXTI線連接方式如下: - EXTI線16連接到PVD輸出。
- EXTI線17連接到RTC鬧鐘事件。
- EXTI線18連接到USB OTG FS 喚醒事件。
- EXTI線19連接到以太網(wǎng)喚醒事件。
- EXTI線20連接到USB OTG HS (在FS中配置)喚醒事件。
- EXTI線21連接到RTC入侵和時間戳事件。
- EXTI線22連接到RTC喚醒事件。
3、STM32中斷優(yōu)先級的判斷 STM32 目前支持的中斷共為 84 個(16 個內(nèi)核+68 個外部), 16 級可編程中斷優(yōu)先級的設(shè)置(僅使用中斷優(yōu)先級設(shè)置 8bit 中的高 4 位)和16個搶占優(yōu)先級(因為搶占優(yōu)先級最多可以有四位數(shù))。 STM32(Cortex-M3)中有兩個優(yōu)先級的概念——搶占式優(yōu)先級和響應優(yōu)先級,有人把響應優(yōu)先級稱作'亞優(yōu)先級'或'副優(yōu)先級',每個中斷源都需要被指定這兩種優(yōu)先級。 具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應,即中斷嵌套,或者說高搶占式優(yōu)先級的中斷可以嵌套低搶占式優(yōu)先級的中斷。 當兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌套關(guān)系,當一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷同時到達,則中斷控制器根據(jù)他們的響應優(yōu)先級高低來決定先處理哪一個;如果他們的搶占式優(yōu)先級和響應優(yōu)先級都相等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個。 優(yōu)先級分組: 中斷優(yōu)先級分組域中,可以有8種分配方式,如下: 所有8位用于指定響應優(yōu)先級。 最高1位用于指定搶占式優(yōu)先級。 最低7位用于指定響應優(yōu)先級。 最高2位用于指定搶占式優(yōu)先級。 最低6位用于指定響應優(yōu)先級。 最高3位用于指定搶占式優(yōu)先級。 最低5位用于指定響應優(yōu)先級。 最高4位用于指定搶占式優(yōu)先級。 最低4位用于指定響應優(yōu)先級。 最高5位用于指定搶占式優(yōu)先級。 最低3位用于指定響應優(yōu)先級。 最高6位用于指定搶占式優(yōu)先級。 最低2位用于指定響應優(yōu)先級。 最高7位用于指定搶占式優(yōu)先級。 最低1位用于指定響應優(yōu)先級。 二、硬件電路 圖3_2引腳分布圖 圖3_3電路原理圖 在iCore3雙核心開發(fā)板中,采用一個獨立的按鍵與STM32F407的GPIO相連,另一端接地,且PH15外接一個1k電阻大小的上拉電阻。 三、實驗原理 按鍵的一端與SMT32的GPIO(PH15)相連,另一端接地,且PH15外接一個1K電流大小的上拉電阻。初始化時把PH15設(shè)置成輸入模式。當按鍵彈起時候,PH15由于上拉電阻的作用呈高電平(3.3V);當按鍵按下時候,PH15直接被按鍵短接到GND,呈低電平。因此PH15的電平變化產(chǎn)生下降沿,從而進入中斷函數(shù),可得到按鍵狀態(tài)。原理圖如下: 圖3_4實驗原理圖 四、源代碼 1、主函數(shù)
|