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

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

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

DshanMCU-R128s2 ADC按鍵配置方法

嵌入式Linux那些事 ? 來(lái)源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-12-22 19:11 ? 次閱讀

FreeRTOS平臺(tái)上使用的按鍵為ADC-KEY,采用的ADC模塊為GPADC。

按鍵功能驅(qū)動(dòng)的實(shí)現(xiàn)是通過(guò)ADC分壓,使每個(gè)按鍵檢測(cè)的電壓值不同,從而實(shí)現(xiàn)區(qū)分不同的按鍵。按下或者彈起中斷之后,通過(guò)中斷觸發(fā),主動(dòng)檢測(cè)當(dāng)前電壓識(shí)別出對(duì)應(yīng)的按鍵。最后再通過(guò)input子系統(tǒng)將獲取按鍵的鍵值并上報(bào)給應(yīng)用層。

GPADC-Key配置方法

按鍵結(jié)構(gòu)體定義key_config的成員:

struct sunxikbd_config{
    unsigned int measure;    // 電壓閾值
    char *name;              // 功能名
    unsigned int key_num;    // 按鍵數(shù)量
    unsigned int scankeycodes[KEY_MAX_CNT];    // 按鍵的鍵值
    unsigned int key_vol[KEY_MAX_CNT];         // 按鍵的電壓值
};

不同平臺(tái)的配置可能不同,以r128為例,下面是r128的成員config:

static struct sunxikbd_config key_config = {
    .measure = 2500,
    .name = "gpadc-key",
    .key_num = 5,
    .key_vol = {164,415,646,900,1157},
    .scankeycodes = {115,114,139,164,116}
};

當(dāng)前按鍵驅(qū)動(dòng)的配置都是以hardcode的方式寫(xiě)入驅(qū)動(dòng)代碼中,也就是說(shuō)按鍵的數(shù)量,不同按鍵對(duì)應(yīng)的電壓值,不同按鍵對(duì)應(yīng)的KeyCode等等配置如果要修改的話,需要對(duì)源碼進(jìn)行修改。

如上述按鍵結(jié)構(gòu)體的定義,以下兩配置按照默認(rèn)配置即可。

  • measure:GPADC最大能夠識(shí)別的電壓值,需要根據(jù)UserMaual來(lái)設(shè)置。默認(rèn)為2.5V。
  • name:注冊(cè)的按鍵驅(qū)動(dòng)名稱,會(huì)注冊(cè)到input子系統(tǒng)中。

可以自定義的配置為:key_num,key_vol,scankeycodes。

  • key_num: 按照實(shí)際硬件設(shè)計(jì)來(lái)設(shè)置。
  • key_vol: 按照硬件,實(shí)際每個(gè)按鍵分壓的情況來(lái)設(shè)置。
  • scankeycodes:每個(gè)按鍵對(duì)應(yīng)的KeyCode,方便應(yīng)用通過(guò)input獲得按下的按鍵時(shí),能夠識(shí)別是哪個(gè)按鍵按下了。

key_vol的配置方法,可以參考下圖的GPADC-KEY的硬件設(shè)置。

image1

在圖中,VCC輸入的電壓為3.3V,通過(guò)分壓關(guān)系,第一個(gè)按鍵的電壓為0.21V,因此key_vol可以設(shè)置為210,以此類推。

驅(qū)動(dòng)初始化方法

默認(rèn)系統(tǒng)啟動(dòng)時(shí),不會(huì)加載GPADC驅(qū)動(dòng)以及按鍵驅(qū)動(dòng)。

如果需要加載GPADC-Key驅(qū)動(dòng),需要調(diào)用以下函數(shù):

int sunxi_gpadc_key_init(void);

調(diào)用 sunxi_gpadc_key_init() 該函數(shù)即可完成GPADC驅(qū)動(dòng)以及按鍵驅(qū)動(dòng)的加載了,即可開(kāi)始使用按鍵驅(qū)動(dòng)。

應(yīng)用調(diào)用方法

接下來(lái)繼續(xù)介紹一下,應(yīng)用中該如何獲取按鍵按下的事件。

在FreeRTOS系統(tǒng)中,也移植了 Linux 的 input 子系統(tǒng)。GPADC-Key 中也是調(diào)用了 input 的接口,進(jìn)行注冊(cè) input 設(shè)置,上報(bào)事件等動(dòng)作。

在調(diào)用 sunxi_gpadc_key_init() 時(shí),通過(guò) input_set_capability() 去設(shè)置了事件的屬性;通過(guò) sunxi_input_register_device() 注冊(cè)了 input 設(shè)備;在按鍵按下觸發(fā)中斷時(shí),也是通過(guò) input_report_key()input_sync() 上報(bào) input 事件。

因此,在應(yīng)用層想要獲取input事件,可以直接通過(guò)input接口去獲取,使用示例可如下例程:

int input_func(void)
{
    int fd = -1;
    struct sunxi_input_event event;

    sunxi_gpadc_key_init(); // 驅(qū)動(dòng)初始化

    fd = sunxi_input_open(DEVICE_NAME);
    if (fd < 0)
        return -1;

    while (1) {
        sunxi_input_readb(fd, &event, sizeof(struct sunxi_input_event));
        if (event.type != EV_KEY)
            continue;

        if (event.value == 0) {
            printf("key upn");
            continue;
        }
        printf("key press: KeyCode:%dn", event.code);
    }

    return 0;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    97

    文章

    6347

    瀏覽量

    543378
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    483

    瀏覽量

    61856
  • ADC按鍵設(shè)計(jì)

    關(guān)注

    0

    文章

    3

    瀏覽量

    1661
  • R128
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    89
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DshanMCU-R128s2全志R128視頻教程

    基于DShanMCU-R128S2_DevKit的入門教程
    的頭像 發(fā)表于 12-26 14:05 ?510次閱讀

    DshanMCU-R128s2 R128 模組

    R128-S2-N16R16 R128-S2 Arm Cortex-M33 C906 RISC-V HIFI5 DSP 1MByte 8Mbyte 8Mbyte 16M NOR Flash 2 Audio
    的頭像 發(fā)表于 12-26 11:11 ?912次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> <b class='flag-5'>R128</b> 模組

    DshanMCU-R128s2芯片手冊(cè)與資料

    : Xplorer Software (SDK) Download Xtensa Xplorer 授權(quán)申請(qǐng): Cadence Tensilica Offerings Xtensa Xplorer 試用申請(qǐng): request an evaluation license 其余手冊(cè)將在R128芯片正式發(fā)布后上傳
    的頭像 發(fā)表于 12-26 11:02 ?704次閱讀

    DshanMCU-R128s2芯片參數(shù)

    MB LS PSRAM R128 S2)/8 channels (R128 S3) - One LEDC used to control the external intellige
    的頭像 發(fā)表于 12-26 10:57 ?958次閱讀

    DshanMCU-R128s2硬件設(shè)計(jì)參考

    R128 DevKit 開(kāi)發(fā)板 硬件工程開(kāi)源地址:https://oshwhub.com/gloomyghost/r128-module 電路圖
    的頭像 發(fā)表于 12-26 09:46 ?879次閱讀

    DshanMCU-R128s2術(shù)語(yǔ)表

    RISC-V 架構(gòu)的 64 位元處理器單元 HIFI5 Cadence 推出的 Cadence Tensilica HiFi 5 DSP 32 位處理器單元 R128 全志推出的一款包含
    的頭像 發(fā)表于 12-25 10:07 ?532次閱讀

    DshanMCU-R128s2硬件設(shè)計(jì)指南

    原理圖設(shè)計(jì) 硬件系統(tǒng)框圖 R128是一顆專為“音視頻解碼”而打造的全新高集成度 SoC,主要應(yīng)用于智能物聯(lián)和專用語(yǔ)音交互處理解決方案。 單片集成 MCU+RISCV+DSP+CODEC+WIFI
    的頭像 發(fā)表于 12-25 09:41 ?742次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b>硬件設(shè)計(jì)指南

    DshanMCU-R128s2啟動(dòng)與資源劃分

    下面簡(jiǎn)單介紹一下 R128 方案的資源劃分與啟動(dòng)流程。 資源劃分 CPU 資源劃分 這只是默認(rèn)配置方案,CPU 資源劃分可以按照需求任意修改 CPU 功能說(shuō)明 M33 控制核。運(yùn)行 WI-FI/BT
    的頭像 發(fā)表于 12-22 17:46 ?590次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b>啟動(dòng)與資源劃分

    DshanMCU-R128s2 配置引腳復(fù)用

    解析 sys_config.fex 的驅(qū)動(dòng)配置位于 licheertos-componentsawsys_config_script 中。 對(duì)于配置引腳復(fù)用,只需要修改 boardr128s2{PROJECT}configsys
    的頭像 發(fā)表于 12-22 17:36 ?581次閱讀

    DshanMCU-R128s2 Hello World!

    載入方案選擇 r128s2_module_c906 $ source envsetup.sh $ lunch_rtos 1 編輯程序 打開(kāi)你喜歡的編輯器,修改文件: lichee/rtos
    的頭像 發(fā)表于 12-22 17:24 ?521次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> Hello World!

    DshanMCU-R128s2 SDK 架構(gòu)與目錄結(jié)構(gòu)

    R128 S2 是全志提供的一款 M33(ARM)+C906(RISCV-64)+HIFI5(Xtensa) 三核異構(gòu) SoC,同時(shí)芯片內(nèi)部 SIP 有 1M SRAM、8M LSPSRAM、8M
    的頭像 發(fā)表于 12-22 15:57 ?639次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> SDK 架構(gòu)與目錄結(jié)構(gòu)

    DshanMCU-R128s2 R128 EVT 開(kāi)發(fā)套件

    針對(duì) R128 模組,百問(wèn)科技推出了 R128 EVT 開(kāi)發(fā)套件作為快速開(kāi)發(fā)評(píng)估工具。
    的頭像 發(fā)表于 12-22 15:16 ?683次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> <b class='flag-5'>R128</b> EVT 開(kāi)發(fā)套件

    DshanMCU-R128s2 R128 DevKit 開(kāi)發(fā)板

    針對(duì) R128 模組,百問(wèn)科技推出了 R128 DevKit 開(kāi)發(fā)板作為快速開(kāi)發(fā)評(píng)估工具。 特性: 板載 R128-S2-N16R16 模組 板載 2.4G RF 陶瓷天線 板載 USB Type
    的頭像 發(fā)表于 12-22 12:02 ?545次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> <b class='flag-5'>R128</b> DevKit 開(kāi)發(fā)板

    DshanMCU-R128s2芯片簡(jiǎn)介

    DshanMCU-R128s2芯片簡(jiǎn)介
    的頭像 發(fā)表于 12-22 09:55 ?762次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b>芯片簡(jiǎn)介

    基于DShanMCU-R128s2-DevKit開(kāi)發(fā)智能手表

    本項(xiàng)目基于DShanMCU-R128s2-DevKit開(kāi)發(fā),用意是提供一個(gè)綜合的示例進(jìn)行學(xué)習(xí)參考。
    的頭像 發(fā)表于 11-01 15:32 ?724次閱讀
    基于<b class='flag-5'>DShanMCU-R128s2</b>-DevKit開(kāi)發(fā)智能手表