2C總線的鍵盤驅(qū)動的設(shè)計(jì)與實(shí)現(xiàn)"/>
999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?摘 要:鍵盤是嵌入式系統(tǒng)中非常重要的一個組件。該設(shè)計(jì)基于Windows CE5.0操作系統(tǒng)、PXA270處理器,采用MAX7347芯片,以I2C總線通信為基礎(chǔ)。不同于通常的掃描式鍵盤陣列,鍵值的掃描由芯片處理。芯片作為為I2C的外設(shè)器件,驅(qū)動通過與CPU的通信完成對鍵盤操作的管理。這種設(shè)計(jì)可以實(shí)現(xiàn)多達(dá)64個按鍵的管理,與CPU通信只需要3條總線,有效地節(jié)省了GPIO口。把一部分原先需要軟件完成的工作放到硬件中完成,提高了按鍵處理速度。實(shí)驗(yàn)結(jié)果表明采用此方案鍵盤的處理速度迅速、有效、可行性很高。
關(guān)鍵詞:嵌入式系統(tǒng);I2C;MAX7347;鍵盤與驅(qū)動
中圖分類號:TP391文獻(xiàn)標(biāo)識碼:B文章編號:1004373X(2008)2006503
Design and Realization of the Keyboard Driver Based on I2C Bus
HE Jun,ZHANG Zhe
(National ASIC System Engineering Center,Southeast University,Nanjing,210096,China)
Abstract:Keyboard is one of the most important elements in embeded system.This design on the basis of PXA270 processor and WinCE operating system selects MAX7347 to communicate with CPU through I2C bus.Different from the common drivers,the scan of key value is done by the chip.As a peripheral of I2C,the driver controls the operation of the keyboard.The designation could process as much as 64 key values with 3 GPIO to communicate with CPU.It saves the GPIOs effectively.The designation shortens time of the whole process by putting some works from the software to hardware.The result of the experiment shows that this designation is available to accomplish all the work efficiently.
Keywords:embedded system;I2C;MAX7347;keyboard driver
1 引 言
隨著嵌入式系統(tǒng)的飛速發(fā)展,嵌入式PC在許多領(lǐng)域得到廣泛應(yīng)用。其中嵌入式鍵盤作為一種人機(jī)交互工具,有著非常重要的作用。通常的鍵盤設(shè)計(jì)采用陣列的設(shè)計(jì)方式,例如一個含有9個鍵值的鍵盤需要6個通用I/O口來實(shí)現(xiàn)通信。鍵盤的鍵值越多,需要的通用I/O口也越多。
I2C(Inter-Integrated Circuit)總線是一種由Philips公司開發(fā)的2線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線最主要的優(yōu)點(diǎn)是其簡單性和有效性。由于接口直接在組件上,因此I2C總線占用的空間非常小。I2C總線的另一個優(yōu)點(diǎn)是,它支持多主控(multimastering),其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線。一個主控能夠控制信號的傳輸和時鐘頻率。但在任何時間點(diǎn)上只能有一個主控。
I2C的這些特點(diǎn)使得在許多設(shè)計(jì)中備受青睞,本文所介紹的MAX7347-7349系列芯片,即是一款I(lǐng)2C兼容芯片。它將鍵值掃描等一系列操作封裝在芯片內(nèi)部完成,CPU只需要通過I2C總線與芯片通信,通過向芯片寫入一定的命令完成某些操作。從而簡化了鍵盤驅(qū)動的處理。而且由于I2C支持多主控,因此不影響系統(tǒng)其他設(shè)備的操作。整個過程只需要3個通用I/O口與CPU通信,可以處理多達(dá)64個鍵值的響應(yīng),有效地節(jié)省了通用I/O口。
2 基本原理
2.1 鍵盤驅(qū)動實(shí)現(xiàn)原理
通常的鍵盤采用矩陣式原理,例如對于一個含20個鍵值的鍵盤,采用4×5的矩陣陣列,即4行5列。其中行和列直接與CPU的I/O口相連,4個I/O口作為中斷I/O口。一旦外部有鍵按下,就會產(chǎn)生中斷,由于鍵盤被按下后,該鍵對應(yīng)的行和列被連通,因此根據(jù)判斷各列對應(yīng)的I/O口的電平,可以得到被按下鍵的位置,從而采取相應(yīng)的響應(yīng)。
本文所采用的MAX7347-7349系列芯片內(nèi)部有一個FIFO隊(duì)列,他在內(nèi)部完成按鍵去抖、掃描鍵值、按鍵自動重復(fù),以及某些時刻報警等一系列復(fù)雜的操作,而鍵盤驅(qū)動本身是需要通過發(fā)送一系列的命令來得到所需要的某些狀態(tài)值,從而進(jìn)行相應(yīng)的操作。
2.2 I2C總線通信原理
I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。各種被控制電路均并聯(lián)在這條總線上,每個電路和模塊都有惟一的地址。CPU會發(fā)出地址碼用來選址,即接通需要控制的電路。所以,各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。
I2C總線定義了嚴(yán)格的傳輸信號來完成一次傳輸。
開始信號:當(dāng)SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
結(jié)束信號:當(dāng)SCL為低電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。如圖1所示。
注意:SDA線上的數(shù)據(jù)狀態(tài)僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變會被識別為起始和停止條件。

