最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【i.MX6ULL】驅動開發(fā)7——按鍵輸入捕獲

2021-11-09 23:46 作者:碼農(nóng)愛學習-B站  | 我要投稿



前面幾篇文章,從最基礎的寄存器點燈,到設備樹點燈,再到GPIO子系統(tǒng)點燈,一步步了解嵌入式Linux開發(fā)的各種點燈原理。

點燈用到的都是GPIO的輸出功能,這篇,通過按鍵的使用,來學習GPIO輸入功能的使用。

1 硬件介紹

1.1 板子上按鍵原理圖

先來看原理圖,我板子上有4個按鍵sw1~sw4:

1.1.1 SW1

SW1是板子的系統(tǒng)復位按鍵,不可編程使用

1.1.2 SW2、SW3

  • SW2:SNVS_TAMPER1,GPIO5_1

    平時是低電平,按下去是高電平。

  • SW3:ONOFF

    它也是系統(tǒng)級的按鍵,用于長按進行開關機。

1.1.3 SW4

SW4是BOOT_MODE1腳,用來進行串行燒錄模式切換,需要再與復位鍵配合使用。

本篇僅測試按鍵功能,因此可以該按鍵。

1.1.4 使用其中2個按鍵

板子上這4個按鍵的功能特性如下表:

本實驗使用SW2和SW4這兩個按鍵來進行實驗。

2 軟件編寫

2.1 修改設備樹文件

2.1.1 修改iomuxc節(jié)點

修改imx6ull-myboard.dts,在iomuxc節(jié)點的imx6ull-evk字節(jié)點下創(chuàng)建一個名為pinctrl_key的子節(jié)點,節(jié)點內容如下:

這部分是對引腳進行配置,這兩個引腳的定義是在imx6ull-pinfunc-snvs.h文件中:

引腳宏定義后面的值,是對引腳功能的配置:

SW2:0x3080,即0011 0000 1000 0000

SW4:0xF080,即1000 0000 1000 0000

對照之前講解GPIO的PAD寄存器的配置,根據(jù)兩個按鍵的實際電路配置上拉或下拉。

注:SW4 (MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11)這個GPIO,在設備中實際已經(jīng)被其它設備(spi4)使用了。

在imx6ull-myboard.dts的300多行處,有:

pinctrl_spi4: spi4grp {
fsl,pins = <
? ? MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10 ? ? ? ?0x70a1
? ? MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11 ? ? ? ?0x70a1
? ? MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 ? ? ?0x70a1
? ? MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 ? ? ?0x80000000
? ? >;
};

理論上我們應該把這里的配置給注釋掉,因為1個IO是不能同時進行2種功能的。由于本次實驗不使用spi4,暫且也先不管它,看看會有什么影響,如果影響了本實驗,再給把這里的配置給注掉。

2.1.2 添加key節(jié)點

在根節(jié)點下創(chuàng)建名為key的按鍵節(jié)點,內容如下:

2.2 編寫按鍵驅動程序

按鍵驅動,也屬于字符設備驅動,和之前的字符設備驅動的框架一樣,主要的修改點在按鍵的硬件初始化配置已經(jīng)按鍵的讀取。

新建一個key-Bsp.c

2.2.1 按鍵的硬件初始化

初始化的流程,就是使用OF函數(shù)來從設備樹中獲取key節(jié)點,然后使用GPIO子系統(tǒng)的API函數(shù),將GPIO配置為輸入。

2.2.2 讀取按鍵的值

讀取按鍵的值,也是GPIO子系統(tǒng)的API函數(shù)來讀取。讀取到按鍵的值后,將該值傳遞出來給應用層使用,注意這里使用了原子操作的方式atomic_set和atomic_read實現(xiàn)數(shù)據(jù)的寫入和讀取。


2.3 編寫按鍵應用程序

新建一個key-App.c

按鍵的應用層程序,主要就通過驅動程序提供的按鍵讀取接口,來循環(huán)讀取按鍵的值,并在按鍵按下時,將按鍵的值打印出來。


3 實驗測試

3.1 編譯程序

3.1.1 編譯設備樹

編譯設備樹文件,并將編譯出的dtb文件復制到啟動文件夾:

網(wǎng)絡方式啟動開發(fā)板,查看key節(jié)點:

3.1.2 編譯按鍵驅動程序

3.1.3 編譯按鍵應用程序

3.2 測試

3.3 查看CPU占用率

先Ctrl+C結束掉此按鍵進程,然后使用如下指令來后臺運行按鍵程序:

./key-App /dev/key &

然后再使用指令:

top

來查看CPU是使用情況。從下圖可以看出,此時CPU的使用率是99.8%,全被按鍵檢查程序占用了,因為按鍵程序中有個while循環(huán)在一直讀取按鍵的值。

使用指令:

ps

查看按鍵的進程號,如下圖為149,再使用:

kill -9 149

來殺掉按鍵進程,然后再使用top指令查看,可以看到CPU的使用率又變回了0。

實際的按鍵使用中,一般不會使用本篇的這種持續(xù)檢測導致CPU占滿的方式,本篇只是先來介紹GPIO的輸入功能的使用,后續(xù)會使用更加高效的按鍵檢測機制來實現(xiàn)按鍵檢測功能。

4 總結

本篇主要介紹了i.MX6ULL的按鍵檢測的使用,主要的知識點是設備樹的修改,以及GPIO的輸入配置與高低電平的讀取。



【i.MX6ULL】驅動開發(fā)7——按鍵輸入捕獲的評論 (共 條)

分享到微博請遵守國家法律
上杭县| 西平县| 庆城县| 嘉黎县| 大丰市| 鹿邑县| 搜索| 蓬安县| 苍南县| 绵阳市| 永安市| 曲靖市| 兴宁市| 城固县| 永济市| 北碚区| 钟祥市| 新宁县| 盐亭县| 库伦旗| 九台市| 宿松县| 什邡市| 南丹县| 工布江达县| 峨边| 通辽市| 蓬莱市| 思茅市| 长武县| 松桃| 鄂伦春自治旗| 定远县| 称多县| 星座| 甘孜县| 汉寿县| 嘉鱼县| 庐江县| 东阳市| 页游|