2C總線的鍵盤驅動的設計與實現"/>
999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于IC總線的鍵盤驅動的設計與實現

2008-04-12 00:00:00
現代電子技術 2008年20期

摘 要:鍵盤是嵌入式系統中非常重要的一個組件。該設計基于Windows CE5.0操作系統、PXA270處理器,采用MAX7347芯片,以I2C總線通信為基礎。不同于通常的掃描式鍵盤陣列,鍵值的掃描由芯片處理。芯片作為為I2C的外設器件,驅動通過與CPU的通信完成對鍵盤操作的管理。這種設計可以實現多達64個按鍵的管理,與CPU通信只需要3條總線,有效地節省了GPIO口。把一部分原先需要軟件完成的工作放到硬件中完成,提高了按鍵處理速度。實驗結果表明采用此方案鍵盤的處理速度迅速、有效、可行性很高。

關鍵詞:嵌入式系統;I2C;MAX7347;鍵盤與驅動

中圖分類號:TP391文獻標識碼: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 引 言

隨著嵌入式系統的飛速發展,嵌入式PC在許多領域得到廣泛應用。其中嵌入式鍵盤作為一種人機交互工具,有著非常重要的作用。通常的鍵盤設計采用陣列的設計方式,例如一個含有9個鍵值的鍵盤需要6個通用I/O口來實現通信。鍵盤的鍵值越多,需要的通用I/O口也越多。

I2C(Inter-Integrated Circuit)總線是一種由Philips公司開發的2線式串行總線,用于連接微控制器及其外圍設備。I2C總線最主要的優點是其簡單性和有效性。由于接口直接在組件上,因此I2C總線占用的空間非常小。I2C總線的另一個優點是,它支持多主控(multimastering),其中任何能夠進行發送和接收的設備都可以成為主總線。一個主控能夠控制信號的傳輸和時鐘頻率。但在任何時間點上只能有一個主控。

I2C的這些特點使得在許多設計中備受青睞,本文所介紹的MAX7347-7349系列芯片,即是一款I2C兼容芯片。它將鍵值掃描等一系列操作封裝在芯片內部完成,CPU只需要通過I2C總線與芯片通信,通過向芯片寫入一定的命令完成某些操作。從而簡化了鍵盤驅動的處理。而且由于I2C支持多主控,因此不影響系統其他設備的操作。整個過程只需要3個通用I/O口與CPU通信,可以處理多達64個鍵值的響應,有效地節省了通用I/O口。

2 基本原理

2.1 鍵盤驅動實現原理

通常的鍵盤采用矩陣式原理,例如對于一個含20個鍵值的鍵盤,采用4×5的矩陣陣列,即4行5列。其中行和列直接與CPU的I/O口相連,4個I/O口作為中斷I/O口。一旦外部有鍵按下,就會產生中斷,由于鍵盤被按下后,該鍵對應的行和列被連通,因此根據判斷各列對應的I/O口的電平,可以得到被按下鍵的位置,從而采取相應的響應。

本文所采用的MAX7347-7349系列芯片內部有一個FIFO隊列,他在內部完成按鍵去抖、掃描鍵值、按鍵自動重復,以及某些時刻報警等一系列復雜的操作,而鍵盤驅動本身是需要通過發送一系列的命令來得到所需要的某些狀態值,從而進行相應的操作。

2.2 I2C總線通信原理

I2C總線是由數據線SDA和時鐘SCL構成的串行總線,可發送和接收數據。各種被控制電路均并聯在這條總線上,每個電路和模塊都有惟一的地址。CPU會發出地址碼用來選址,即接通需要控制的電路。所以,各控制電路雖然掛在同一條總線上,卻彼此獨立,互不相關。

I2C總線定義了嚴格的傳輸信號來完成一次傳輸。

開始信號:當SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數據。

結束信號:當SCL為低電平時,SDA由低電平向高電平跳變,結束傳送數據。如圖1所示。

注意:SDA線上的數據狀態僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態的改變會被識別為起始和停止條件。

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

3 具體實現

3.1 接口電路

如圖3所示MAX7347芯片電路示意圖。

