999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于龍芯2H的Linux矩陣鍵盤驅(qū)動(dòng)的研究與實(shí)現(xiàn)

2016-11-09 07:32:09李澤銀吳昌昊
電子設(shè)計(jì)工程 2016年19期
關(guān)鍵詞:嵌入式系統(tǒng)

李澤銀,龔 俊,吳昌昊

(中國兵器工業(yè)第五八研究所 特種電子技術(shù)部,四川 綿陽621000)

基于龍芯2H的Linux矩陣鍵盤驅(qū)動(dòng)的研究與實(shí)現(xiàn)

李澤銀,龔 俊,吳昌昊

(中國兵器工業(yè)第五八研究所 特種電子技術(shù)部,四川 綿陽621000)

針對(duì)某龍芯2H主板擴(kuò)展的4乘4矩陣鍵盤的需求,分析了鍵盤硬件電路及串行通信接口。在Linux 2.6.32的輸入子系統(tǒng)模型的基礎(chǔ)之上,設(shè)計(jì)了矩陣鍵盤輸入設(shè)備的驅(qū)動(dòng)程序并給出了驅(qū)動(dòng)程序?qū)崿F(xiàn)的過程。測(cè)試結(jié)果證明,該驅(qū)動(dòng)滿足了設(shè)計(jì)的需求,工作穩(wěn)定、高效,并且通用性較強(qiáng),在以后的項(xiàng)目中只需更改少量接口就可以使用。

龍芯2H;CH456;矩陣鍵盤;Linux驅(qū)動(dòng)

鍵盤在個(gè)人電腦中是標(biāo)準(zhǔn)配置,在嵌入式系統(tǒng)中也是非常重要的配置,是嵌入式系統(tǒng)最重要的人機(jī)交互手段之一。嵌入式系統(tǒng)普遍是針對(duì)特定的應(yīng)用而設(shè)計(jì)的,不同的應(yīng)用對(duì)輸入設(shè)備的要求也各不相同,因此需要根據(jù)具體應(yīng)用在系統(tǒng)中配置自己的鍵盤。Linux可應(yīng)用于各種硬件平臺(tái)、內(nèi)核穩(wěn)定高效、源代碼開放和網(wǎng)絡(luò)通信驅(qū)動(dòng)齊全等優(yōu)良特性,成為嵌入式系統(tǒng)領(lǐng)域中的一個(gè)研究熱點(diǎn)[1]。在此提出以Linux操作系統(tǒng)和龍芯2H處理器為軟硬件平臺(tái)的矩陣鍵盤驅(qū)動(dòng)程序的設(shè)計(jì)方案。

1 軟硬件平臺(tái)

1.1硬件平臺(tái)

本系統(tǒng)采用的主處理器為龍芯2H,龍芯2H是龍芯2G處理器與龍芯1A(2F南橋)的后繼產(chǎn)品,其目標(biāo)是為安全適用計(jì)算機(jī)提供單片解決方案。龍芯2H采用65 nm工藝實(shí)現(xiàn),主頻達(dá)1 GHz。片內(nèi)集成定點(diǎn)處理器、浮點(diǎn)處理器、流媒體處理和圖形圖像處理功能,以及南橋、北橋等配套芯片組功能。龍芯2H內(nèi)部采用多級(jí)總線,低速外設(shè)(I2C、UART等)作為一個(gè)集合加在南橋總線上[2-3]。

本系統(tǒng)采用了擴(kuò)展一片沁恒公司的CH456芯片來實(shí)現(xiàn)鍵盤的功能,其中芯片連接示意圖如圖1所示。

該芯片可以進(jìn)行64鍵的掃描,通過兼容I2C線路2線串行接口和龍芯 2H進(jìn)行數(shù)據(jù)交換。INT#連接到龍芯2H的 GPIO13,SCL和SDA連接到龍芯2H的IIC1_SCL和IIC1_SDA。

圖1 CH456連接示意圖

芯片最大支持8×8鍵盤,本項(xiàng)目使用的是4×4鍵盤是可以兼容的。將矩陣鍵盤的4跟行線連接到XKI0-3,4跟列線連接到XKO0-3。插座示意圖如圖2所示。

圖2 鍵盤插座連接示意圖

1.1.1龍芯2H的I2C接口

