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

    文章

    5653

    浏览量

    539508
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61351
  • ADC按键设计
    +关注

    关注

    0

    文章

    3

    浏览量

    1645
  • R128
    +关注

    关注

    0

    文章

    41

    浏览量

    46
收藏 人收藏

    评论

    相关推荐

    DshanMCU-R128s2全志R128视频教程

    基于DShanMCU-R128S2_DevKit的入门教程
    的头像 发表于 12-26 14:05 233次阅读

    DshanMCU-R128s2 R128 模组

    R128 模组 针对 R128 芯片,百问科技提供推出了一种型号模块,如下表所示 型号 SoC CPU0 CPU1 DSP SRAM LS-PSRAM HS-PSRAM Flash DAC
    的头像 发表于 12-26 11:11 373次阅读
    <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 504次阅读

    DshanMCU-R128s2术语表

    RISC-V 架构的 64 位元处理器单元 HIFI5 Cadence 推出的 Cadence Tensilica HiFi 5 DSP 32 位处理器单元 R128 全志推出的一款包含
    的头像 发表于 12-25 10:07 253次阅读

    DshanMCU-R128s2启动与资源划分

    下面简单介绍一下 R128 方案的资源划分与启动流程。 资源划分 CPU 资源划分 这只是默认配置方案,CPU 资源划分可以按照需求任意修改 CPU 功能说明 M33 控制核。运行 WI-FI/BT
    的头像 发表于 12-22 17:46 294次阅读
    <b class='flag-5'>DshanMCU-R128s2</b>启动与资源划分

    DshanMCU-R128s2 配置引脚复用

    } 代表不同的方案,例如 module 方案。 引脚配置文件配置复用 R128 平台使用 sys_config.fex 作为引脚配置文件,他会在打包时打包编译进入系统,在系统运行时会解
    的头像 发表于 12-22 17:36 334次阅读

    DshanMCU-R128s2 Hello World!

    本文将介绍使用 R128 开发板从串口输出 Hello World 的方式介绍 SDK 软件开发流程。 载入方案 我们使用的开发板是 R128-Devkit,需要开发 C906 核心的应用程序,所以
    的头像 发表于 12-22 17:24 287次阅读
    <b class='flag-5'>DshanMCU-R128s2</b> Hello World!

    DshanMCU-R128s2 RTOS 软件包配置

    本文将介绍 RTOS 软件包、地址,内核配置等。 Kconfig 简介 有过 linux 内核开发经验的人,对 menuconfig 不会陌生。对于各类内核,只要是支持 menuconfig 配置
    的头像 发表于 12-22 16:20 215次阅读
    <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 250次阅读
    <b class='flag-5'>DshanMCU-R128s2</b> R<b class='flag-5'>128</b> DevKit 开发板

    DshanMCU-R128s2芯片简介

    DshanMCU-R128s2芯片简介
    的头像 发表于 12-22 09:55 398次阅读
    <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 432次阅读
    基于<b class='flag-5'>DShanMCU-R128</b>s2-DevKit开发智能手表

    全志R128外设模块配置ADC按键配置方法

    FreeRTOS平台上使用的按键ADC-KEY,采用的ADC模块为GPADC。
    的头像 发表于 10-20 16:41 623次阅读
    全志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 554次阅读
    <b class='flag-5'>DshanMCU-R128</b>s2-DEVKIT应用开发案例