其中11個腳為鍵盤陣列輸入連接到鍵盤外設,3行8列,最多可以控制24個不同按鍵。3個腳與PXA 270直接通信,INT為中斷腳,按鍵按下為低電平,SCL為I2C兼容串行時鐘輸入,SDA為I2C兼容串行I/O口。

當有鍵按下時,連接到鍵盤的11個腳會有電平的變化,芯片會根據電平的變化得到按下鍵的鍵值,然后存放在芯片內部的FIFO中,同時把INT腳下拉為低電平。此時鍵盤驅動在檢測到INT變低之后會通過SDA向芯片發送一系列命令,芯片通過SDA傳回給驅動相應的狀態及值。SCL和SDA的電平變化嚴格遵循2.2節介紹的I2C總線通信信號規律。

3.2 軟件實現框架

Windows CE操作系統驅動層分為MDD層(Model Device Driver,模型設備驅動)和PDD(Platform Dependent Driver,平臺相關驅動)兩層,框架結構如圖4所示。MDD層是抽象出來的一些功能,不與硬件直接相關,他接收PDD層傳來的數據,完成處理得到的鍵值,發出消息通知處理處理響應操作的程序,PDD層與硬件直接相關,實現硬件接口以及獲得的硬件特性傳遞給MDD層。

驅動實現流程,PDD層主要實現鍵盤的監控,開辟兩個線程,線程MaxKeyCheckPro監控INT腳的電平變化。當有鍵按下,INT拉低,此時在I2C總線準備完畢的情況下,通過I2C總線發送讀取鍵值的命令讀取芯片的FIFO,芯片在接收到命令之后會將FIFO中存儲的鍵值通過I2C總線發出傳回給線程MaxKeyCheckPro,同時發出通知給線程KeybdIstThreadProc,將傳遞回來的鍵值傳給線程KeybdIstThreadProc,再由線程KeybdIstThreadProc負責將鍵值傳給MDD層,MDD層負責存儲鍵值,并發出消息通知相應的程序對鍵值做出響應。

采用兩個線程的目的是讓各自完成自己的操作,不會造成相互的影響,在按鍵頻繁觸發的情況下,線程MaxKeyCheckPro可以在快速得到鍵值傳遞出去之后立即等待下一次按鍵的發生,不會因為在處理其他的操作而使得下一次按鍵的響應有所延遲。

3.3 I2C總線的通信流程

由于按鍵的頻繁按下會導致不停地使用I2C總線讀取芯片FIFO,所以防止2次讀寫之間的干擾(即在一次讀寫沒有完成之前另一次讀寫操作也占用I2C總線,兩次的數據會造成紊亂)是一個重要的問題。

針對一次讀寫操作,考慮到其不可打斷性以防止數據的破壞,采用mutex互斥鎖。即每次只允許1個讀寫操作占用I2C總線。在1次讀寫操作開始之前,等待互斥鎖,直到讀寫操作完畢,釋放互斥鎖。這樣當在一次讀寫沒有完成之前,另一次讀寫無法占用I2C總線,而只能等待。具體流程如圖5所示:

3.4 具體讀寫操作

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

但值得注意的是,每次按鍵按下之后,INT腳會被拉高,但是只有在將FIFO清空之后INT才會被拉低,拉低之后如果繼續有鍵盤按下,會繼續把鍵值存放在FIFO中。所以每次的讀取操作需要清空FIFO。但是在實際應用中發現當鍵盤在被快速按下時,對于FIFO中的操作都做出響應會影響系統的性能,所以選擇丟掉FIFO隊列中其他鍵值,只保留最后一個。

4 性能分析

整個過程CPU通過3根主線和芯片通信,實現了按鍵操作的快速響應和處理,可以控制最多達64個按鍵的防抖及響應,由于芯片封裝了一部分功能,由硬件來處理使得速度變快。由于I2C的多主控特點,不會影響掛在I2C上的其他外設的工作和性能。

5 結 語

本文介紹基于PXA270處理器和Windows CE 5.0操作系統上的鍵盤驅動的設計和實現。目前已經在本平臺上穩定運行,具有很好的按鍵處理能力。

