0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

5.100ASK_V853-PRO開發(fā)板支持按鍵輸入

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-05-11 10:02 ? 次閱讀

0.前言

? 100ASK_V853-PRO開發(fā)板上共有5個(gè)功能按鍵,本章節(jié)跟大家討論如何使能這五個(gè)按鍵。

pYYBAGRcTHSAZezfABPXP4Ax_b4999.png

1.V853功能按鍵原理

? 100ASK_V853-PRO開發(fā)板上提供的5個(gè)按鍵是通過GPADC高精度數(shù)模轉(zhuǎn)換模塊模擬出5個(gè)功能按鍵。GPADC 是 12bit

分辨率,8 位采集精度的模數(shù)轉(zhuǎn)換模塊,具體通道數(shù)可以查看對應(yīng)的 spec 說明?檔,模擬輸?范 圍 0?1.8V,最?采樣率

1MHz,并且?持?jǐn)?shù)據(jù)?較,?校驗(yàn)功能,同時(shí)?作于可配置?下?作模式:

  1. Single mode:在指定的通道完成?次轉(zhuǎn)換并將數(shù)據(jù)放在對應(yīng)數(shù)據(jù)寄存器中;
  2. Single-cycle mode:在指定的通道完成?個(gè)周期轉(zhuǎn)換并將數(shù)據(jù)放在響應(yīng)數(shù)據(jù)寄存器中;
  3. Continuous mode:在指定的通道持續(xù)轉(zhuǎn)換并將數(shù)據(jù)放在響應(yīng)數(shù)據(jù)寄存器中;
  4. Burst mode:邊采樣邊轉(zhuǎn)換并將數(shù)據(jù)放? 32 字節(jié)的 FIFO,?持中斷控制。

? 部分 GPADC 接?也開始慢慢?于 KEY 模塊按鍵的讀取,?般包括 VOL+、VOL-、HOME、MENU、ENTER 等等, GPADC0 ?于 KEY 的電路如上圖。 AVCC-AP 為 1.8V 的供電,不同的按鍵按下,GPADC0 ?的電壓不同,CPU 通過對這個(gè)電壓的采樣來確定具體是那 ?個(gè)按鍵按下。如上圖,VOL+、VOL-、MENU、ENTER、HOME/UBOOT 對應(yīng)的電壓分別為 0.21V、0.41V、 0.59V、0.75V、0.88V。具體可以查看《100ASK-V853_Pro系統(tǒng)開發(fā)手冊.pdf》中第五篇驅(qū)動開發(fā)的第?三章 Linux GPADC 開發(fā)指南。

2.GPADC驅(qū)動

GPADC驅(qū)動存放的位置為

tina-v853-open/kernel/linux-4.9/drivers/input/sensor/sunxi_gpadc.c
tina-v853-open/kernel/linux-4.9/drivers/input/sensor/sunxi_gpadc.h

3.GPADC內(nèi)核配置

在Tina的根目錄下輸入make kernel_menuconfig

book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig

進(jìn)入如下目錄中,輸入Y使能SUNXI GPADC驅(qū)動。

→ Device Drivers 
	→ Input device support 
		→ Sensors
			 <*>   SUNXI GPADC

配置完成后如下圖所示。

pYYBAGRcTIOAYYXmAAC6ZODQE4M486.png

保存并退出內(nèi)核配置界面。

4.GPADC設(shè)備樹配置

內(nèi)核設(shè)備樹存放位置:

tina-v853-open/device/config/chips/v853/configs/100ask/board.dts

進(jìn)入該目錄后輸入vi board.dts

book@100ask:~/workspaces/tina-v853-open$ cd device/config/chips/v853/configs/100ask/
book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ ls
BoardConfig.mk  board.dts  buildroot  env.cfg  linux-4.9  sys_config.fex  uboot-board.dts
book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi board.dts

找到&gpadc節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)保存有采樣相關(guān)的配置,鍵值,電壓數(shù)據(jù)等。

