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手机在线观看蜜芽| 久久久久青草线综合超碰| 97国产在线播放| 2021国产精品自产拍在线观看| 日韩欧美中文在线| 激情综合网址| 日韩经典精品无码一区二区| 亚洲永久精品ww47国产| 久久国产av麻豆| 国产精品永久免费嫩草研究院| 亚洲国产系列| 亚洲午夜片| 久久一级电影| www.国产福利| 乱色熟女综合一区二区| 亚洲一区二区三区麻豆| 在线免费a视频| 久久精品国产在热久久2019| 91午夜福利在线观看| av尤物免费在线观看| 18禁高潮出水呻吟娇喘蜜芽| 国产成人综合久久| 国产99视频精品免费观看9e| 国产一级视频久久| 一本色道久久88亚洲综合| 97免费在线观看视频| 国产亚洲欧美日韩在线观看一区二区| 99久久精品免费看国产免费软件| 精品五夜婷香蕉国产线看观看| 亚洲精品福利网站| 国产精品一线天| 精品国产免费观看一区| 免费中文字幕在在线不卡| 狠狠色成人综合首页| 国产精品人成在线播放| 亚洲第一成网站| 亚洲精品无码专区在线观看| 2022精品国偷自产免费观看| 欧美激情视频一区| 国产精品福利尤物youwu| a国产精品| 亚洲色图综合在线| 国产免费好大好硬视频| 欧美午夜在线播放| 中日韩一区二区三区中文免费视频| 高潮毛片无遮挡高清视频播放| 久久婷婷国产综合尤物精品| 色综合久久88| 五月天综合婷婷| 91青青草视频在线观看的| 熟女日韩精品2区| 亚洲欧美日韩另类| 国产女人水多毛片18| 超碰aⅴ人人做人人爽欧美 | 最新日韩AV网址在线观看| 日韩天堂视频| 又大又硬又爽免费视频| 91精品在线视频观看| 丰满少妇αⅴ无码区| 国产成人精彩在线视频50| 91香蕉视频下载网站| 精品国产美女福到在线不卡f| 波多野结衣一区二区三区四区视频| 国产精品入口麻豆| 99热在线只有精品| 国产制服丝袜91在线| 国产好痛疼轻点好爽的视频| 国产一区二区三区在线观看视频| 国产69精品久久久久妇女| 好紧好深好大乳无码中文字幕| 一级毛片免费的| 在线日韩一区二区| 亚洲av日韩av制服丝袜| 国产无码精品在线播放| 亚洲精品片911| 久久五月视频| 亚洲熟女中文字幕男人总站| 久久亚洲国产一区二区| 日本高清在线看免费观看| 91九色视频网| 91精品国产91欠久久久久|