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

主站蜘蛛池模板: 日韩av手机在线| 亚洲AV无码乱码在线观看裸奔| 国产精品3p视频| 播五月综合| 国产日本欧美在线观看| 国产乱子伦一区二区=| 天天摸天天操免费播放小视频| 色亚洲成人| 日本午夜影院| 蝴蝶伊人久久中文娱乐网| 毛片免费在线| 亚洲一级毛片在线观| 亚洲天堂精品在线| 精品综合久久久久久97| 日日拍夜夜嗷嗷叫国产| 欧洲日本亚洲中文字幕| 人与鲁专区| 日韩欧美国产中文| 日本一本在线视频| 欧美中文字幕无线码视频| 91在线播放国产| 九色视频在线免费观看| 欧美综合区自拍亚洲综合天堂| 美女国内精品自产拍在线播放| 92午夜福利影院一区二区三区| 毛片免费观看视频| 91视频精品| 亚洲精品va| 亚洲天堂网站在线| 狠狠做深爱婷婷综合一区| 亚洲中文字幕国产av| 91色国产在线| 97在线观看视频免费| 免费av一区二区三区在线| 国产 在线视频无码| 黄色网址手机国内免费在线观看| 亚洲国产成人麻豆精品| 亚洲黄色成人| 五月激情婷婷综合| 热伊人99re久久精品最新地| 久久精品无码一区二区日韩免费| 精品无码视频在线观看| 九九香蕉视频| 巨熟乳波霸若妻中文观看免费| 日韩小视频在线观看| 亚洲日本精品一区二区| 五月婷婷精品| 91在线视频福利| 一级成人a做片免费| 日韩高清无码免费| 青青操国产视频| 亚洲人成影院午夜网站| 欧美午夜视频在线| 亚洲欧美另类中文字幕| 中文成人无码国产亚洲| 在线精品亚洲一区二区古装| 欧美成人综合视频| 亚洲第一黄片大全| 欧美成人h精品网站| 亚洲高清国产拍精品26u| 国产一区二区视频在线| 黄色网在线| 久久久91人妻无码精品蜜桃HD| 亚洲 欧美 日韩综合一区| 国内自拍久第一页| 色婷婷色丁香| 影音先锋丝袜制服| 狠狠色成人综合首页| 2022精品国偷自产免费观看| 精品国产美女福到在线直播| 亚洲成在线观看| 午夜毛片免费看| 在线精品欧美日韩| 国产乱论视频| 亚洲无码高清免费视频亚洲| 国产婬乱a一级毛片多女| 亚洲天堂啪啪| 婷婷色狠狠干| 在线免费不卡视频| 91成人在线观看| 2020国产在线视精品在| 亚洲无码高清视频在线观看 |