&gpadc {
    channel_num = <1>;                        // 使用1通道
    channel_select = <0x01>;                  // 選擇 0x01 通道
    channel_data_select = <0>;                // 啟用數(shù)據(jù)通道
    channel_compare_select = <0x01>;          // 啟用通道比較功能
    channel_cld_select = <0x01>;              // 啟用數(shù)據(jù)小于比較功能
    channel_chd_select = <0>;                 // 啟用數(shù)據(jù)大于比較功能
    channel0_compare_lowdata = <1700000>;     // 小于這個(gè)值觸發(fā)中斷
    channel0_compare_higdata = <1200000>;     // 大于這個(gè)值觸發(fā)中斷
    channel1_compare_lowdata = <460000>;      // 小于這個(gè)值觸發(fā)中斷
    channel1_compare_higdata = <1200000>;     // 大于這個(gè)值觸發(fā)中斷
    key_cnt = <5>;                            // 按鍵數(shù)量
    key0_vol = <210>;                         // 按鍵電壓,單位mv
    key0_val = <115>;                         // 按下按鍵的鍵值
    key1_vol = <410>;                         // 按鍵電壓,單位mv
    key1_val = <114>;                         // 按下按鍵的鍵值
    key2_vol = <590>;                         // 按鍵電壓,單位mv
    key2_val = <139>;                         // 按下按鍵的鍵值
    key3_vol = <750>;                         // 按鍵電壓,單位mv
    key3_val = <28>;                          // 按下按鍵的鍵值
    key4_vol = <880>;                         // 按鍵電壓,單位mv
    key4_val = <102>;                         // 按下按鍵的鍵值
    status = "okay";                          // 啟用GPADC
};

我們還能通過board.dts文件中知道還有一部分不經(jīng)常需要修改的配置保存在sun8iw21p1.dtsi文件中,進(jìn)入該目錄,并打開該文件。

book@100ask:~/workspaces/tina-v853-open$ cd kernel/linux-4.9/arch/arm/boot/dts/
book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/arch/arm/boot/dts$ vi sun8iw21p1.dtsi

查看gpadc節(jié)點(diǎn),可以發(fā)現(xiàn)這里的配置保存有中斷和時(shí)鐘信息,但默認(rèn)不使能。注意:這里可以不修改,因?yàn)檫@里的所設(shè)置的status配置會被board.dts中的status覆蓋,只要在board.dts設(shè)置為使能,最終生成打包進(jìn)鏡像的設(shè)備樹都為使能狀態(tài)。

gpadc:gpadc@2009000 {
    compatible = "allwinner,sunxi-gpadc";         // 用于驅(qū)動和設(shè)備的綁定
    reg = <0x0 0x02009000 0x0 0x400>;             // 設(shè)備使用的寄存器地址
    interrupts = ;      // 設(shè)備使用的中斷
    clocks = <&clk_gpadc>;                        // 設(shè)備使用的時(shí)鐘
    status = "disabled";                          // 配置默認(rèn)不啟用GPADC
};

5.增加getevent測試包

在Tina根目錄下執(zhí)行make menuconfig

book@100ask:~/workspaces/tina-v853-open$ make menuconfig

進(jìn)入U(xiǎn)tilities目錄下,輸入Y選中g(shù)etevent

 > Utilities
 	 <*> getevent.................................... getevent for Android Toolbox 

選中完成后如下圖所示。

poYBAGRcTI6AHKMkAAGNQxg_X9w239.png

保存并退出Tina配置界面。

6.編譯、打包和燒寫

在Tina的根目錄下,輸入make -j32

book@100ask:~/workspaces/tina-v853-open$ make -j32
...
book@100ask:~/workspaces/tina-v853-open$ pack
...

? 生成鏡像后,將tina-v853-open/out/v853/100ask/openwrt/目錄下的v853_linux_100ask_uart0.img鏡像拷貝到Windows電腦主機(jī)中,使用全志PhoenixSuit燒寫工具燒寫到開發(fā)板上。

? 插上12V的電源線,和兩條Type-C,把開關(guān)撥向電源接口方向上電,燒寫新鏡像后等待啟動系統(tǒng),在命令行中輸入getevent可以進(jìn)入測試程序,通過輸出的打印信息我們知道,我們的gpadc驅(qū)動上報(bào)的信息使用的

/dev/input/event1,此時(shí)按下按鍵,會讀取按鍵的鍵值。

root@TinaLinux:~# getevent
add device 1: /dev/input/event2
  name:     "ft6336"
add device 2: /dev/input/event1
  name:     "sunxi-gpadc0"
add device 3: /dev/input/event0
  name:     "axp2101-pek"
poll 4, returned 1
/dev/input/event1: 0001 0073 00000001
poll 4, returned 1
/dev/input/event1: 0000 0000 00000000
poll 4, returned 1
/dev/input/event1: 0001 0073 00000000
poll 4, returned 1
/dev/input/event1: 0000 0000 00000000

按下Crtl+C結(jié)束測試。

7.編寫一個(gè)測試應(yīng)用程序

通過上一章節(jié)的測試,我們知道gpadc使用的/dev/input/event1上報(bào)按鍵數(shù)據(jù),則我們編寫的應(yīng)用程序中獲取數(shù)據(jù)的節(jié)點(diǎn)應(yīng)該為/dev/input/event1,應(yīng)用程序如下所示。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define DEV_PATH "/dev/input/event1" //Modified to gpadc drive reporting node
static int gpadc_fd = 0;

