?? 7.5 鍵盤驅動.txt
字號:
7.5 鍵盤驅動
7.5.1 鍵盤的硬件實現
EP7312提供了8個鍵盤掃描列輸出驅動端口,可由其他GPIO進行行掃描,并根據獲得的GPIO端口狀態來判斷哪個鍵按下。最大掃描陣列為8×8。在嵌入式ARM實驗箱中的缺省配置為4×4鍵盤掃描陣列。以EP7312的COL0~COL3為列掃描輸出驅動,用EP7312的GPIO PORT A0~A3作為行輸入線。所有列輸出驅動和PORT A的口線都連接到接插件JP9(如圖7-8所示)
1. 鍵盤的功能實現原理
鍵盤時嵌入式系統中是一個很關鍵的部件,它能實現向計算機輸入數據、傳送命令等功能,是用戶與嵌入式系統交互的主要手段。鍵盤實質上是一組按鍵開關的集合。通常,按鍵所用的開關為機械彈性開關,均利用了機械觸點的合、斷作用。
一個電壓信號通過機械觸點的斷開、閉合過程的波形如圖7-9所示。由于機械觸點的彈性作用,一個按鍵開關在閉合時不會立即穩定地接通,在斷開時也不會立即斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動。抖動時間的長短由按鍵的機械特性決定,一般為5~10ms。
鍵的閉合與否反應在電壓上,就是呈現出高電平或低電平。如果高電平表示斷開,那么低電平則表示閉合。所以通過電平的高低狀態的檢測,便可確認按鍵按下與否。為了確保CPU對一次按鍵動作只確認一次,必須消除抖動的影響。一般常用軟件的方法進行去抖。在第一次檢測到有鍵按下時,執行一段延時10ms左右的延時子程序,再次確認該鍵電平是否保持閉合狀態電平。如果保持閉合狀態電平,則確認為真正有鍵按下,從而消除了抖動的影響。
2.鍵盤的工作原理
鍵盤中有無鍵按下由列線和行線的狀態決定。當列線通過上拉電阻接高電平時,決定列接口都是1。按鍵判定的步驟是:把行線(D4~D7)依次置低電平,然后讀入列中,根據行、列交叉點判斷按下的具體鍵(如圖7-10)鍵盤上的每一個鍵都有一個鍵值,其功能是由鍵盤驅動程序事先設定好的。
3.中斷鍵盤掃描工作方式
初始化時,將D4~D7置低電平。當有鍵按下時,中斷端為低電平,向CPU發出中斷請求,進入中斷服務程序。中斷服務程序首先進行鍵盤掃描,掃描方式又分為掃描法和反轉法兩種。掃描法是在發現有鍵按下后,逐行對D4~D7置低電平,并檢查D0~D3的狀態。如果其中某位為0,此行列交叉點上的鍵即為按下鍵。反轉法接線圖與掃描法稍有不同,它分為兩步來確定按鍵,第一步同掃描法,用來判斷是否有鍵按下及按下的鍵所在的行(列);第二步是將行、列的輸入、輸出狀態與第一步反向,此時列(行)中的0電平和第一步中行(列)的0電平對應位是按下鍵。
4.矩陣鍵盤緩沖算法
被按下鍵的掃描代碼通常放置在一個緩沖區內,直到該應用程序準備處理一個按鍵為止。緩沖是一個方便的特征,因為當應用程序在按鍵發生而不能馬上處理時,緩沖區的使用可以防止按鍵的丟失。緩沖區大小一般視應用程序的需求而定。一般而言,一個大小為10個按鍵代碼的緩沖區內能夠滿足大多數情況下的要求。緩沖區的實現是以一個環行隊列的形式完成的。當一個按鍵被按下后,掃描代碼將被放置在隊列下一個空位置上。當應用程序從該鍵盤模塊中讀取了一個掃描碼后,它將被從該隊列中刪除掉,隊列指針的第一位指向下一個掃描代碼(如果有)。如果該隊列我滿,則任何下一格按鍵都會被丟失。
5.EP7312的鍵盤接
EP7312的鍵盤接口是一個8位的輸出接口,一般作為鍵盤矩陣的列驅動。EP7312的鍵盤接口支持通過GPIO(PA 口)可以直接連接成8×8的輸入鍵盤矩陣,通過掃描法決定鍵盤按鍵的狀態。設置相關的寄存器可以產生由鍵盤觸發的內部中斷。通常是將PA口作為行掃描的輸入口。當鍵盤中斷被允許時,PA口的8個引腳在芯片內部被連接到一個8輸入“或”門,其輸出作為系統的鍵盤中斷源。這就使得當PA口作為鍵盤矩陣的輸入時,任一鍵按下都會產生鍵盤中斷。當然,為了擴展鍵盤,也可以使用擴展總線來讀取設定的鍵值。鍵盤接口的這種中斷方式允許操作系統采用輪詢法、中斷掃描法或者兩者相結合的方式定制設備驅動程序。
鍵盤矩陣的列向量引腳可以被置為3種狀態:高(1)、低(0)和高阻。PA口的引腳一般被定義成8×8矩陣的行向量的輸入端。對于標準鍵盤接口而言,驅動列向量的引腳被置為高,使得在按鍵動作時,PA口的某個引腳被置為高,從而產生鍵盤中斷。
鍵盤接口不提供片內的去抖電路,這就需要設計者使用軟件完成按鍵的去抖功能,以防止系統的誤動作。
在鍵盤中斷控制寄存器中有以下定義:
當KBWEN位(即鍵盤喚醒使能位,SYSCON2 bit3)清0,且鍵盤中斷沒有被屏蔽時,按鍵動作將會使系統從省電模式下喚醒。
當KBWEN位置1時,不管鍵盤中斷處于任何狀態,系統都會從省電模式下喚醒,稱為“按鍵直接喚醒”模式。這種模式下,中斷請求可能不會被響應。若鍵盤中斷被屏蔽掉,處理器就會從它進入省電模式的代碼處繼續執行,否則,處理器會進入中斷服務程序。
當KBD6位(SYSCON2 bit1)被清0時,PA口的8個引腳在芯片內部連接到一個8輸入的“或”門上,其輸出則作為內部喚醒信號及鍵盤中斷請求信號。這種狀態是系統復位后的默認狀態。
當KBD6位(SYSCON2 bit1)被置1時,僅僅是PA口的低6位引腳在芯片內部連接到另外兩個引腳可以用做GPIO使用。
在KBWENZ和KBD6都被清0時,只能通過外部、中斷或其他沒有屏蔽的內部中斷把系統從省電模式中喚醒。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -