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

基于龍芯2H的Linux矩陣鍵盤驅動的研究與實現

2016-11-09 07:32:09李澤銀吳昌昊
電子設計工程 2016年19期
關鍵詞:嵌入式系統

李澤銀,龔 俊,吳昌昊

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

基于龍芯2H的Linux矩陣鍵盤驅動的研究與實現

李澤銀,龔 俊,吳昌昊

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

針對某龍芯2H主板擴展的4乘4矩陣鍵盤的需求,分析了鍵盤硬件電路及串行通信接口。在Linux 2.6.32的輸入子系統模型的基礎之上,設計了矩陣鍵盤輸入設備的驅動程序并給出了驅動程序實現的過程。測試結果證明,該驅動滿足了設計的需求,工作穩定、高效,并且通用性較強,在以后的項目中只需更改少量接口就可以使用。

龍芯2H;CH456;矩陣鍵盤;Linux驅動

鍵盤在個人電腦中是標準配置,在嵌入式系統中也是非常重要的配置,是嵌入式系統最重要的人機交互手段之一。嵌入式系統普遍是針對特定的應用而設計的,不同的應用對輸入設備的要求也各不相同,因此需要根據具體應用在系統中配置自己的鍵盤。Linux可應用于各種硬件平臺、內核穩定高效、源代碼開放和網絡通信驅動齊全等優良特性,成為嵌入式系統領域中的一個研究熱點[1]。在此提出以Linux操作系統和龍芯2H處理器為軟硬件平臺的矩陣鍵盤驅動程序的設計方案。

1 軟硬件平臺

1.1硬件平臺

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

本系統采用了擴展一片沁恒公司的CH456芯片來實現鍵盤的功能,其中芯片連接示意圖如圖1所示。

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

圖1 CH456連接示意圖

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

圖2 鍵盤插座連接示意圖

1.1.1龍芯2H的I2C接口

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

1.1.2鍵盤工作原理

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

1.2軟件平臺

本系統采用Linux 2.6.32內核作為操作系統。Linux內核提供了良好的驅動框架,輸入子系統部分非常利于鍵盤、鼠標等驅動的開發。設備驅動的意義是為上層應用程序提供了訪問設備的方法,還屏蔽了硬件的具體細節,便于軟件的開發與維護[5]。

2 鍵盤驅動分析

鍵盤在系統中屬于輸入設備,Linux內核的輸入子系統,不僅支持鍵盤和鼠標等常規輸入設備,而且還支持蜂鳴器、觸摸屏等設備,這些輸入設備都可以利用系統的接口函數來實現設備驅動。輸入子系統由設備驅動層、核心層和事件層3部分組成如圖3所示。

在Linux內核中,使用輸入子系統實現輸入設備驅動的時候,驅動的工作目的是向系統報告按鍵等輸入事件,不需要關心文件系統的接口,因為Linux的輸入子系統已經幫驅動完成了文件操作[6]。在本系統中,設備驅動層的工作就是當矩陣鍵盤的按鍵被按下時,芯片CH456產生一個中斷,內核檢測到這個中斷并對其進行處理,這也是本次需要設計的驅動。核心層和事件層在Linux內核中已經幫我們實現,只需要調用需要的函數即可。

圖3 輸入子系統結構圖

3 鍵盤驅動設計

CH456芯片通過兼容I2C的串行接口與龍芯2H進行數據通信,當有按鍵被按下時,芯片提供低電平有效的中斷,Linux進入中斷處理程序,再通過輸入子系統上報按鍵的信息。驅動的流程圖如圖4所示。

3.1數據通信的實現

由于CH456芯片沒有使用標準的I2C接口,故不能使用I2C驅動進行通信,需要自己操作龍芯2H內相關寄存器來進行通信。通信參考I2C分為start、write、read和stop 4個函數。例如start函數實現如下:

由于CH456不是標準I2C設備,沒有固定的地址,所以需要每次通信的start部分都需要發送對應的地址位。先向發送寄存器寫入地址,再向控制寄存器寫入產生Start信號與寫信號的命令。程序嘗試5次發送,如果沒有收到ACK則返回-1告知驅動發生了通信錯誤。

3.2鍵盤中斷的實現

CH456的INT#用于鍵盤中斷輸出,默認是高電平。當CH456檢測到有效按鍵時,INT#輸出低電平有效的鍵盤中斷;龍芯2H收到中斷信號后,由Linux處理中斷進入中斷處理程序對CH456執行讀操作。當CH456收到讀指令后,芯片會自動將INT#恢復為高電平,并從SDA輸出按鍵代碼。龍芯2H從SDA獲得一個字節的數據,其中低7位是按鍵代碼。

中斷處理函數的實現如下:

為了消除鍵盤抖動,在進入中斷5毫秒后才開始讀取按鍵的值。首先判斷按鍵是否被按下,按鍵代碼的第6位為1時代表按鍵被按下,本系統的設計不考慮連續按住鍵盤不放的情況,所以不需要對按下的時間進行監測,如果讀取到按下,先后通過輸入子系統上報按下與彈起的鍵值。

3.3鍵盤驅動的初始化

在probe函數內對鍵盤驅動進行初始化,首先檢查結構體 platform_data各個參數是否存在,然后通過 input_ allocate_device()分配 input設備并設置事件類型為EV_KEY,另外設置好其他參數后用input_register_device()注冊輸入設備。

