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

基于Linux的旋轉編碼器的驅動程序和應用的開發

2021-07-09 13:49:41高永相
電子樂園·中旬刊 2021年8期

高永相

摘要:在產品設計和開發中,需要在arm平臺下進行驅動開發,根據旋轉編碼器的基本工作原理,利用Linux 設備驅動的輸入子系統進行了驅動和應用程序的設計。實驗結果表明,方案切實可行。

關鍵詞: Linux; 旋轉編碼器; Input子系統

中圖分類號: TP273 文獻標志碼: A

選擇EC11旋轉編碼器作為輸入按鈕,向右旋轉,按步長增加參數,向左旋轉,按步長遞減參數。為實現設計目標,研究旋轉編碼器的輸出特性以及linux平臺的輸入子系統特性,并成功移植到當前設備并設計應用程序[1]。

1硬件結構及基本原理

硬件平臺以NXP的I.MX6ULL 為核心的。EC11是AB 相旋轉編碼器。在正向旋轉時A相超前B相 90°; 在編碼器反轉時,B相超前A相 90°。通過判斷A、B兩相邊沿處的電平高低就可判斷方向。

2 輸入子系統的組成

輸入設備有共同的特點,輸入子系統自下而上分為驅動層、核心層和事件處理層。驅動層是與硬件相關的實現。核心層承上啟下,為驅動層提供輸入設備注冊和操作接口。事件處理層主要和用戶空間進行交互,負責創建設備文件并將報告的事件傳遞給用戶空間[2]。最底層就是具體設備,比如按鍵,旋轉編碼器等。

3 驅動的設計與實現

設備驅動程序是 Linux 內核的一部分,它提供內核接口,運行在內核態。驅動程序主要完成如下功能:

1) 完成rotary encoder設備初始化、資源申請和釋放等操作;

2) 完成數據在內核和硬件設備間的讀取和寫入;

3) 接收應用程序傳給硬件設備的數據并返回應用程序請求的數據;

input 核心層會向 Linux 內核注冊一個字符設備,input.c 就是 input 輸入子系統的核心層。class_registe注冊一個input 類,系統啟動以后就會在/sys/class 目錄下生成 input 子 目錄。register_chrdev_region注冊一個字符設備[3]。設備驅動流程圖見圖1的左邊。

3.1引腳的配置和初始化

EC_A連接到IMX6ULL 的GPIO5_1引腳,EC_B連接到IMX6ULL的GPIO1_1引腳。

引腳的配置和初始化,是外界硬件設備和內核溝通的橋梁。使用設備樹來描述板級設備信息。

compatible = "rotary-encoder";用來和設備驅動匹配

gpios = <&gpio5 1 GPIO_ACTIVE_LOW>,<&gpio1 1 GPIO_ACTIVE_LOW>;配置rotary encoder 驅動的兩個輸入引腳,低電平有效。

3.2 驅動加載函數

輸入對象的初始化是在驅動加載入口函數內完成的。輸入對象描述了一個輸入設備,包括它可能報告的事件,使用input 子系統的時候需注冊一個input設備,input_dev結構體表示input設備。調用devm_input_allocate_device(struct input_dev*)實現input 設備的內存分配。使用input_set_capability(input, EV_REL, encoder->axis)注冊此驅動,事件為EV_REL,使旋轉編碼器支持相對坐標。之后調用input_register_device(struct input_dev*)函數實現將輸入設備注冊到輸入子系統中,并配置中斷函數。使用devm_request_threaded_irq注冊中斷,handler = &rotary_encoder_irq設定中斷函數。

3.3中斷函數的實現

中斷函數根據引腳當前的狀態和之前狀態,判斷方向并上報方向數據。用state變量來保存兩個輸入引腳的電平狀態。state=2之后state=1,判斷為順時針。state=2之后state=3,判斷為逆時針,input_report_rel(encoder->input, encoder->axis, encoder->dir)報告事件。調用函數input_sync(encoder->input)來通知輸入子系統同步到用戶層。

4用戶層應用實現

根據 Linux 下內核調用機制,實現應用程序讀取旋轉編碼器的值,有兩個值,1表示順時針旋轉,-1表示逆時針旋轉,由上層應用程序對數據進一步處理后輸出。流程如圖1的右圖。將應用程序交叉編譯后在ARM平臺上執行。此時轉動旋轉編碼器運行結果正向旋轉value=1 反向旋轉value=-1。

5結束語

本文設計并實現了Linux 下的旋轉編碼器驅動程序,實現了旋轉編碼器相對值旋轉方向檢測功能,在實際應用中運行良好,達到了預期目的。

參考文獻

[1] 屈克文,石奮蘇基于 ARM- Linux 的旋轉編碼器接口與驅動程序的設計[J] 計算機應用,2011,12:31

[2] 宋寶華.Linux設備驅動開發詳解[M].機械工業出版社,2015.7

主站蜘蛛池模板: 久久亚洲高清国产| 91在线国内在线播放老师| 国产精品制服| 欧美日韩精品综合在线一区| 亚洲无线国产观看| 欧美黑人欧美精品刺激| 国产三级毛片| 亚洲一区二区视频在线观看| 国产迷奸在线看| 在线综合亚洲欧美网站| 色婷婷综合激情视频免费看| 久久国产精品电影| 国产亚洲高清在线精品99| 中文字幕无码制服中字| 欧美精品色视频| 中文天堂在线视频| 另类综合视频| 999精品视频在线| a网站在线观看| 久久semm亚洲国产| 在线永久免费观看的毛片| 宅男噜噜噜66国产在线观看| 波多野结衣二区| 热思思久久免费视频| 国产精品私拍在线爆乳| av在线人妻熟妇| 亚洲综合18p| 国产91av在线| 青青操国产视频| 91精品国产麻豆国产自产在线| 伊人久久婷婷五月综合97色| 最新国产成人剧情在线播放| 亚洲男人的天堂久久香蕉| 亚洲天堂网站在线| 黄色三级网站免费| 国产精品久久久久无码网站| 美女无遮挡免费视频网站| 亚洲av综合网| 日本三级欧美三级| 天堂亚洲网| 亚洲欧美日韩成人在线| 日韩无码视频专区| 少妇被粗大的猛烈进出免费视频| 男女男免费视频网站国产| 69av在线| 在线观看免费黄色网址| 日韩成人免费网站| 久久九九热视频| 理论片一区| 欧美高清国产| 久久精品无码中文字幕| 精品一区二区三区中文字幕| 国产福利拍拍拍| 老司机精品一区在线视频| 精品人妻一区无码视频| 亚洲国产精品日韩专区AV| 91国内外精品自在线播放| 日韩精品免费在线视频| 啪啪啪亚洲无码| 亚洲欧美另类日本| 少妇精品网站| 亚洲天堂区| 免费AV在线播放观看18禁强制| 亚洲精品无码AV电影在线播放| 在线毛片免费| 亚洲人在线| 久久人与动人物A级毛片| 美女免费黄网站| 国产亚洲精品97AA片在线播放| 亚洲成人福利网站| 丰满人妻中出白浆| 亚洲成人福利网站| 狠狠色狠狠综合久久| 超清无码一区二区三区| 国产成人喷潮在线观看| 久久精品国产亚洲麻豆| 91精品综合| 国产精品久线在线观看| 有专无码视频| 91精品国产自产在线老师啪l| 日韩无码黄色| 国产午夜不卡|