DshanMCU-R128s2 ADC按键配置方法

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的硬件设置。
在图中,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;}

美FCC委员:加征关税将严重减缓 5G在美国的推广
蓝思科技有望借3D玻璃配套柔性OLED需求爆发
可以直接用手腕温度差来充电的智能手表
二极管能降多少电压
嵌入式编程中函数返回类可能会有什么问题
DshanMCU-R128s2 ADC按键配置方法
如何使用Arduino构建一个计算器
用21张图把Git工作原理彻底说清楚
维信诺斥资440亿与多方共建AMOLED生产线
如何使创新的MCU实现高效节能电机控制
投资英伟达 孙正义人工智能梦碎
全球首台卷曲屏幕激光电视来了!
多路读写SDRAM接口设计
翠展微电子-美蓓亚三美奏响合作新旋律
下一代NVIDIA GPU信息规格曝光
关于AD前面电压跟随器设计方案
蓝牙技术助力改善医疗运营和患者护理
关于一种具有新型延时单元的鉴频鉴相器的设计
紫光展锐XY610 4G核心板介绍
各类政策支持下 2020年安防行业将迎来新的发展