日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于ARM9的多行列鍵盤設(shè)計及其驅(qū)動實現(xiàn)

1  引  言

許多嵌入式系統(tǒng),尤其是一些人機交互(HMI)較頻繁的嵌入式系統(tǒng),鍵盤是一種應(yīng)用最為廣泛的輸入設(shè)備。由于嵌入式設(shè)備的功能互異性,為其提供一種通用性鍵盤是不可行的,一般都需要根據(jù)嵌入式系統(tǒng)的實際功能來設(shè)計所需的特殊鍵盤,并實現(xiàn)相應(yīng)的驅(qū)動程序。

在嵌入式設(shè)備上擴展鍵盤的常用方式是通過使用CPU的GPIO端口掃描實現(xiàn)的,顯然,這種方式會占用系統(tǒng)的GPIO資源,特別是在GPIO資源比較緊張而按鍵又較多的系統(tǒng),這個問題就特別突出。當(dāng)然,也可以通過外擴GPIO(如8255等)或外擴專用的鍵盤接口(如8279等)方式實現(xiàn),但這種方式顯然增加了系統(tǒng)的復(fù)雜度,在實際系統(tǒng)設(shè)計中頗感不便。

本文以在ARM9(AT91RM9200)嵌入式微處理器上實現(xiàn)一個POS機鍵盤(8×8)為例,呈現(xiàn)了一種在嵌入式設(shè)備上擴展多行列鍵盤的新設(shè)計思路,并在ARM-Linux系統(tǒng)實現(xiàn)了鍵盤的驅(qū)動程序。

2、接口電路的硬件設(shè)計

本文通過一個設(shè)計實例,說明如何使用一種比較簡單的方式,來實現(xiàn)一個8×8的POS機矩陣鍵盤,POS機所采用的微處理器是AT91RM9200芯片。AT91RM9200是ATMEL公司生產(chǎn)的一款高性能的32位ARM9處理器,它是一款通用工業(yè)級ARM芯片,在工業(yè)控制、智能儀器儀表等領(lǐng)域內(nèi)得到了大量的應(yīng)用[3,4],其詳細芯片特性可參見文獻[2]。

在AT91RM9200上擴展鍵盤,一般都是通過其GPIO端口來實現(xiàn)。AT91RM9200雖提供了4×32個可編程的GPIO端口。但為減小芯片體積和功耗,其許多GPIO端口都是與系統(tǒng)的外圍設(shè)備控制器端口或地址線、數(shù)據(jù)線進行復(fù)用的,所以實際可用于擴展的GPIO端口是很少的。而對于一個 8×8鍵盤,若采用傳統(tǒng)的GPIO端口擴展方式,則需要16個GPIO,這在一個比較復(fù)雜的POS系統(tǒng)中是很難滿足的,因此需要采用其他方式來解決這個問題。


圖1  鍵盤接口原理圖

本文通過數(shù)據(jù)鎖存的方式,充分利用32位處理器的數(shù)據(jù)寬度優(yōu)勢,使用數(shù)據(jù)線來替代鍵盤擴展所需的GPIO端口,從而減少對系統(tǒng)GPIO資源的占用。鍵盤接口的實現(xiàn)原理如圖1所示。在圖1所示的電路中,U1301(74LVCC4245)為三態(tài)緩沖器,U1302(74HC574)為鎖存器,系統(tǒng)工作原理描述如下:

U1301的nOE端連接系統(tǒng)的譯碼輸出nKey_CS,部件地址由系統(tǒng)譯碼電路決定,當(dāng)向該地址寫數(shù)據(jù)時,nKey_CS信號為低電平,數(shù)據(jù)可以通過U1301,同時,nKey_CS信號經(jīng)兩級反相器延時后作為鎖存信號將數(shù)據(jù)鎖存到U1302的輸出端,作為鍵盤的行掃描信號,而鍵盤的列掃描信號則仍然使用系統(tǒng)的GPIO。依次向每行送出低電平信號,同時檢測連接在GPIO的列信號,即可實現(xiàn)對鍵盤的掃描。在本系統(tǒng)中,只使用了系統(tǒng)32位數(shù)據(jù)的低8 位作為行掃描信號,在實現(xiàn)8×8矩陣鍵盤掃描的情況下,僅需要占用8個GPIO口,如果采用同樣的方式,分別使用16位數(shù)據(jù)或32位數(shù)據(jù)作為行掃描信號,則只需要占用4個或2個GPIO,顯然,與傳統(tǒng)的方式相比較,該方式可以大大節(jié)省系統(tǒng)的GPIO資源。

3、鍵盤的驅(qū)動模塊設(shè)計

