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

帶32位MCU和高精度ADC的SoC產品-SD93F系列開發指南(八)

鼎盛合科技芯片CSU18M88,SOC芯片集成高精度ADC和LCD顯示模塊
基于高精度24位ADC的電子血壓計方案
高精度ADC,高精度ADC是什么意思
ADuC816:MicroConverter?,帶嵌入式閃存MCU的雙通道16位ADC產品手冊

ADuC832:帶嵌入式62 kB閃存MCU的MicroConverter、12位ADC和DAC產品手冊

24Bit ADC高精度低功耗MCU 醫療級別設備參考設計(附上高精確算法+電路原理圖)
基于DT5M4765系列(MCU帶24位高精度ADC+LCD驅動)開發的便攜式血氧儀

24位高精度ADC MCT1247產品介紹

評論