unsigned int test_gpadc(const char * event_file)
{
        int code = 0, i;

        struct input_event data;

        gpadc_fd = open(DEV_PATH, O_RDONLY);

        if(gpadc_fd <= 0)
        {
                printf("open %s error!n", DEV_PATH);
                return -1;
        }

        for(i = 0; i < 10; i++) //read 10 times
        {
                read(gpadc_fd, &data, sizeof(data));
                if(data.value == 1)
                {
                        printf("key %d pressedn", data.code);
                }
                else if(data.value == 0)
                {
                        printf("key %d releaseedn", data.code);
                }
        }
        close(gpadc_fd);
        return 0;
}

int main(int argc,const char *argv[])
{
    int rang_low = 0, rang_high = 0;
        return test_gpadc(DEV_PATH);

8.編譯應(yīng)用程序并進(jìn)行測試

新建一個(gè)gpadc目錄,存放應(yīng)用程序和可執(zhí)行程序。

book@100ask:~/workspaces$ mkdir gpadc_test
book@100ask:~/workspaces$ cd gpadc_test/
book@100ask:~/workspaces/gpadc_test$ vi gpadc_test.c

將上一小節(jié)編寫的應(yīng)用程序復(fù)制到gpadc_test.c中保存。

編寫完成后,我們需要提供編譯環(huán)境給gpadc_test應(yīng)用程序,輸入

book@100ask:~/workspaces/gpadc_test$ export STAGING_DIR=~/workspaces/tina-v853-open/prebuilt/rootfsbuilt/arm/toolchainsunxi-musl-gcc-830/toolchain/arm-openwrt-linux-muslgnueabi

使用交叉編譯工具鏈編譯二進(jìn)制文件,注意:需要Tina SDK包目錄需要更換為自己的目錄。

book@100ask:~/workspaces/gpadc_test$ ~/workspaces/tina-v853-open/prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-gcc -o gpadc_test gpadc_test.c

編譯完成后會再當(dāng)前目錄下生成一個(gè)gpadc_test可執(zhí)行程序,將其拷貝到開發(fā)板上運(yùn)行即可。下面使用TF卡的方式將文件拷貝到開發(fā)板上,此時(shí)假設(shè)你已經(jīng)將文件拷貝到TF卡中,插入開發(fā)板后,在命令行中輸入以下命令掛在SD卡到/mnt/目錄下,并將gpadc_test應(yīng)用程序拷貝到、root目錄下。

root@TinaLinux:/# mount /dev/mmcblk1p1 /mnt/
[   26.744697] FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
root@TinaLinux:/# cd /mnt/
root@TinaLinux:/mnt# ls
System Volume Information  gpadc_test
root@TinaLinux:/mnt# cp gpadc_test /root/

進(jìn)入/root目錄下執(zhí)行測試程序,該程序讀取10次值會自動結(jié)束才測試

root@TinaLinux:/mnt# cd /root/
root@TinaLinux:~# ./gpadc_test
key 115 pressed
key 0 releaseed
key 115 releaseed
key 0 releaseed
key 114 pressed
key 0 releaseed
key 114 releaseed
key 0 releaseed
key 139 pressed
key 0 releaseed
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5052

    文章

    18910

    瀏覽量

    300765
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11170

    瀏覽量

    208469
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4834

    瀏覽量

    96844
  • 按鍵輸入
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    6147
  • type-c
    +關(guān)注

    關(guān)注

    549

    文章

    1756

    瀏覽量

    268342
收藏 人收藏

    評論

    相關(guān)推薦

    1.100ASK_V853-PRO 環(huán)境配置及編譯燒寫

    本章主要介紹關(guān)于100ASK_V853-PRO開發(fā)板的Tina SDK包的下載和編譯打包生成鏡像,并將鏡像燒錄到100ASK_V853-PRO開發(fā)板上。在進(jìn)行100
    的頭像 發(fā)表于 05-10 11:49 ?1353次閱讀
    1.100<b class='flag-5'>ASK_V853-PRO</b> 環(huán)境配置及編譯燒寫

    2.100ASK-V853-PRO開發(fā)板支持WIFI和有線網(wǎng)卡

    ? 通過上一章節(jié),我們已經(jīng)成功下載Tina SDK包,完成編譯并燒寫Tina Linux系統(tǒng),接下來展示100ASK_V853-PRO開發(fā)部如何通過WIFI和有線網(wǎng)卡進(jìn)行上網(wǎng)。
    的頭像 發(fā)表于 05-10 14:44 ?1256次閱讀
    2.100<b class='flag-5'>ASK-V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>WIFI和有線網(wǎng)卡

    3.100ASK_V853-PRO開發(fā)板支持七寸RGB屏

    ? 在前面我們已經(jīng)學(xué)習(xí)了關(guān)于100ASK_V853-PRO編譯和燒寫,接下來就是在Tina SDK下去適配七寸RGB屏。
    的頭像 發(fā)表于 05-10 15:26 ?1133次閱讀
    3.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>七寸RGB屏

    6.100ASK_V853-PRO開發(fā)板支持MIPI攝像頭

    ? 100ASK_V853-PRO開發(fā)板支持4LINE的MIPI攝像頭和2LINE的MIPI攝像頭,使用百問網(wǎng)提供的Tina SDK包生成的鏡像,系統(tǒng)已經(jīng)配置好了,可以直接使用。本章介紹如何去適配一個(gè)MIPI攝像頭,本文所用的2
    的頭像 發(fā)表于 05-11 10:08 ?1490次閱讀
    6.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>MIPI攝像頭

    7.100ASK_V853-PRO開發(fā)板支持人形檢測和人臉識別

    ? V853 芯片內(nèi)置一顆 NPU核,其處理性能為最大 1 TOPS 并有 128KB 內(nèi)部高速緩存用于高速數(shù)據(jù)交換,支持 OpenCL、OpenVX、android NN 與 ONNX 的 API
    的頭像 發(fā)表于 05-12 10:28 ?3104次閱讀
    7.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>人形檢測和人臉識別

    9.100ASK_V853-PRO開發(fā)板支持E907小核開發(fā)

    ? 100ASK_V853-PRO開發(fā)板V853芯片集成Arm Cortex-A7和RISC-V E907 雙CPU,玄鐵E907 是一款完全可綜合的高端 MCU 處理器。它兼容 R
    的頭像 發(fā)表于 05-12 10:35 ?1400次閱讀
    9.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>E907小核<b class='flag-5'>開發(fā)</b>

    11. 100ASK-V853-PRO開發(fā)板 RGB屏測試指南

    固件位于資料光盤中的10_測試鏡像/1.測試七寸RGB屏/v853_linux_100ask_uart0.img
    的頭像 發(fā)表于 06-16 15:36 ?928次閱讀
    11. 100<b class='flag-5'>ASK-V853-PRO</b><b class='flag-5'>開發(fā)板</b> RGB屏測試指南

    全志V853開發(fā)板原理圖

    ,通過上拉或下拉執(zhí)行啟動。 開發(fā)板預(yù)留了SPI NOR、SPI NAND的焊盤,可以焊接 V853 芯片支持的 SPI NOR、SPI NAND 儲存器 BOOT SEL 0BOOT SEL
    發(fā)表于 01-12 09:48

    【免費(fèi)試用04期】全志V853開發(fā)板試用活動

    本期試用名單:mameng lingxin-yuhe春天一滿屋 大菠蘿AlphaALSET試用報(bào)告:mameng【全志V853開發(fā)板試用】國產(chǎn)之光——全志V853開發(fā)硬件介紹【全志
    發(fā)表于 07-21 10:27

    【開源硬件大賽】基于全志V853設(shè)計(jì)的全功能BTB學(xué)習(xí)開發(fā)板

    100ask_V853-Pro開發(fā)簡述核心資源簡述BTB核心,板載EMMC DDR V853 主芯片 AXP電源芯片背面
    發(fā)表于 12-07 15:03

    100ASK_全志V853-PRO開發(fā)板 環(huán)境配置及編譯燒寫

    開發(fā)板的12V電源線,并將兩條Type-C分別連接到開發(fā)板和電腦端以后,將開關(guān)撥向靠近12V電源的方向即可將開發(fā)板上電。然后先按住 100
    發(fā)表于 05-04 10:14

    V853 PER1開發(fā)板PCB文件

    V853_PER1開發(fā)板PCB文件,使用allegro進(jìn)行設(shè)計(jì)
    發(fā)表于 10-21 15:14 ?0次下載

    100ASK_V853-PRO開發(fā)板支持人形檢測與人臉檢測

    本文詳細(xì)描述了100ASK_V853-PRO開發(fā)板運(yùn)行測試程序檢測人形和人臉的過程,輸出文件包含畫框圖像結(jié)果、執(zhí)行性能、模型精確度。下面直接展示該應(yīng)用程序處理的結(jié)果。
    的頭像 發(fā)表于 04-27 11:00 ?629次閱讀
    100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>人形檢測與人臉檢測

    全志V853開發(fā)板雙目攝像頭模組原理圖20220624

    全志V853開發(fā)板雙目攝像頭模組原理圖20220624
    發(fā)表于 10-19 15:11 ?25次下載

    全志V853開發(fā)板原理圖20220624

    全志V853開發(fā)板原理圖20220624
    發(fā)表于 10-19 15:11 ?20次下載