嵌入式Linux中基于Qt/Embedded的鍵盤(pán)接口設計
摘要:采用S3C2440處理器和嵌入式Linux操作系統,選擇目前比較常用的Qt/Embedded作為圖形界面的開(kāi)發(fā)語(yǔ)言,設計了嵌入式系統中的鍵盤(pán)接口。在介紹硬件平臺的基礎上,給出了嵌入式Linux下鍵盤(pán)設備驅動(dòng)程序的工作過(guò)程及實(shí)現方法,簡(jiǎn)單介紹了Qt/Embedded的架構和字符輸入策略,詳細設計了Qt鍵盤(pán)驅動(dòng)插件和應用程序。實(shí)驗表明,鍵盤(pán)驅動(dòng)采用Qt的插件系統,具有更好的獨立性和移植性。
關(guān)鍵詞:嵌入式Linux;Qt/Embedded;鍵盤(pán)驅動(dòng);S3C2440
引言
隨著(zhù)嵌入式系統的不斷發(fā)展,特別是嵌入式處理器運算能力的不斷增強,嵌入式系統被廣泛應用于信息家電、移動(dòng)通信、手持信息設備以及工業(yè)控制等眾多領(lǐng)域。與此同時(shí),用戶(hù)對于嵌入式系統圖形用戶(hù)界面的需求也不斷提高。嵌入式Linux作為一種流行的嵌入式系統平臺,它所具備的穩定、高效、易裁剪、易移植、硬件支持廣泛等優(yōu)點(diǎn),結合其源碼開(kāi)放的特征,使得Linux在嵌入式操作系統中的地位日益重要。Qt/Embedded是一個(gè)完整的自包含GUI和基于 Linux的嵌入式平臺開(kāi)發(fā)工具,因其面向對象、跨平臺、界面設計更美觀(guān)和友好而得到廣泛的應用。Qt/Embedded具有客戶(hù)/服務(wù)器模型,直接向幀緩沖寫(xiě)入數據,摒棄了X窗口系統,節省了內存。同時(shí),將外部輸入設備抽象為鍵盤(pán)和鼠標輸入事件,底層接口支持鍵盤(pán)、GPM鼠標、觸摸屏,以及用戶(hù)自己定義的設備等。
1 硬件設計
電路采用三星S3C2440處理器,實(shí)現了4×4矩陣鍵盤(pán)的輸入。矩陣鍵盤(pán)使用了處理器的4個(gè)GPIO和4個(gè)中斷,以中斷方式獲取鍵值,對應的中斷引腳分別是EINT3、EINT9、EINT11、EINT13。GPIO引腳與矩陣鍵盤(pán)的行相連接作為輸入端,中斷引腳與矩陣鍵盤(pán)的列相連作為矩陣鍵盤(pán)的輸出端。開(kāi)始時(shí)GPIO端輸出為低電平,當有按鍵被按下時(shí),按鍵所在列輸出低電平產(chǎn)生中斷,這時(shí)可以判斷按鍵所在的列。然后向每一行依次輸入高電平,如果列的輸出端由低電平變成高電平,則可以確定按鍵所在的行,這時(shí)鍵值被唯一鎖定。具體電路如圖1所示。
2 LinuX下鍵盤(pán)接口驅動(dòng)
鍵盤(pán)設備屬于字符設備,鍵盤(pán)驅動(dòng)應該符合字符設備驅動(dòng)的編寫(xiě)模式。Linux采用內核模塊機制,當系統運行的時(shí)候驅動(dòng)程序可以以模塊的形式動(dòng)態(tài)地加載和卸載,既方便了驅動(dòng)的調試,又縮短了開(kāi)發(fā)周期。在驅動(dòng)中必須實(shí)現static int_init my_kb_init(void)函數和stat-
ic void_exit my_kb_exit(void)函數。static int_init my_kb_init(void)函數在內核加載鍵盤(pán)驅動(dòng)時(shí)被調用,注冊模塊為以后調用模塊函數預先做準備,同時(shí)完成字符設備的注冊,分配主設備號,設置中斷類(lèi)型,安裝中斷函數,并且將所有中斷禁止。static void_exit my_kb_ exit(void)函數在卸載模塊時(shí)被調用,用于撤銷(xiāo)初始化函數所做的一切,否則在系統重新引導之前一些東西會(huì )殘留在系統中,導致模塊重新加載失敗。
鍵盤(pán)驅動(dòng)中主要包括以下幾個(gè)子模塊:中斷處理子模塊、鍵盤(pán)掃描子模塊、消抖處理和組合鍵子模塊、重復按鍵子模塊等。驅動(dòng)工作流程如圖2所示。
按鍵的識別主要是在中斷處理子模塊中完成的。當系統有按鍵被按下時(shí),驅動(dòng)程序先關(guān)掉中斷,然后掃描鍵盤(pán),確定哪個(gè)鍵按下,鍵盤(pán)按下和抬起都有中斷發(fā)生,這樣可以為用戶(hù)提供按下和抬起標志,以判斷按鍵是單鍵按下還是多鍵齊按。在消抖處理和組合鍵子模塊中,加入Linux內核定時(shí)器,鍵盤(pán)定時(shí)掃描,消除抖動(dòng)得到穩定鍵值。重復按鍵子模塊是根據Linux內部的定時(shí)器,設置自動(dòng)重復開(kāi)始延時(shí)和自動(dòng)重復延時(shí),鍵盤(pán)按下后根據延時(shí)來(lái)完成按鍵事件,鍵值存入隊列供應用程序讀取。
評論