龍芯2H集成了兩個(gè)I2C控制器,在Linux下通過內(nèi)存映射直接訪問芯片的寄存器。I2C-1模塊寄存器物理地址基址為:0x1fe91000,地址空間16 kB。在鍵盤驅(qū)動(dòng)中需要對(duì)龍芯I2C-1的發(fā)送數(shù)據(jù)寄存器(TXR)、接受數(shù)據(jù)寄存器(RXR)、命令控制寄存器(CR)和狀態(tài)寄存器(SR)4個(gè)寄存器進(jìn)行讀寫操作。

1.1.2鍵盤工作原理

CH456芯片會(huì)定期對(duì)鍵盤進(jìn)行掃描,在鍵盤掃描期間,XKO7~XKO0引腳按照XKO0至XKO7的順序依次輸出高電壓,其余引腳輸出低電壓;KI7~KI0引腳的輸出被禁止,當(dāng)沒有鍵被按下時(shí),XKI7~XKI0都被下拉為低電壓;當(dāng)有按鍵被按下時(shí),例如連接XKO3與XKI4的按鍵被按下,則當(dāng)XKO3輸出高電壓時(shí)XKI4檢測(cè)到高電壓。經(jīng)過抗干擾處理后,如果CH456確認(rèn)檢測(cè)到有效的按鍵,則記錄下該按鍵代碼,并通過INT#引腳(即XKO7)產(chǎn)生低電平有效的鍵盤中斷,此時(shí)龍芯2H可以通過I2C接口讀取按鍵代碼;在沒有檢測(cè)到新的有效按鍵之前,CH456不再產(chǎn)生任何鍵盤中斷。另外CH456不支持組合鍵,同一時(shí)刻不能有兩個(gè)或者更多的鍵被按下[4]。

1.2軟件平臺(tái)

本系統(tǒng)采用Linux 2.6.32內(nèi)核作為操作系統(tǒng)。Linux內(nèi)核提供了良好的驅(qū)動(dòng)框架,輸入子系統(tǒng)部分非常利于鍵盤、鼠標(biāo)等驅(qū)動(dòng)的開發(fā)。設(shè)備驅(qū)動(dòng)的意義是為上層應(yīng)用程序提供了訪問設(shè)備的方法,還屏蔽了硬件的具體細(xì)節(jié),便于軟件的開發(fā)與維護(hù)[5]。

2 鍵盤驅(qū)動(dòng)分析

鍵盤在系統(tǒng)中屬于輸入設(shè)備,Linux內(nèi)核的輸入子系統(tǒng),不僅支持鍵盤和鼠標(biāo)等常規(guī)輸入設(shè)備,而且還支持蜂鳴器、觸摸屏等設(shè)備,這些輸入設(shè)備都可以利用系統(tǒng)的接口函數(shù)來實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)。輸入子系統(tǒng)由設(shè)備驅(qū)動(dòng)層、核心層和事件層3部分組成如圖3所示。

在Linux內(nèi)核中,使用輸入子系統(tǒng)實(shí)現(xiàn)輸入設(shè)備驅(qū)動(dòng)的時(shí)候,驅(qū)動(dòng)的工作目的是向系統(tǒng)報(bào)告按鍵等輸入事件,不需要關(guān)心文件系統(tǒng)的接口,因?yàn)長inux的輸入子系統(tǒng)已經(jīng)幫驅(qū)動(dòng)完成了文件操作[6]。在本系統(tǒng)中,設(shè)備驅(qū)動(dòng)層的工作就是當(dāng)矩陣鍵盤的按鍵被按下時(shí),芯片CH456產(chǎn)生一個(gè)中斷,內(nèi)核檢測(cè)到這個(gè)中斷并對(duì)其進(jìn)行處理,這也是本次需要設(shè)計(jì)的驅(qū)動(dòng)。核心層和事件層在Linux內(nèi)核中已經(jīng)幫我們實(shí)現(xiàn),只需要調(diào)用需要的函數(shù)即可。

圖3 輸入子系統(tǒng)結(jié)構(gòu)圖

3 鍵盤驅(qū)動(dòng)設(shè)計(jì)

CH456芯片通過兼容I2C的串行接口與龍芯2H進(jìn)行數(shù)據(jù)通信,當(dāng)有按鍵被按下時(shí),芯片提供低電平有效的中斷,Linux進(jìn)入中斷處理程序,再通過輸入子系統(tǒng)上報(bào)按鍵的信息。驅(qū)動(dòng)的流程圖如圖4所示。

3.1數(shù)據(jù)通信的實(shí)現(xiàn)