參考文獻

[1] 傅曦,陳黎,董磊鋆,等.Windows CE嵌入式開發入門基于Xscale架構\\.北京:人民郵電出版社,2006.

[2]Intel Corporation.IntelRPXA27x 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]石秀民.嵌入式系統設計與開發實驗[M].北京:北京航空航天大學出版社,2006.

[6]田澤.嵌入式系統開發與應用實驗教程[M].北京:北京航空航天大學出版社,2004.

[7]陳向群,王雷,馬洪兵.Windows CE.NET系統分析及實驗教程[M].北京:機械工業出版社,2003.

[8]Microsoft 希望.Microsoft Windows CE Device Driver Kit設備驅動程序開發指南[M].北京:希望電子出版社,1999.

[9]MAX7347系列芯片文檔\\;Maxim Integrated Products;www.maxim-ic.com.cn.

[10]何立民.I2C總線應用系統設計\\.北京:北京航空航天大學出版社,2002.

作者簡介 賀 君 女,1984年出生,安徽蚌埠人,東南大學電子科學與工程學院國家專用集成電路工程技術研究中心碩士研究生。研究方向為微電子與固體電子學、嵌入式系統設計。

張 哲 男,1976年出生,東南大學電子工程系助教。

主站蜘蛛池模板: 精品福利视频导航| 国产精品免费入口视频| 少妇极品熟妇人妻专区视频| 久久成人免费| 老司机精品一区在线视频 | 欧美午夜一区| 美臀人妻中出中文字幕在线| 四虎精品国产永久在线观看| 99久视频| 黄色污网站在线观看| 国产成人综合日韩精品无码首页| 人妻少妇乱子伦精品无码专区毛片| 成人在线天堂| 国产成人综合亚洲网址| 精品撒尿视频一区二区三区| 五月天福利视频| 欧美国产视频| 国产欧美精品专区一区二区| AV天堂资源福利在线观看| 免费日韩在线视频| 久久国产精品无码hdav| 国产91小视频| 欧美一级高清免费a| 日韩av手机在线| 一级成人a毛片免费播放| 亚洲第一在线播放| 看av免费毛片手机播放| 亚洲精品自产拍在线观看APP| 毛片a级毛片免费观看免下载| 亚洲Av激情网五月天| 久久夜色精品国产嚕嚕亚洲av| 在线观看国产精品一区| 一本大道香蕉高清久久| 91在线免费公开视频| 人妻中文字幕无码久久一区| 无码国内精品人妻少妇蜜桃视频 | 国产精品99久久久久久董美香| 噜噜噜综合亚洲| a毛片在线免费观看| 久久婷婷六月| 国产不卡一级毛片视频| 东京热av无码电影一区二区| 色综合激情网| 免费黄色国产视频| 国产99精品视频| 热热久久狠狠偷偷色男同| 亚洲九九视频| 精品国产中文一级毛片在线看| 欧美午夜在线视频| 久久99国产综合精品女同| 国产成人高清亚洲一区久久| 久久久久国产一级毛片高清板| m男亚洲一区中文字幕| 久久一色本道亚洲| 亚洲六月丁香六月婷婷蜜芽| 国产精女同一区二区三区久| 亚洲aⅴ天堂| 无码日韩视频| 国产美女免费| 日韩欧美国产综合| 亚洲区欧美区| 国精品91人妻无码一区二区三区| 亚洲成人www| 五月婷婷导航| 国国产a国产片免费麻豆| 国产SUV精品一区二区6| 国产福利大秀91| 欧美国产日韩在线| www精品久久| 日韩小视频在线观看| 日韩成人免费网站| 亚洲欧洲日产无码AV| 亚洲精品卡2卡3卡4卡5卡区| 丝袜高跟美脚国产1区| 久久久久夜色精品波多野结衣| 亚洲综合18p| 九色在线视频导航91| 日韩在线播放欧美字幕| 啊嗯不日本网站| 欧美 国产 人人视频| 一区二区午夜| 91国内外精品自在线播放|