完成接口電路的設(shè)計之后,還需要編寫相應(yīng)的鍵盤驅(qū)動模塊。本文采用AT91RM9200芯片中已經(jīng)運行了ARM-Linux操作系統(tǒng),因此給鍵盤的驅(qū)動程序開發(fā)提供了很大的方便。鍵盤的驅(qū)動模塊可分為硬件初始化、文件操作函數(shù)的實現(xiàn)以及鍵盤掃描程序三個部分。

3.1  硬件初始化

鍵盤驅(qū)動程序的開發(fā)模式與Linux系統(tǒng)中一般字符設(shè)備的驅(qū)動開發(fā)步驟相似,關(guān)于Linux設(shè)備驅(qū)動開發(fā)的詳細分析可參考文獻[1]。首先需完成的是驅(qū)動程序模塊的初始化函數(shù)和清除函數(shù)。在初始化函數(shù)中,除完成模塊注冊外,還應(yīng)進行硬件初始化,下面是本文根據(jù)AT91RM9200芯片的GPIO控制器的特性[2],在模塊的初始化函數(shù)中的硬件初始化的偽代碼。
……
設(shè)置所使用GPIO端口為GPIO控制器控制
設(shè)置所使用GPIO端口的類型為輸入
使能所使用GPIO端口的輸入毛刺濾波功能
使能相應(yīng)的GPIO控制器時鐘
取指定地址的虛擬地址并向地址寫入數(shù)據(jù)0x0
……

3.2  文件操作函數(shù)的實現(xiàn)

因為鍵盤在系統(tǒng)中一般只起輸入作用,因此在鍵盤驅(qū)動程序的file_operations結(jié)構(gòu)中,必須實現(xiàn)的文件操作函數(shù)只有文件讀函數(shù)。

另外在實際應(yīng)用中,為防止鍵盤按鍵的丟失,被按下鍵的掃描代碼通常都放置在一個緩沖區(qū)內(nèi),直到應(yīng)用程序準備處理一個按鍵為止。緩沖區(qū)大小一般視應(yīng)用系統(tǒng)的需求而定,本例中緩沖區(qū)大小取為20個按鍵代碼。而緩沖區(qū)的實現(xiàn)是以一個環(huán)形隊列的形式實現(xiàn)。當(dāng)按鍵按下后,掃描代碼將被放置在隊列的下一個空位置,若緩沖區(qū)已滿,則下一按鍵將會被丟棄。應(yīng)用程序則通過鍵盤的讀函數(shù)read()從緩沖區(qū)的位置指針處起,讀取所需個數(shù)的鍵碼;完成讀取操作后,還需將已被讀取的鍵碼從緩沖隊列中刪除,并更新緩沖區(qū)的位置指針。下面給出了本例中,實現(xiàn)的鍵盤讀函數(shù)key_read()的偽代碼:
ssize_t key_read(……)
{
定義并初始化變量;
if 緩沖區(qū)中可被讀取的鍵碼數(shù)大于0;
    取得鍵碼放置緩沖區(qū)的自旋鎖;
    計算此次讀操作可讀取的代碼個數(shù)M(緩沖區(qū)中可讀取的代碼個數(shù)與程序要求個數(shù)之間的較小者);
    從緩沖區(qū)位置指針開始,從緩沖區(qū)中拷貝M個的鍵碼到用戶空間緩沖區(qū)內(nèi);
    更新緩沖區(qū)的位置指針和緩沖區(qū)中還剩余的鍵碼個數(shù);
    釋放自旋鎖
    返回此次讀操作成功讀取的代碼個數(shù)。
  Else
返回-1
}

[!--empirenews.page--]

3.3  鍵盤掃描程序

鍵盤的工作原理是通過鍵盤的行線和列線的狀態(tài)來判斷鍵盤中有無按鍵被按下。鍵盤掃描程序的功能就是用來判斷處于按下狀態(tài)的按鍵的具體位置及取得相應(yīng)的鍵碼值,因此掃描程序的設(shè)計是鍵盤驅(qū)動模塊實現(xiàn)的核心。