由于CH456芯片沒有使用標(biāo)準(zhǔn)的I2C接口,故不能使用I2C驅(qū)動(dòng)進(jìn)行通信,需要自己操作龍芯2H內(nèi)相關(guān)寄存器來進(jìn)行通信。通信參考I2C分為start、write、read和stop 4個(gè)函數(shù)。例如start函數(shù)實(shí)現(xiàn)如下:

由于CH456不是標(biāo)準(zhǔn)I2C設(shè)備,沒有固定的地址,所以需要每次通信的start部分都需要發(fā)送對(duì)應(yīng)的地址位。先向發(fā)送寄存器寫入地址,再向控制寄存器寫入產(chǎn)生Start信號(hào)與寫信號(hào)的命令。程序嘗試5次發(fā)送,如果沒有收到ACK則返回-1告知驅(qū)動(dòng)發(fā)生了通信錯(cuò)誤。

3.2鍵盤中斷的實(shí)現(xiàn)

CH456的INT#用于鍵盤中斷輸出,默認(rèn)是高電平。當(dāng)CH456檢測(cè)到有效按鍵時(shí),INT#輸出低電平有效的鍵盤中斷;龍芯2H收到中斷信號(hào)后,由Linux處理中斷進(jìn)入中斷處理程序?qū)H456執(zhí)行讀操作。當(dāng)CH456收到讀指令后,芯片會(huì)自動(dòng)將INT#恢復(fù)為高電平,并從SDA輸出按鍵代碼。龍芯2H從SDA獲得一個(gè)字節(jié)的數(shù)據(jù),其中低7位是按鍵代碼。

中斷處理函數(shù)的實(shí)現(xiàn)如下:

為了消除鍵盤抖動(dòng),在進(jìn)入中斷5毫秒后才開始讀取按鍵的值。首先判斷按鍵是否被按下,按鍵代碼的第6位為1時(shí)代表按鍵被按下,本系統(tǒng)的設(shè)計(jì)不考慮連續(xù)按住鍵盤不放的情況,所以不需要對(duì)按下的時(shí)間進(jìn)行監(jiān)測(cè),如果讀取到按下,先后通過輸入子系統(tǒng)上報(bào)按下與彈起的鍵值。

3.3鍵盤驅(qū)動(dòng)的初始化

在probe函數(shù)內(nèi)對(duì)鍵盤驅(qū)動(dòng)進(jìn)行初始化,首先檢查結(jié)構(gòu)體 platform_data各個(gè)參數(shù)是否存在,然后通過 input_ allocate_device()分配 input設(shè)備并設(shè)置事件類型為EV_KEY,另外設(shè)置好其他參數(shù)后用input_register_device()注冊(cè)輸入設(shè)備。

在注冊(cè)完設(shè)備后對(duì)中斷進(jìn)行初始化:

error=request_threaded_irq(client->irq,NULL,ch456_irq,IRQF_TRIGGER_LOW|IRQF_ONESHOT,client-> dev.driver->name,kpad);

在實(shí)現(xiàn)CH456的中斷之前,需要在龍芯2H中斷寄存器的初始化處手動(dòng)添加龍芯2H中斷的配置,包括配置GPIOOE輸入輸出配置寄存器將復(fù)用為中斷的GPIO位設(shè)成輸入,配置INTIEN中斷使能寄存器寄存器使能中斷,配置INTPOL中斷極性寄存器寄存器設(shè)置為電平觸發(fā),配置INTEDGE中斷模式寄存器設(shè)置為低電平觸發(fā)。

3.4鍵盤芯片的配置

CH456芯片可以用來控制數(shù)碼管顯示,當(dāng)做鍵盤芯片時(shí)也可以不使用中斷而使用查詢,所以在驅(qū)動(dòng)初始化之后,按鍵使用之前還需要對(duì)芯片進(jìn)行初始化配置:

ch456_write(CH456_SYSTEM,CH456_XINT_ON);

ch456_write(CH456_CONFIG,0x00);

首先配置system寄存器,設(shè)置參數(shù)為支持顯示驅(qū)動(dòng)、鍵盤驅(qū)動(dòng)和中斷(配置的數(shù)值為0x0B),再配置config寄存器,配置參數(shù)X15作為鍵盤中斷輸出引腳,禁止GPO引腳(配置的數(shù)值為0x00)。

3.5驅(qū)動(dòng)的加載與測(cè)試

在/drivers/input/keyboard/Kconfig內(nèi)添加:

config KEYBOARD_CH456

tristate"CH456 I2C 8*8 Keypad and IO Expander"

depends on I2C

在/drivers/input/keyboard/Makefile內(nèi)添加:

obj-$(CONFIG_KEYBOARD_CH456)+=ch456.o

編譯menuconfig,在Device Drivers-Input device support -Keyboards下選擇CH456驅(qū)動(dòng)如圖5所示。

圖5 驅(qū)動(dòng)編譯示意圖

然后編譯內(nèi)核,重啟加載鏡像。

經(jīng)過系統(tǒng)測(cè)試,在Linux的控制臺(tái)下手動(dòng)按鍵進(jìn)行測(cè)試,按下按鍵后即出現(xiàn)所按字母,未出現(xiàn)鍵盤雙擊或者未響應(yīng)等錯(cuò)誤狀態(tài),也沒有按鍵錯(cuò)誤的情況,多次測(cè)試后可以證明該驅(qū)動(dòng)穩(wěn)定可靠。

最終龍芯主板與鍵盤的連接如圖6所示。

圖6 主板照片

4 結(jié)束語

本文介紹了基于龍芯2H和CH456芯片的4乘4矩陣鍵盤Linux驅(qū)動(dòng)的實(shí)現(xiàn)方案。該驅(qū)動(dòng)以靜態(tài)編譯的方式加入內(nèi)核后,通過輸入測(cè)試證明了矩陣鍵盤驅(qū)動(dòng)工作穩(wěn)定、高效。在未來的項(xiàng)目中,這一驅(qū)動(dòng)設(shè)計(jì)方案也具有參考價(jià)值,只需要修改I2C通信接口和中斷引腳即可方便移植。

[1]董志國,李式巨.嵌入式 Linux設(shè)備驅(qū)動(dòng)程序開發(fā) [J].計(jì)算機(jī)工程與設(shè)計(jì),2006,27(20):3737-3740.

[2]龍芯中科技術(shù)有限公司.龍芯2H處理器用戶手冊(cè)[EB/OL].(2015)[2015-11-03].http://www.loongson.cn/uploadfile/cpumanual/Loongson2H_Processor_User_Manual.pdf.

[3]龍芯中科技術(shù)有限公司.龍芯2H處理器數(shù)據(jù)手冊(cè)[EB/OL].(2015)[2015-11-03].]http://www.loongson.cn/uploadfile/cpumanual/Loongson2H_processor_data_sheet.pdf.

[4]江蘇沁恒股份有限公司.16位數(shù)碼管驅(qū)動(dòng)及鍵盤控制芯CH456.[EB/OL].(2013)[2015-11-03].http://www.wch.cn/downfile/182

[5]李其珂,付紅橋.基于嵌入式Linux的矩陣鍵盤驅(qū)動(dòng)研究與實(shí)現(xiàn) [J].重慶理工大學(xué)學(xué)報(bào):自然科學(xué),2012,26(12): 88-92.

[6]楊斌斌,張雪英,王玉宏.基于嵌入式Linux的矩陣鍵盤驅(qū)動(dòng)程序研究與開發(fā)[J].現(xiàn)代電子技術(shù),2009(2):39-41.

【相關(guān)參考文獻(xiàn)鏈接】

童凱,張紅雨.基于Linux與Qt4的網(wǎng)絡(luò)數(shù)碼相框?qū)崿F(xiàn)[J]. 2014,22(2):130-133.

田苗,馮進(jìn)良,文琴,等.基于Linux系統(tǒng)的指紋識(shí)別門禁系統(tǒng)的研究[J].2014,22(2):134-136,139.

李梅.Linux實(shí)時(shí)性能優(yōu)化算法分析與研究[J].2014,22(5):56-58.

王明緒,靳果,桂博.基于ARM-LINUX的物流復(fù)檢系統(tǒng)設(shè)計(jì)[J].2014,22(6):162-164.

裴歐亞,康慕寧,張磊.基于SystemTap的Linux服務(wù)器性能分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].2014,22(10):28-31.

許文明.基于ARM-Linux嵌入式系統(tǒng)的多進(jìn)程并發(fā)服務(wù)器設(shè)計(jì)[J].2014,22(13):1-3.

張龍,殷亞玲.Linux內(nèi)存管理圖形化的研究與實(shí)現(xiàn)[J].2014,22(13):72-74.

王騰飛,馬志峰,王昊,等.基于ARM-Linux的數(shù)據(jù)采集和網(wǎng)絡(luò)傳輸系統(tǒng)設(shè)計(jì)[J].2014,22(16):21-24.

徐海寶,杜偉龍,曹江濤.基于ARM-Linux多功能機(jī)器人的設(shè)計(jì)[J].2014,22(17):19-21.