應(yīng)答信號:接收數(shù)據(jù)的IC在接收到8 b數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出1個信號后,等待受控單元發(fā)出1個應(yīng)答信號,CPU接收到應(yīng)答信號后,根據(jù)實(shí)際情況做出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障。如圖2所示。

3 具體實(shí)現(xiàn)
3.1 接口電路
如圖3所示MAX7347芯片電路示意圖。
其中11個腳為鍵盤陣列輸入連接到鍵盤外設(shè),3行8列,最多可以控制24個不同按鍵。3個腳與PXA 270直接通信,INT為中斷腳,按鍵按下為低電平,SCL為I2C兼容串行時鐘輸入,SDA為I2C兼容串行I/O口。
當(dāng)有鍵按下時,連接到鍵盤的11個腳會有電平的變化,芯片會根據(jù)電平的變化得到按下鍵的鍵值,然后存放在芯片內(nèi)部的FIFO中,同時把INT腳下拉為低電平。此時鍵盤驅(qū)動在檢測到INT變低之后會通過SDA向芯片發(fā)送一系列命令,芯片通過SDA傳回給驅(qū)動相應(yīng)的狀態(tài)及值。SCL和SDA的電平變化嚴(yán)格遵循2.2節(jié)介紹的I2C總線通信信號規(guī)律。

3.2 軟件實(shí)現(xiàn)框架
Windows CE操作系統(tǒng)驅(qū)動層分為MDD層(Model Device Driver,模型設(shè)備驅(qū)動)和PDD(Platform Dependent Driver,平臺相關(guān)驅(qū)動)兩層,框架結(jié)構(gòu)如圖4所示。MDD層是抽象出來的一些功能,不與硬件直接相關(guān),他接收PDD層傳來的數(shù)據(jù),完成處理得到的鍵值,發(fā)出消息通知處理處理響應(yīng)操作的程序,PDD層與硬件直接相關(guān),實(shí)現(xiàn)硬件接口以及獲得的硬件特性傳遞給MDD層。

驅(qū)動實(shí)現(xiàn)流程,PDD層主要實(shí)現(xiàn)鍵盤的監(jiān)控,開辟兩個線程,線程MaxKeyCheckPro監(jiān)控INT腳的電平變化。當(dāng)有鍵按下,INT拉低,此時在I2C總線準(zhǔn)備完畢的情況下,通過I2C總線發(fā)送讀取鍵值的命令讀取芯片的FIFO,芯片在接收到命令之后會將FIFO中存儲的鍵值通過I2C總線發(fā)出傳回給線程MaxKeyCheckPro,同時發(fā)出通知給線程KeybdIstThreadProc,將傳遞回來的鍵值傳給線程KeybdIstThreadProc,再由線程KeybdIstThreadProc負(fù)責(zé)將鍵值傳給MDD層,MDD層負(fù)責(zé)存儲鍵值,并發(fā)出消息通知相應(yīng)的程序?qū)︽I值做出響應(yīng)。
采用兩個線程的目的是讓各自完成自己的操作,不會造成相互的影響,在按鍵頻繁觸發(fā)的情況下,線程MaxKeyCheckPro可以在快速得到鍵值傳遞出去之后立即等待下一次按鍵的發(fā)生,不會因?yàn)樵谔幚砥渌牟僮鞫沟孟乱淮伟存I的響應(yīng)有所延遲。
3.3 I2C總線的通信流程
由于按鍵的頻繁按下會導(dǎo)致不停地使用I2C總線讀取芯片F(xiàn)IFO,所以防止2次讀寫之間的干擾(即在一次讀寫沒有完成之前另一次讀寫操作也占用I2C總線,兩次的數(shù)據(jù)會造成紊亂)是一個重要的問題。
針對一次讀寫操作,考慮到其不可打斷性以防止數(shù)據(jù)的破壞,采用mutex互斥鎖。即每次只允許1個讀寫操作占用I2C總線。在1次讀寫操作開始之前,等待互斥鎖,直到讀寫操作完畢,釋放互斥鎖。這樣當(dāng)在一次讀寫沒有完成之前,另一次讀寫無法占用I2C總線,而只能等待。具體流程如圖5所示:

