<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

DshanMCU-R128s2 ADC按鍵配置方法

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

FreeRTOS平臺上使用的按鍵為ADC-KEY,采用的ADC模塊為GPADC。

按鍵功能驅動的實現是通過ADC分壓,使每個按鍵檢測的電壓值不同,從而實現區分不同的按鍵。按下或者彈起中斷之后,通過中斷觸發,主動檢測當前電壓識別出對應的按鍵。最后再通過input子系統將獲取按鍵的鍵值并上報給應用層。

GPADC-Key配置方法

按鍵結構體定義key_config的成員:

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

不同平臺的配置可能不同,以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}
};

當前按鍵驅動的配置都是以hardcode的方式寫入驅動代碼中,也就是說按鍵的數量,不同按鍵對應的電壓值,不同按鍵對應的KeyCode等等配置如果要修改的話,需要對源碼進行修改。

如上述按鍵結構體的定義,以下兩配置按照默認配置即可。

  • measure:GPADC最大能夠識別的電壓值,需要根據UserMaual來設置。默認為2.5V。
  • name:注冊的按鍵驅動名稱,會注冊到input子系統中。

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

  • key_num: 按照實際硬件設計來設置。
  • key_vol: 按照硬件,實際每個按鍵分壓的情況來設置。
  • scankeycodes:每個按鍵對應的KeyCode,方便應用通過input獲得按下的按鍵時,能夠識別是哪個按鍵按下了。

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

image1

在圖中,VCC輸入的電壓為3.3V,通過分壓關系,第一個按鍵的電壓為0.21V,因此key_vol可以設置為210,以此類推。

驅動初始化方法

默認系統啟動時,不會加載GPADC驅動以及按鍵驅動。

如果需要加載GPADC-Key驅動,需要調用以下函數:

int sunxi_gpadc_key_init(void);

調用 sunxi_gpadc_key_init() 該函數即可完成GPADC驅動以及按鍵驅動的加載了,即可開始使用按鍵驅動。

應用調用方法

接下來繼續介紹一下,應用中該如何獲取按鍵按下的事件。

在FreeRTOS系統中,也移植了 Linux 的 input 子系統。GPADC-Key 中也是調用了 input 的接口,進行注冊 input 設置,上報事件等動作。

在調用 sunxi_gpadc_key_init() 時,通過 input_set_capability() 去設置了事件的屬性;通過 sunxi_input_register_device() 注冊了 input 設備;在按鍵按下觸發中斷時,也是通過 input_report_key()input_sync() 上報 input 事件。

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

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

    sunxi_gpadc_key_init(); // 驅動初始化

    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;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • adc
    adc
    +關注

    關注

    95

    文章

    5681

    瀏覽量

    540229
  • FreeRTOS
    +關注

    關注

    12

    文章

    474

    瀏覽量

    61461
  • ADC按鍵設計
    +關注

    關注

    0

    文章

    3

    瀏覽量

    1654
  • R128
    +關注

    關注

    0

    文章

    41

    瀏覽量

    50
收藏 人收藏

    評論

    相關推薦

    DshanMCU-R128s2全志R128視頻教程

    基于DShanMCU-R128S2_DevKit的入門教程
    的頭像 發表于 12-26 14:05 ?278次閱讀

    DshanMCU-R128s2 R128 模組

    R128 模組 針對 R128 芯片,百問科技提供推出了一種型號模塊,如下表所示 型號 SoC CPU0 CPU1 DSP SRAM LS-PSRAM HS-PSRAM Flash DAC
    的頭像 發表于 12-26 11:11 ?465次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> R<b class='flag-5'>128</b> 模組

    DshanMCU-R128s2硬件設計參考

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

    DshanMCU-R128s2術語表

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

    DshanMCU-R128s2啟動與資源劃分

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

    DshanMCU-R128s2 配置引腳復用

    } 代表不同的方案,例如 module 方案。 引腳配置文件配置復用 R128 平臺使用 sys_config.fex 作為引腳配置文件,他會在打包時打包編譯進入系統,在系統運行時會解
    的頭像 發表于 12-22 17:36 ?381次閱讀

    DshanMCU-R128s2 Hello World!

    本文將介紹使用 R128 開發板從串口輸出 Hello World 的方式介紹 SDK 軟件開發流程。 載入方案 我們使用的開發板是 R128-Devkit,需要開發 C906 核心的應用程序,所以
    的頭像 發表于 12-22 17:24 ?330次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> Hello World!

    DshanMCU-R128s2 RTOS 軟件包配置

    本文將介紹 RTOS 軟件包、地址,內核配置等。 Kconfig 簡介 有過 linux 內核開發經驗的人,對 menuconfig 不會陌生。對于各類內核,只要是支持 menuconfig 配置
    的頭像 發表于 12-22 16:20 ?272次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> RTOS 軟件包<b class='flag-5'>配置</b>

    DshanMCU-R128s2 R128 DevKit 開發板

    針對 R128 模組,百問科技推出了 R128 DevKit 開發板作為快速開發評估工具。 特性: 板載 R128-S2-N16R16 模組 板載 2.4G RF 陶瓷天線 板載 USB Type
    的頭像 發表于 12-22 12:02 ?308次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b> R<b class='flag-5'>128</b> DevKit 開發板

    DshanMCU-R128s2芯片簡介

    DshanMCU-R128s2芯片簡介
    的頭像 發表于 12-22 09:55 ?464次閱讀
    <b class='flag-5'>DshanMCU-R128s2</b>芯片簡介

    小時候畫在手腕上的表,我用全志R128讓他真正動了起來

    ——NWatch,并把他移植到了R128開發板上。 項目簡介 本項目基于ZakKemble的開源項目NWatch,與原作者的NWatch不一樣的是,作者將其移植到DShanMCU-R128s2
    發表于 11-09 17:03

    基于DShanMCU-R128s2-DevKit開發智能手表

    本項目基于DShanMCU-R128s2-DevKit開發,用意是提供一個綜合的示例進行學習參考。
    的頭像 發表于 11-01 15:32 ?480次閱讀
    基于<b class='flag-5'>DShanMCU-R128</b>s2-DevKit開發智能手表

    全志R128外設模塊配置ADC按鍵配置方法

    FreeRTOS平臺上使用的按鍵ADC-KEY,采用的ADC模塊為GPADC。
    的頭像 發表于 10-20 16:41 ?759次閱讀
    全志R<b class='flag-5'>128</b>外設模塊<b class='flag-5'>配置</b>—<b class='flag-5'>ADC</b><b class='flag-5'>按鍵</b><b class='flag-5'>配置</b><b class='flag-5'>方法</b>

    全志R128外設模塊配置——ADC按鍵配置方法

    ADC 按鍵配置方法 FreeRTOS平臺上使用的按鍵ADC-KEY,采用的
    發表于 10-20 11:04

    DshanMCU-R128s2-DEVKIT應用開發案例

    本文章為DshanMCU-R128s2-DEVKIT應用開發案例,本文案例(點亮一顆 LED 燈)代碼可以到全志在線-在線文檔或者復制鏈接前往下載。
    的頭像 發表于 09-28 16:26 ?596次閱讀
    <b class='flag-5'>DshanMCU-R128</b>s2-DEVKIT應用開發案例
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>