劉青,楊勇.基于嵌入式LINUX的智能車載終端系統(tǒng)的設(shè)計(jì)[J]. 2014,22(23):81-83.

楊鵬.基于Linux系統(tǒng)的FPGA芯片在線加載的設(shè)計(jì)和實(shí)現(xiàn)[J]. 2015,23(6):161-164.

蔣琳嬌,劉淼,金星.基于嵌入式Linux系統(tǒng)的Qt Quick應(yīng)用啟動(dòng)優(yōu)化[J].2015,23(7):151-154.

張蒙.基于LINUX的PBOC3.0關(guān)鍵讀卡技術(shù)的研究與應(yīng)用[J]. 2015,23(8):188-192.

Research and implementation ofmatrix keyboard driver of Linux on Loongson2H

LIZe-yin,GONG Jun,WU Chang-hao
(1.Department of Special Electronics Technology,No.58 Research Institute of China Ordnance Industries,Mianyang 621000,China)

For the Loongson2H board 4×4matrix keyboard extension requirements,analyzed the keyboard hardware and serial communication interface.Designed matrix keyboard input device driver based on Linux 2.6.32 input subsystem model and showed the driver implementation process.The test results showed that the driver meets the design requirements,stable,efficientand versatile.In the later project,the driver can be used directlywith littlemodification.

loongson2H;CH456;matrix keyboard;Linux driver

TN492

A

1674-6236(2016)19-0180-04

2015-10-28稿件編號(hào):201510203

李澤銀(1990—),男,四川綿陽人,助理工程師。研究方向:嵌入式編程。

猜你喜歡
嵌入式系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
基于PowerPC+FPGA顯示系統(tǒng)
半沸制皂系統(tǒng)(下)
TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統(tǒng)通信技術(shù)的應(yīng)用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發(fā)平臺(tái)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
主站蜘蛛池模板: 国产精品无码AV片在线观看播放| 在线观看91精品国产剧情免费| 91网址在线播放| 少妇精品在线| 亚洲欧洲AV一区二区三区| 黄色一及毛片| 国产黄在线免费观看| 最新国产午夜精品视频成人| 99久久精品国产自免费| 亚洲a级毛片| 91精品啪在线观看国产| 91在线精品免费免费播放| 98精品全国免费观看视频| 女人天堂av免费| 精品国产中文一级毛片在线看| 日韩毛片在线播放| 国产精品私拍在线爆乳| 国产啪在线91| 国产女人综合久久精品视| 亚洲区第一页| 五月天久久综合国产一区二区| 国产一区二区免费播放| 国产精品网拍在线| 91久久偷偷做嫩草影院| 91麻豆久久久| a毛片在线播放| 中文字幕色在线| 亚洲最大情网站在线观看| 欧类av怡春院| 日韩午夜福利在线观看| 国产成人超碰无码| 久久国产亚洲偷自| 亚洲成a人片在线观看88| 亚洲成人手机在线| 五月婷婷导航| 色屁屁一区二区三区视频国产| 国产第一页免费浮力影院| 国产精品一老牛影视频| 精品撒尿视频一区二区三区| 国产你懂得| 亚洲人成网线在线播放va| 又粗又硬又大又爽免费视频播放| 国产精品99在线观看| 中文字幕日韩欧美| 大陆精大陆国产国语精品1024| 免费人成在线观看成人片| 亚洲天堂视频在线观看免费| 亚洲中文无码h在线观看| 99久久性生片| 一级高清毛片免费a级高清毛片| AV网站中文| 国产免费福利网站| 国产精品一区在线麻豆| 国产浮力第一页永久地址| 成人午夜视频在线| 亚洲中文字幕在线观看| 免费毛片视频| 色综合久久久久8天国| 亚洲视频色图| 日本国产在线| 国产91久久久久久| 中国黄色一级视频| 亚洲va欧美va国产综合下载| 免费精品一区二区h| 夜精品a一区二区三区| 婷婷99视频精品全部在线观看| 国产91麻豆视频| 538国产在线| 日本不卡在线视频| 国产精品男人的天堂| 欧美色视频在线| 精品无码一区二区在线观看| 91免费片| 狠狠色丁婷婷综合久久| 成人午夜久久| 亚洲一区色| 一级毛片免费播放视频| 欧美视频在线播放观看免费福利资源| 久久婷婷人人澡人人爱91| 91外围女在线观看| 中文字幕啪啪| 她的性爱视频|