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