鍵盤掃描程序的實現(xiàn)主要有兩種,即輪詢方式和中斷方式[5]。在本例中,利用操作系統(tǒng)定時器隊列與輪詢掃描方式結(jié)合的方法對鍵盤的驅(qū)動程序進行了設(shè)計,主要是基于以下兩個方面的原因。其一是AT91RM9200芯片的中斷信號線是非常寶貴的硬件資源,每一組GPIO端口只配置了一根中斷信號線,即32個GPIO端口共享一條信號線。這樣若采用中斷方式,則至少需要占用一條芯片中斷信號線,對多行列的鍵盤,如果其所采用的 GPIO端口不是來自于同一組時,就需要占用多條中斷信號線。而且若其他設(shè)備使用的GPIO端口與鍵盤使用的GPIO口屬于同一組,那么在兩種設(shè)備的驅(qū)動程序設(shè)計中,必須進行中斷共享,這樣不僅使系統(tǒng)的軟件設(shè)計更為復(fù)雜,且易產(chǎn)生中斷丟失和中斷竟態(tài)等問題,使設(shè)備性能受到影響。其二鍵盤是系統(tǒng)中屬于一種相對低速的設(shè)備,采用輪詢方式完全可以滿足鍵盤的輸入要求。

ARM-Linux操作系統(tǒng)提供了良好的定時器機制,因此通過簡單定時器操作,就可以實現(xiàn)以固定間隔對鍵盤的狀態(tài)進行掃描并對按鍵事件進程處理,固定間隔的大小可根據(jù)系統(tǒng)需求進行配置,定義器的詳細操作可參見文獻[1]。如前所述,鍵盤掃描程序的功能就是對鍵盤的狀態(tài)進行判斷和處理。若無按鍵按下,則掃描直接返回;若有按鍵按下,則對被按下鍵的位置進行判斷,并將相應(yīng)的鍵碼值寫入緩沖區(qū)中。因為本例中的鍵盤是為POS機配置,因此按鍵的準確性是至關(guān)重要,因此在掃描代碼中對按鍵值進行了多次驗證,下面是本例中使用的鍵盤掃描程序的偽代碼:
int Scan_Keyboard()
   {

定義并初始化變量;

取得鍵碼放置緩沖區(qū)的自旋鎖;

if   緩沖區(qū)中還有空;

① 依次判斷各GPIO口的狀態(tài),若無低電平,則無鍵按下,直接退出if語句;否則,有鍵按下,且當(dāng)前檢驗的GPIO口連接的行線即為按鍵所在的行;

② 給鍵盤列線連接的數(shù)據(jù)線依次送入高電平,再通過判斷按鍵行線所在的GPIO端口的電平狀態(tài),得到按鍵所在的列;

延時一小段時間,以消除鍵盤抖動;

③ 再向給鍵盤列線連接的數(shù)據(jù)線全送低電平,使用代碼段①再次判斷是否有鍵按下,若有,則取得按鍵所在的行;

④ 同樣使用代碼段②重新判斷按鍵所在的列;

⑤ 判斷第一次得到的按鍵的行與列是否與第二次完全一樣,若完全相同,則可進入下一步,否則退出if語句;

⑥ 重新向給鍵盤列線連接的數(shù)據(jù)線全送低電平,并判斷按鍵是否彈起,若仍處于按下狀態(tài),則繼續(xù)等待,否則根據(jù)行與列,轉(zhuǎn)化為相應(yīng)鍵值,并寫入緩沖區(qū);

if語句結(jié)束;

釋放自旋鎖;

函數(shù)返回 0;
}

完成驅(qū)動程序代碼編寫后,就可以將鍵盤的驅(qū)動程序加載到ARM-Linux內(nèi)核中了,既可以采用靜態(tài)加載方式,也可以采用動態(tài)方式進行加載。加載后,在應(yīng)用程序中鍵盤的編程使用方式與其他字符設(shè)備一樣。采用本文所述方式設(shè)計的鍵盤,目前已配置在筆者參與開發(fā)的POS機中交用戶使用,據(jù)用戶測試,鍵盤的輸入準確率和反應(yīng)時間都達到了設(shè)計要求。

4、結(jié)束語

本文以運行ARM-Linux的AT91RM9200系統(tǒng)為基礎(chǔ),提出了一種在ARM9上擴展特殊鍵盤的新設(shè)計方法,并對鍵盤擴展的硬件設(shè)計和驅(qū)動軟件開發(fā)都作了詳細說明。本設(shè)計方法利用數(shù)據(jù)鎖存方式替代了常規(guī)的GPIO擴展,提高了系統(tǒng)硬件的資源利用率,這一思想也為在其他嵌入式設(shè)備擴展多行列鍵盤提供了一種新的設(shè)計思路。
 
