01前 言
在開發(fā)指南(一)中我們介紹了示例程序的整體框架,從本章開始將會對使用到的模塊進(jìn)行詳細(xì)介紹。本章我們主要對按鍵中斷的一種簡單用法進(jìn)行講解,參考應(yīng)用手冊第6、7章節(jié)。
02按鍵中斷
因為外部中斷和按鍵中斷都被復(fù)用在GPIO上(KEY0~KEY6對應(yīng)P00~P06),要優(yōu)先設(shè)置GPIO為輸入狀態(tài),而GPIO、外部中斷和按鍵中斷都屬于外設(shè)功能,所以第一步還是先打開相應(yīng)的外設(shè)時鐘使能,接著初始化GPIO00~06的狀態(tài)為輸入上拉,然后進(jìn)行按鍵中斷配置初始化,最后打開按鍵中斷使能,如下圖1:
圖1.按鍵中斷配置初始化
按鍵中斷初始化時,首先要寫入正確的向量號,使能對應(yīng)向量號的中斷,然后根據(jù)應(yīng)用需要配置中斷優(yōu)先級和優(yōu)先級閾值。一般在程序中有多個中斷使用時需要考慮中斷優(yōu)先級問題,在本示例程序SD93F115-JBS_TEST.zip中,中斷優(yōu)先級和閾值都設(shè)置為最高(因為我們是通過按鍵中斷去選擇需要執(zhí)行的測試項,所以我們認(rèn)為按鍵中斷的優(yōu)先級和閾值必須都是最高的),配置完成后便可打開按鍵中斷使能,設(shè)置按鍵KEY0~KEY6作為按鍵輸入。
按鍵中斷基本配置完成后,就需要編寫按鍵中斷服務(wù)函數(shù)了。我們在lib的SD931X_it.c中找到按鍵中斷對應(yīng)的中斷函數(shù)入口,編寫按鍵中斷服務(wù)函數(shù)(其他中斷可在對應(yīng)的中斷函數(shù)中進(jìn)行編寫),如下圖2:
圖2.按鍵中斷服務(wù)函數(shù)
進(jìn)入按鍵中斷服務(wù)函數(shù),第一步先清除中斷標(biāo)志位,避免因忘記清除標(biāo)志位導(dǎo)致系統(tǒng)反復(fù)進(jìn)入中斷(無論KEY0~6中的哪個按鍵觸發(fā)的中斷,都會置起KEYIF標(biāo)志位);第二步是消抖,防止按鍵誤觸發(fā)(LCD顯示會在后續(xù)章節(jié)進(jìn)行說明);第三步便可通過讀取GPIO0的輸入數(shù)據(jù)寄存器GPIO0_IDR,去判斷哪一個或哪幾個按鍵處于按下狀態(tài)(因為IO是被上拉的狀態(tài),所以在無按鍵按下時,寄存器結(jié)果應(yīng)為0x7F,有按鍵按下時對應(yīng)位為0)。
若寄存器結(jié)果與定義的鍵值Key0-Key6相同(見圖3鍵值定義),則將對應(yīng)測試項的標(biāo)志位置1,其他測試項的標(biāo)志位置0,否則程序直接退出中斷。按鍵中斷執(zhí)行完成后,程序會跳出中斷繼續(xù)執(zhí)行圖4的while循環(huán),而在循環(huán)中,我們通過不斷監(jiān)測各測試項的標(biāo)志位是否置1來驗證是否有按鍵按下,如此便可通過簡單的按鍵操作進(jìn)入不同測試項。
圖3.鍵值定義
圖4.while循環(huán)
03開發(fā)問題簡析
開發(fā)階段使用按鍵中斷或其他中斷遇到最多的問題就是中斷不響應(yīng),要重點關(guān)注外設(shè)時鐘是否打開、中斷使能是否打開、對應(yīng)模擬功能是否開啟以及中斷標(biāo)志位是否判斷正確。
04總 結(jié)
本文介紹了一種按鍵中斷的簡單用法,對按鍵中斷的初始化和中斷服務(wù)函數(shù)的編寫的流程進(jìn)行簡單介紹。
示例程序:
SD93F115-JBS_TEST.zip
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17148瀏覽量
351197 -
adc
+關(guān)注
關(guān)注
98文章
6498瀏覽量
544640 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52098
發(fā)布評論請先 登錄
相關(guān)推薦
評論