新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式Linux中基于Qt/Embedded的鍵盤接口設(shè)計(jì)

嵌入式Linux中基于Qt/Embedded的鍵盤接口設(shè)計(jì)

作者: 時間:2011-01-13 來源:網(wǎng)絡(luò) 收藏

摘要:采用S3C2440處理器和Linux操作系統(tǒng),選擇目前比較常用的Qt/Embedded作為圖形界面的開發(fā)語言,設(shè)計(jì)了系統(tǒng)中的。在介紹硬件平臺的基礎(chǔ)上,給出了Linux下設(shè)備驅(qū)動程序的工作過程及實(shí)現(xiàn)方法,簡單介紹了Qt/Embedded的架構(gòu)和字符輸入策略,詳細(xì)設(shè)計(jì)了Qt驅(qū)動插件和應(yīng)用程序。實(shí)驗(yàn)表明,鍵盤驅(qū)動采用Qt的插件系統(tǒng),具有更好的獨(dú)立性和移植性。
關(guān)鍵詞:嵌入式Linux;Qt/Embedded;鍵盤驅(qū)動;S3C2440

引言
隨著嵌入式系統(tǒng)的不斷發(fā)展,特別是嵌入式處理器運(yùn)算能力的不斷增強(qiáng),嵌入式系統(tǒng)被廣泛應(yīng)用于信息家電、移動通信、手持信息設(shè)備以及工業(yè)控制等眾多領(lǐng)域。與此同時,用戶對于嵌入式系統(tǒng)圖形用戶界面的需求也不斷提高。嵌入式Linux作為一種流行的嵌入式系統(tǒng)平臺,它所具備的穩(wěn)定、高效、易裁剪、易移植、硬件支持廣泛等優(yōu)點(diǎn),結(jié)合其源碼開放的特征,使得Linux在嵌入式操作系統(tǒng)中的地位日益重要。Qt/Embedded是一個完整的自包含GUI和基于 Linux的嵌入式平臺開發(fā)工具,因其面向?qū)ο?、跨平臺、界面設(shè)計(jì)更美觀和友好而得到廣泛的應(yīng)用。Qt/Embedded具有客戶/服務(wù)器模型,直接向幀緩沖寫入數(shù)據(jù),摒棄了X窗口系統(tǒng),節(jié)省了內(nèi)存。同時,將外部輸入設(shè)備抽象為鍵盤和鼠標(biāo)輸入事件,底層支持鍵盤、GPM鼠標(biāo)、觸摸屏,以及用戶自己定義的設(shè)備等。

1 硬件設(shè)計(jì)
電路采用三星S3C2440處理器,實(shí)現(xiàn)了4×4矩陣鍵盤的輸入。矩陣鍵盤使用了處理器的4個GPIO和4個中斷,以中斷方式獲取鍵值,對應(yīng)的中斷引腳分別是EINT3、EINT9、EINT11、EINT13。GPIO引腳與矩陣鍵盤的行相連接作為輸入端,中斷引腳與矩陣鍵盤的列相連作為矩陣鍵盤的輸出端。開始時GPIO端輸出為低電平,當(dāng)有按鍵被按下時,按鍵所在列輸出低電平產(chǎn)生中斷,這時可以判斷按鍵所在的列。然后向每一行依次輸入高電平,如果列的輸出端由低電平變成高電平,則可以確定按鍵所在的行,這時鍵值被唯一鎖定。具體電路如圖1所示。

2 LinuX下鍵盤驅(qū)動
鍵盤設(shè)備屬于字符設(shè)備,鍵盤驅(qū)動應(yīng)該符合字符設(shè)備驅(qū)動的編寫模式。Linux采用內(nèi)核模塊機(jī)制,當(dāng)系統(tǒng)運(yùn)行的時候驅(qū)動程序可以以模塊的形式動態(tài)地加載和卸載,既方便了驅(qū)動的調(diào)試,又縮短了開發(fā)周期。在驅(qū)動中必須實(shí)現(xiàn)static int_init my_kb_init(void)函數(shù)和stat-
ic void_exit my_kb_exit(void)函數(shù)。static int_init my_kb_init(void)函數(shù)在內(nèi)核加載鍵盤驅(qū)動時被調(diào)用,注冊模塊為以后調(diào)用模塊函數(shù)預(yù)先做準(zhǔn)備,同時完成字符設(shè)備的注冊,分配主設(shè)備號,設(shè)置中斷類型,安裝中斷函數(shù),并且將所有中斷禁止。static void_exit my_kb_ exit(void)函數(shù)在卸載模塊時被調(diào)用,用于撤銷初始化函數(shù)所做的一切,否則在系統(tǒng)重新引導(dǎo)之前一些東西會殘留在系統(tǒng)中,導(dǎo)致模塊重新加載失敗。
a.JPG

鍵盤驅(qū)動中主要包括以下幾個子模塊:中斷處理子模塊、鍵盤掃描子模塊、消抖處理和組合鍵子模塊、重復(fù)按鍵子模塊等。驅(qū)動工作流程如圖2所示。
b.JPG

按鍵的識別主要是在中斷處理子模塊中完成的。當(dāng)系統(tǒng)有按鍵被按下時,驅(qū)動程序先關(guān)掉中斷,然后掃描鍵盤,確定哪個鍵按下,鍵盤按下和抬起都有中斷發(fā)生,這樣可以為用戶提供按下和抬起標(biāo)志,以判斷按鍵是單鍵按下還是多鍵齊按。在消抖處理和組合鍵子模塊中,加入Linux內(nèi)核定時器,鍵盤定時掃描,消除抖動得到穩(wěn)定鍵值。重復(fù)按鍵子模塊是根據(jù)Linux內(nèi)部的定時器,設(shè)置自動重復(fù)開始延時和自動重復(fù)延時,鍵盤按下后根據(jù)延時來完成按鍵事件,鍵值存入隊(duì)列供應(yīng)用程序讀取。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 3 下一頁

關(guān)鍵詞: 鍵盤 接口 嵌入式

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