參考文獻
[1] 魏永明,駱剛,姜君(譯).Linux設(shè)備驅(qū)動程序(第二版)[M].中國電力出版社.2002.4
[2] ATMEL.AT91RM9200 User Manual.2005
[3] 張秀松.基于AT91RM9200的嵌入式工業(yè)控制系統(tǒng)設(shè)計[J].微計算機信息,2006,1-2:45-47
[4] 王建忠,田力,武凌.基于ARM920T核的AT91RM9200微控制器及其在嵌入式家庭網(wǎng)關(guān)中的應(yīng)用[J].微計算機信息, 2004,20(5):49-51
[5] 馬忠梅.ARM&Linux嵌入式系統(tǒng)教程[M].北京航空航天大學(xué)出版社.2004.9
 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

上海2025年9月5日 /美通社/ -- 由上海市經(jīng)濟和信息化委員會、上海市發(fā)展和改革委員會、上海市商務(wù)委員會、上海市教育委員會、上海市科學(xué)技術(shù)委員會指導(dǎo),東浩蘭生(集團)有限公司主辦,東浩蘭生會展集團上海工業(yè)商務(wù)展覽有...

關(guān)鍵字: 電子 BSP 芯片 自動駕駛

推進卓越制造,擴大產(chǎn)能并優(yōu)化布局 蘇州2025年9月5日 /美通社/ --?耐世特汽車系統(tǒng)與蘇州工業(yè)園區(qū)管委會正式簽署備忘錄,以設(shè)立耐世特亞太總部蘇州智能制造項目。...

關(guān)鍵字: 智能制造 BSP 汽車系統(tǒng) 線控

慕尼黑和北京2025年9月4日 /美通社/ -- 寶馬集團宣布,新世代首款量產(chǎn)車型BMW iX3將于9月5日全球首發(fā),9月8日震撼亮相慕尼黑車展。中國專屬版車型也將在年內(nèi)與大家見面,2026年在國內(nèi)投產(chǎn)。 寶馬集團董事...

關(guān)鍵字: 寶馬 慕尼黑 BSP 數(shù)字化

北京2025年9月4日 /美通社/ --?在全球新一輪科技革命與產(chǎn)業(yè)變革的澎湃浪潮中,人工智能作為引領(lǐng)創(chuàng)新的核心驅(qū)動力,正以前所未有的深度與廣度重塑各行業(yè)發(fā)展格局。體育領(lǐng)域深度融入科技變革浪潮,駛?cè)霐?shù)字化、智能化轉(zhuǎn)型快車...

關(guān)鍵字: 人工智能 智能體 AI BSP

上海2025年9月2日 /美通社/ -- 近日,由 ABB、Moxa(摩莎科技)等八家企業(yè)在上海聯(lián)合發(fā)起并成功舉辦"2025 Ethernet-APL 技術(shù)應(yīng)用發(fā)展大會"。會議以"破界?融合...

關(guān)鍵字: ETHERNET 智能未來 BSP 工業(yè)通信

傳感器模塊能實現(xiàn)便捷無接觸的后備箱或側(cè)滑門開啟,適配各種車輛架構(gòu) 該24 GHz雷達傳感器可集成于保險杠或底盤上,并通過特定的手勢或腳部動作觸發(fā)響應(yīng) 已為多家歐洲主流車企啟動量產(chǎn)交付 德國布爾2025...

關(guān)鍵字: 傳感器 BSP 觸發(fā) 保險杠

以高效節(jié)能方案繪制AI算力綠色未來 上海2025年8月29日 /美通社/ -- 8月28日,臺達受邀出席"2025中國智算產(chǎn)業(yè)綠色科技大會",全方位分享臺達在智算領(lǐng)域的前沿洞見與綠色解決方...

關(guān)鍵字: AI 可持續(xù)發(fā)展 數(shù)據(jù)中心 BSP

淄博2025年8月29日 /美通社/ -- 8月26日至27日,TÜV南德意志集團(以下簡稱"TÜV南德")受邀參加由淄博市...

關(guān)鍵字: BSP 人工智能 信息安全 新加坡

北京2025年8月28日 /美通社/ -- 近日,北京亦莊創(chuàng)新發(fā)布消息,北京經(jīng)濟技術(shù)開發(fā)區(qū)(簡稱北京經(jīng)開區(qū),又稱北京亦莊)以"高效辦成一件事"為抓手,圍繞企業(yè)信用修復(fù)的全流程全環(huán)節(jié),打造經(jīng)開區(qū)特色的&...

關(guān)鍵字: 數(shù)字化 集成 BSP 數(shù)據(jù)共享

深圳2025年8月27日 /美通社/ -- 2025年8月27日,華測檢測認證集團股份有限公司(簡稱CTI華測檢測,股票代碼300012)與北京戴納實驗科技股份有限公司(簡稱戴納科技)在華測集團上?;赝瓿蓱?zhàn)略簽約,雙方...

關(guān)鍵字: TI AI BSP 智能化
關(guān)閉