3.4 具體讀寫操作
這里的鍵盤驅(qū)動與普通鍵盤驅(qū)動不同,不需要通過判斷鍵盤矩陣的電平變化來得到鍵值,這些操作由芯片內(nèi)部完成。鍵盤控制器對按鍵操作去抖并且自動存入FIFO中,因此所需要做的操作就是在檢測到鍵盤按下之后讀取FIFO。如圖6所示。

但值得注意的是,每次按鍵按下之后,INT腳會被拉高,但是只有在將FIFO清空之后INT才會被拉低,拉低之后如果繼續(xù)有鍵盤按下,會繼續(xù)把鍵值存放在FIFO中。所以每次的讀取操作需要清空FIFO。但是在實(shí)際應(yīng)用中發(fā)現(xiàn)當(dāng)鍵盤在被快速按下時,對于FIFO中的操作都做出響應(yīng)會影響系統(tǒng)的性能,所以選擇丟掉FIFO隊(duì)列中其他鍵值,只保留最后一個。
4 性能分析
整個過程CPU通過3根主線和芯片通信,實(shí)現(xiàn)了按鍵操作的快速響應(yīng)和處理,可以控制最多達(dá)64個按鍵的防抖及響應(yīng),由于芯片封裝了一部分功能,由硬件來處理使得速度變快。由于I2C的多主控特點(diǎn),不會影響掛在I2C上的其他外設(shè)的工作和性能。
5 結(jié) 語
本文介紹基于PXA270處理器和Windows CE 5.0操作系統(tǒng)上的鍵盤驅(qū)動的設(shè)計(jì)和實(shí)現(xiàn)。目前已經(jīng)在本平臺上穩(wěn)定運(yùn)行,具有很好的按鍵處理能力。
參考文獻(xiàn)
[1] 傅曦,陳黎,董磊鋆,等.Windows CE嵌入式開發(fā)入門基于Xscale架構(gòu)\\.北京:人民郵電出版社,2006.
[2]Intel Corporation.IntelRPXA27x Processor Family Developer′s Manual[S].April 2004.
[3]Microsoft.Microsoft Developer Network Library.April\\.2005.
[4]Microsoft.Microsoft Windows CE.NET HLEP[S].March2003.
[5]石秀民.嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)實(shí)驗(yàn)[M].北京:北京航空航天大學(xué)出版社,2006.
[6]田澤.嵌入式系統(tǒng)開發(fā)與應(yīng)用實(shí)驗(yàn)教程[M].北京:北京航空航天大學(xué)出版社,2004.
[7]陳向群,王雷,馬洪兵.Windows CE.NET系統(tǒng)分析及實(shí)驗(yàn)教程[M].北京:機(jī)械工業(yè)出版社,2003.
[8]Microsoft 希望.Microsoft Windows CE Device Driver Kit設(shè)備驅(qū)動程序開發(fā)指南[M].北京:希望電子出版社,1999.
[9]MAX7347系列芯片文檔\\;Maxim Integrated Products;www.maxim-ic.com.cn.
[10]何立民.I2C總線應(yīng)用系統(tǒng)設(shè)計(jì)\\.北京:北京航空航天大學(xué)出版社,2002.
作者簡介 賀 君 女,1984年出生,安徽蚌埠人,東南大學(xué)電子科學(xué)與工程學(xué)院國家專用集成電路工程技術(shù)研究中心碩士研究生。研究方向?yàn)槲㈦娮优c固體電子學(xué)、嵌入式系統(tǒng)設(shè)計(jì)。
張 哲 男,1976年出生,東南大學(xué)電子工程系助教。