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
    +关注

    关注

    100

    文章

    7955

    浏览量

    557087
  • FreeRTOS
    +关注

    关注

    14

    文章

    501

    浏览量

    67315
  • ADC按键设计
    +关注

    关注

    0

    文章

    3

    浏览量

    1773
  • R128
    +关注

    关注

    0

    文章

    41

    浏览量

    423
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    8通道12位可配置ADC/DAC芯片AD5592R的技术剖析与应用指南

    8通道12位可配置ADC/DAC芯片AD5592R的技术剖析与应用指南 在电子设计领域,一款功能强大且灵活的芯片往往能为工程师们带来更多的设计可能性。AD5592R就是这样一款值得深入
    的头像 发表于 03-29 16:40 1029次阅读

    AD7091R-2/AD7091R-4/AD7091R-8:多通道12位超低功耗ADC的深度解析

    AD7091R-2/AD7091R-4/AD7091R-8:多通道12位超低功耗ADC的深度解析 在电子设计领域,ADC(模拟 - 数字转换
    的头像 发表于 03-25 14:45 217次阅读

    AD5592R:8 通道、12 位可配置 ADC/DAC 的全面解析

    AD5592R:8 通道、12 位可配置 ADC/DAC 的全面解析 在电子设计领域,一款性能出色且功能多样的 ADC/DAC 芯片对于实现复杂的模拟和数字信号处理至关重要。AD559
    的头像 发表于 03-25 10:30 226次阅读

    深入解析 AD5593R:多功能可配置 ADC/DAC 的卓越之选

    深入解析 AD5593R:多功能可配置 ADC/DAC 的卓越之选 在电子设计领域,一款性能卓越且功能多样的 ADC/DAC 芯片往往能为设计带来极大的便利和灵活性。AD5593
    的头像 发表于 03-25 10:30 186次阅读

    深入解析SGM51242R2/R4/R8:多通道12位ADC的卓越之选

    : SGM51242R2_SGM51242R4_SGM51242R8.pdf 产品概述 SGM51242R2、SGM51242R4和SGM51242R8这三款
    的头像 发表于 03-12 10:30 342次阅读

    【RA-Eco-RA2E1-V1.0开发板试用】ADC内部电压采集。

    点击左侧Stacks → New Stack → 选择Analog → ADC (SAR) → r_adc配置ADC参数,主要设置内部采集通道。 Reference Voltage
    的头像 发表于 02-26 10:56 287次阅读
    【RA-Eco-RA<b class='flag-5'>2</b>E1-V1.0开发板试用】<b class='flag-5'>ADC</b>内部电压采集。

    ADC128S102QML - SP:辐射加固8通道12位A/D转换器的技术剖析

    ADC128S102QML - SP:辐射加固8通道12位A/D转换器的技术剖析 在电子工程师的设计生涯中,选择合适的A/D转换器是许多项目成功的关键一步。今天我们要深入探讨的是Texas
    的头像 发表于 02-05 15:05 788次阅读

    【RA-Eco-RA2E1-V1.0开发板试用】+ OLED显示ADC采样数据

    _RA6M5/object_oriented_module_programming_method_in_ARM_embedded_system/ 选择P400、P401为OLED显示屏I2C接口的SCL与SDA引脚,选择P000作为ADC输入引脚,新建工程选择
    发表于 02-02 09:21

    ADC128S052:高性能12位A/D转换器的深度解析

    概述 ADC128S052与ADC128S052 - Q1采用逐次逼近寄存器(SAR)架构,并内置跟踪保持电路,可配置为接受多达8个输入信号。其输
    的头像 发表于 11-30 14:53 1171次阅读
    <b class='flag-5'>ADC128S</b>052:高性能12位A/D转换器的深度解析

    深入解析ADC128S022:8通道12位A/D转换器的卓越之选

      在电子设计领域,模拟 - 数字转换器(ADC)是连接现实世界模拟信号与数字系统的关键桥梁。今天,我们来详细探讨德州仪器(TI)的一款高性能ADC——ADC128S022,深入了解它的特性、应用场
    的头像 发表于 11-30 14:47 1167次阅读
    深入解析<b class='flag-5'>ADC128S</b>022:8通道12位A/D转换器的卓越之选

    ADC128S102QML-SP 数据手册全文总结

    ADC128S102设备是一款低功耗、八通道CMOS 12位模数转换器,规格为50 kSPS转1 MSPS。该转换器基于逐次近似寄存器架构,内部设有轨迹保持电路。该设备可配置为在IN0至IN7输入处
    的头像 发表于 11-25 10:37 784次阅读
    ‌<b class='flag-5'>ADC128S</b>102QML-SP 数据手册全文总结

    ADC128D818 12 位 8 通道系统监控 ADC 产品手册总结

    The ADC128D818 I^2^C 系统监控器设计为最大灵活性。系统监控器可以配置为 单端和/或伪差分输入。车载温度传感器,结合了 WATCHDOG 窗口比较器和中断输出引脚 INT 使得
    的头像 发表于 11-21 09:29 752次阅读
    <b class='flag-5'>ADC128</b>D818 12 位 8 通道系统监控 <b class='flag-5'>ADC</b> 产品手册总结

    ADC128S052/ADC128S052-Q1 8 通道高速低功耗 ADC 产品总结

    ADC128S052x 是一款低功耗、八通道 CMOS 12位模拟转数字设备 转换为吞吐量的转换器规定为 从200千每秒到500千千每秒。该转换器基于逐次近似寄存器 采用内部轨道保持电路的架构。它可以配置为最多可接受八人 输入信号位于IN0至IN7。
    的头像 发表于 11-19 14:07 946次阅读
    <b class='flag-5'>ADC128S</b>052/<b class='flag-5'>ADC128S</b>052-Q1 8 通道高速低功耗 <b class='flag-5'>ADC</b> 产品总结

    ADC122S051/ADC122S051Q 12 位双通道低功耗 ADC 总结

    051/ADC122S051Q完全指定在 采样率范围为 200 ksps 至 500 ksps。该转换器基于逐次近似 具有内部跟踪保持电路的寄存器架构。它可以配置为接受一个 或输入 IN1 和 IN2 处的两个输入信号。
    的头像 发表于 11-17 18:17 1660次阅读
    <b class='flag-5'>ADC122S</b>051/<b class='flag-5'>ADC122S</b>051Q 12 位双通道低功耗 <b class='flag-5'>ADC</b> 总结

    ADC128S102-SEP 技术文档总结

    ADC128S102-SEP是一款低功耗、8通道、CMOS、12位模数转换器(ADC),额定转换吞吐率为50 kSPS至1 MSPS。该转换器基于逐次逼近寄存器 (SAR) 架构,具有内部跟踪保持电路。该器件可配置为在输入 IN
    的头像 发表于 10-30 14:06 845次阅读
    <b class='flag-5'>ADC128S</b>102-SEP 技术文档总结