在注冊完設備后對中斷進行初始化:

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

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

3.4鍵盤芯片的配置

CH456芯片可以用來控制數碼管顯示,當做鍵盤芯片時也可以不使用中斷而使用查詢,所以在驅動初始化之后,按鍵使用之前還需要對芯片進行初始化配置:

ch456_write(CH456_SYSTEM,CH456_XINT_ON);

ch456_write(CH456_CONFIG,0x00);

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

3.5驅動的加載與測試

在/drivers/input/keyboard/Kconfig內添加:

config KEYBOARD_CH456

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

depends on I2C

在/drivers/input/keyboard/Makefile內添加:

obj-$(CONFIG_KEYBOARD_CH456)+=ch456.o

編譯menuconfig,在Device Drivers-Input device support -Keyboards下選擇CH456驅動如圖5所示。

圖5 驅動編譯示意圖

然后編譯內核,重啟加載鏡像。

經過系統測試,在Linux的控制臺下手動按鍵進行測試,按下按鍵后即出現所按字母,未出現鍵盤雙擊或者未響應等錯誤狀態,也沒有按鍵錯誤的情況,多次測試后可以證明該驅動穩定可靠。

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

圖6 主板照片

4 結束語

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

[1]董志國,李式巨.嵌入式 Linux設備驅動程序開發 [J].計算機工程與設計,2006,27(20):3737-3740.

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

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

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

[5]李其珂,付紅橋.基于嵌入式Linux的矩陣鍵盤驅動研究與實現 [J].重慶理工大學學報:自然科學,2012,26(12): 88-92.

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

【相關參考文獻鏈接】

童凱,張紅雨.基于Linux與Qt4的網絡數碼相框實現[J]. 2014,22(2):130-133.

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

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

王明緒,靳果,桂博.基于ARM-LINUX的物流復檢系統設計[J].2014,22(6):162-164.

裴歐亞,康慕寧,張磊.基于SystemTap的Linux服務器性能分析系統的設計與實現[J].2014,22(10):28-31.

許文明.基于ARM-Linux嵌入式系統的多進程并發服務器設計[J].2014,22(13):1-3.

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

王騰飛,馬志峰,王昊,等.基于ARM-Linux的數據采集和網絡傳輸系統設計[J].2014,22(16):21-24.

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

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

楊鵬.基于Linux系統的FPGA芯片在線加載的設計和實現[J]. 2015,23(6):161-164.

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

張蒙.基于LINUX的PBOC3.0關鍵讀卡技術的研究與應用[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稿件編號:201510203

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

猜你喜歡
嵌入式系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
主站蜘蛛池模板: 国产精品性| www欧美在线观看| 香蕉精品在线| 99久久成人国产精品免费| 国产一级毛片网站| 最新痴汉在线无码AV| 国产成人综合日韩精品无码首页 | 亚洲国产中文欧美在线人成大黄瓜 | 亚洲成人一区二区| 国产亚洲精品无码专| 久久影院一区二区h| 日本欧美一二三区色视频| 一区二区三区高清视频国产女人| 国语少妇高潮| 久久久久久尹人网香蕉| 国产人成在线观看| 五月婷婷综合网| 伊人激情久久综合中文字幕| 国产菊爆视频在线观看| 亚洲欧美成人| 精品久久国产综合精麻豆| 伊在人亚洲香蕉精品播放| 久久国产香蕉| 国产簧片免费在线播放| 精品国产一二三区| 五月天在线网站| 亚洲不卡av中文在线| 国产综合精品一区二区| 99热这里只有精品免费国产| 日本福利视频网站| 久久国产乱子| 国产成人啪视频一区二区三区| 性欧美精品xxxx| 亚洲精品天堂自在久久77| 日本国产精品| 成人字幕网视频在线观看| 久99久热只有精品国产15| 国产成人精品在线1区| a级毛片网| 青青青国产视频手机| 91娇喘视频| 制服丝袜一区二区三区在线| 在线观看亚洲人成网站| 久久精品免费看一| 免费国产福利| 一级毛片在线播放免费观看| 欧美日韩中文字幕在线| 国模极品一区二区三区| 狠狠色香婷婷久久亚洲精品| 久久综合亚洲色一区二区三区| 国产国模一区二区三区四区| 欧美亚洲日韩不卡在线在线观看| 特级毛片8级毛片免费观看| 国产综合精品一区二区| 亚洲精品无码日韩国产不卡| 伊人欧美在线| 精品国产91爱| 91 九色视频丝袜| 国产精品国产主播在线观看| 试看120秒男女啪啪免费| 国产成人亚洲欧美激情| 露脸一二三区国语对白| 欧美一区国产| 欧美精品成人一区二区视频一| 免费黄色国产视频| 手机精品福利在线观看| 亚洲成a人片| AV片亚洲国产男人的天堂| 亚州AV秘 一区二区三区| 国产麻豆aⅴ精品无码| 日韩在线播放中文字幕| 婷婷中文在线| 伊人国产无码高清视频| 亚洲最猛黑人xxxx黑人猛交| 国产精品3p视频| 亚洲Av激情网五月天| lhav亚洲精品| 亚洲国产看片基地久久1024| 日本午夜影院| 成人福利在线看| 啪啪永久免费av| 国产jizz|