主頁(yè)(http://www.130131.com):基于嵌入式Linux的矩陣鍵盤(pán)驅(qū)動(dòng)程序研究與開(kāi)發(fā)(2) 4 矩陣鍵盤(pán)驅(qū)動(dòng)程序設(shè)計(jì)及測(cè)試 其次,實(shí)現(xiàn)矩陣鍵盤(pán)驅(qū)動(dòng)的探測(cè)和移除函數(shù)。在探測(cè)函數(shù)中,初始化行數(shù)、列數(shù)、中斷號(hào)以及按鍵映射表。然后分配內(nèi)存空間和輸入設(shè)備,初始化omap_kp這個(gè)設(shè)備結(jié)構(gòu)體和輸入設(shè)備結(jié)構(gòu)體input_dev,初始化定時(shí)器,設(shè)置輸入設(shè)備可以報(bào)告的事件類型,并注冊(cè)輸入設(shè)備。最后申請(qǐng)中斷,申請(qǐng)中斷成功后,使能中斷。移除函數(shù)則完成相反的工作。 最后,實(shí)現(xiàn)矩陣鍵盤(pán)驅(qū)動(dòng)的核心部分,也就是中斷部分。眾所周知,在Linux的中斷處理中分為2部分,分別是頂半部(top half)和底半部(bottom half)。頂半部完成盡可能少的比較緊急的功能,它只是簡(jiǎn)單地讀取寄存器中的中斷狀態(tài)并清除中斷標(biāo)志后就進(jìn)行“登記中斷”的工作!暗怯浿袛唷币馕吨鴮⒌装氩刻幚沓绦驋斓皆撛O(shè)備的底半部執(zhí)行隊(duì)列中去。這樣。頂半部執(zhí)行的速度就會(huì)很快,可以服務(wù)更多的中斷請(qǐng)求。底半部,是實(shí)現(xiàn)中斷處理的真正部分,它來(lái)完成一些延緩的耗時(shí)任務(wù),首先通過(guò)列掃描法檢測(cè)各個(gè)按鍵狀態(tài)有沒(méi)有變化,若有變化再判斷是哪一列哪一行發(fā)生變化,按鍵的行和列確定以后,通過(guò)鍵值映射表來(lái)查找其有沒(méi)有對(duì)應(yīng)的鍵值;若有則通過(guò)input_report_key()向內(nèi)核報(bào)告按鍵的鍵值;否則,對(duì)應(yīng)的按鍵沒(méi)有定義鍵值,向內(nèi)核報(bào)告為假按鍵(Spurious Key)。然后,延時(shí)(1/20)Hz再判斷按鍵是否抬起。 驅(qū)動(dòng)開(kāi)發(fā)完成后,以模塊方式加入到內(nèi)核,并在MiniGui和Qtopia下進(jìn)行了測(cè)試,在Qtopia下測(cè)試結(jié)果如圖2所示,證明矩陣鍵盤(pán)驅(qū)動(dòng)工作正常、有效。 5 結(jié) 語(yǔ) (中國(guó)集群通信網(wǎng) | 責(zé)任編輯:陳曉亮) |




