基于ARM的矩阵键盘设计及其linux驱动实现

最新更新时间:2014-02-28来源: 21IC关键字:ARM  矩阵键盘设计  linux驱动 手机看文章 扫描二维码
随时随地手机看文章

1.引言

ARM微处理器已广泛应用于工业控制、消费类电子产品、通信系统等领域。矩阵键盘是一种常用的键盘形式,它将按键设计成M行N列,这样共需M+N根信号线,却可驱动M×N个按键,大大节约了I/O资源。本文介绍了一种利用TQ2440开发板的GPIO口扩展5×4矩阵键盘的方法,并将所有按键重新布局成手持终端的键盘形式,方便操作。

2.硬件设计

本设计扩展5行4列的矩阵键盘,如图1所示。其中行线ROW1-ROW5连接S3C2440的中断引脚EINT8,EINT9,EINT11,EINT13,EINT14[1].这些中断引脚本身连有10kΩ的上拉电阻,把中断引脚电平拉高,确保按键空闲时不会触发中断。列线COL1-COL4连接S3C2440的普通I/O口GPF3,GPF4,GPG7,GPG10.这里需要注意的问题是:确保行线所用的中断在Linux的其他设备中均未使用到,否则会引起该驱动程序或其他驱动程序初始化失败。

 

 

考虑到手持终端设备按键的常用性与操作的方便性,只取矩阵键盘的前18键,并将它们重新布局为图2的形式。其中Ent键具有二重功能,即确认功能(短按)和开关机功能(长按),此功能将在驱动程序中实现。

 

 

3.矩阵键盘的Linux驱动程序设计

3.1 键盘驱动总体概述

驱动程序是操作系统内核和硬件设备之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,使应用程序可以像操作普通文件一样操作硬件设备[2].驱动程序没有main函数,它以一个模块初始化函数作为入口,并且它完成初始化之后不再运行,等待系统调用。

驱动程序是linux内核的一部分,所以在程序编写上要采用linux的表达方式。首先将列I/O端口定义为数组:col_table [] ={ S3C2410_GPF3,S3C2410_GPF4, …},行I/O端口定义为结构型:

button_irqs [] ={ {IRQ_EINT8,S3C2410_GPG0,S3C2410_GPG0_EINT8, 0,“R1″},

{IRQ_EINT9,S3C2410_GPG1,S3C2410_GPG1_EINT9, 1,”R2″},

…}.//中断号(irq),引脚(pin),引脚设置,序号,名称

矩阵键盘是作为Linux的一个字符设备注册到系统中的。我们首先向系统注册矩阵键盘设备,包括设备号,设备名及file_operations结构体;file_operations结构体的成员函数是字符设备驱动程序设计的主体内容,这些函数实际会在应用程序进行Linux的open()、write()、read()、close()等系统调用时最终被调用[3].用户对键盘没有写操作,其file_operations结构体的成员函数为open()、read()、close()、poll()。

中断的注册和行列初始化在打开键盘时(即open()函数中)实现。注册中断包括:中断号,中断入口程序,中断方式,中断名和代号。关键语句为:request_irq(button_irqs[i].irq,buttons_interrupt,IRQ_TYPE_EDGE_FALLING,button_irqs[i].name,(void*)&button_irqs[i])。IRQ_TYPE_EDGE_FALLING意思为下降沿触发。然后再进行行列初始化:设置行线为中断,使能上拉,在linux中其表达方式为:

s3c2410_gpio_cfgpin(button_irqs[i].

pin,S3C2410_GPIO_SFN2); //设置第i行引脚为中断

s3c2410_gpio_pullup(button_irqs[i].

pin,1); //第i行引脚上拉

设置列线为输出,置低电平。语句表达同理,由于篇幅所限,这里不再一一列出。read()函数实现从设备中读取数据。该函数实现无按键按下时程序进入休眠,关键代码:

static DECLARE_WAIT_QUEUE_HEAD(button_waitq); //生成一个等待队列头队列,名为button_waitq

static volatile int ev_press = 0;//置1,表示有键按下

ev_press为0时执行语句:wait_event_interruptible(button_waitq,ev_press),程序即进入休眠。ev_press为1时把数据从内核空间复制到用户空间,关键语句:

copy_to_user(buff,(const void *)key_values,min(sizeof(key_values),count));//buff为用户空间的指针,key_values为内核空间指针,最后一个参数为从内核空间向用户空间拷贝数据的字节数,我们取实际大小与用户指定大小中的最小值。数据复制成功时返回零;出错时返回没有复制成功的数据字节数。

close()函数实现关闭矩阵键盘设备,释放已注册的中断,关键语句:free_irq(button_irqs[i].irq,(void *)&button_irqs[i])。

Poll()函数实现轮询,如果没有按键数据,调用linux的poll_wait函数等待;如果有按键数据,则select函数会立刻返回。

3.2 中断处理及键盘扫描程序

中断处理函数的名称为上面注册的buttons_interrupt.具体程序流程如图3所示。当有按键按下时,该键所在行列导通。列的低电平将该行电平拉低,进而触发中断。然后,进入中断处理函数。由于按键存在抖动的问题,单靠一次中断的触发就判定有按键按下是不可靠的,所以采用定时器延时10ms后再进入键盘扫描函数。

 

 

本设计的键盘扫描程序采用先确定行再确定列的方法,最后对行列进行一定的运算即得键值。首先确定行:逐行扫描,判断是否有行引脚为低电平。若有,保存该行值(row)。继续确定列:逐列置低电平,当该列为按下所在列时,才会使该行再次为低电平,从而确定列(column)。再对行列进行运算:k=row*4+column,则将矩阵键盘的每一键对应为键号0-19.键盘布局为图2所示形式后,我们只取矩阵键盘的前18键(键号0-17),键值保存为k+1.对于Ent键,通过按下的时间长短区分是确定功能还是开关机功能,按下时间小于0.5秒为确认功能,按下时间大于1.6秒为开关机功能,时间在0.5秒-1.6秒的视为无效操作。计时方法为:

若该行仍为低电平且整数cnt小于1700:延时1ms,cnt++;根据cnt值即得按下时间。

开关机功能保存为第18键号,键值19.

4.驱动程序的测试

测试程序属于上层应用程序,直接调用键盘驱动程序提供的接口即可实现度键盘的操作。我们调用open()函数实现矩阵键盘设备的打开,再调用read()函数即可将键盘数据读取出来并保存到自己定义的数组中,最后使用printf()函数将测试结果显示出来。

功运用到笔者的项目中,键盘输入的正确率和反应时间均符合设计要求。

5.总结

本文介绍了一种直接从ARM的I/O口扩展矩阵键盘的方法,它无需增加其它接口元器件,设计快速实用,并实现了在Linux系统下的驱动,为ARM嵌入式设备扩展手持终端式键盘提供了一种解决方案。

关键字:ARM  矩阵键盘设计  linux驱动 编辑:探路者 引用地址:基于ARM的矩阵键盘设计及其linux驱动实现

上一篇:H.264/AVC解码器运动矢量预测模块设计与应用
下一篇:基于ARM的光学指纹识别系统的设计方案

推荐阅读最新更新时间:2023-10-12 22:36

宏碁称Windows 8 on ARM性能不佳
    宏碁表示他们没有计划推出基于ARM处理器的Windows 8笔记本,因为性能表现不如意。 宏基计划发布一系列基于Windows 8的笔记本和平板设备,包括两款触摸屏超级本。     第一波Windows 8产品将使用英特尔处理器,而基于ARM的产品估计要在2013年才会出现在市场上。宏碁董事长王振堂说,该公司无计划在非平板产品上使用ARM。他说, 根据工程师研究,除非使用64位ARM,否则性能问题将是一大瓶颈。
[手机便携]
为什么说STM32U5是设计最为复杂的低功耗MCU
2021年3月,意法半导体(ST)宣布推出STM32U5,9月STM32U5首批型号正式量产,这也意味着ST诞生了首款同时达到PSA 3级和SESIP 3安全认证的超低功耗微控制器。 ST中国区微控制器事业部市场及应用总监曹锦东表示,STM32低功耗系列产品从STM32L5到STM32U5,虽然内核一样,都采用了Arm v8架构的Cortex-M33,但是其工艺、电路设计等方面都做了巨大革新,并且采用了全新40nm技术平台,这也是未来ST低功耗MCU技术的重要支撑平台。 ST中国区微控制器事业部市场及应用总监曹锦东 历史上,超低功耗产品线一直以来都是STM32的战略性产品线。自2007年ST发布第一款基于Cortex
[单片机]
为什么说STM32U5是<font color='red'>设计</font>最为复杂的低功耗MCU
一种基于ARM和PoE的嵌入式系统的网络广播设计方案
1 系统结构 系统由音频放大器LM48510、音频处理器、以太网供电和以太网数据通信等组成。从前端到后端依次经过音频放大器LM48510→ARM926EJS→PoE/Network等几个处理过程,实现以太网供电的网络广播。系统的硬件结构如图1所示。 图1 系统硬件结构 2 系统的硬件设计 2.1 ARM926EJS相关设计 ARM926EJS处理器是通用微处理器ARM9家族的一员,属于5TEJ版ARM架构。针对的是多任务应用,全存储器管理、高性能、小核心尺寸和低功耗都是其重要的特点。ARM926EJS处理器支持32位ARM 16位Thumb指令集,使得用户能在高性能和高代码密
[单片机]
一种基于<font color='red'>ARM</font>和PoE的嵌入式系统的网络广播<font color='red'>设计</font>方案
基于嵌入式Linux内核的键盘驱动控制模块设计
为了适应嵌入式设备外设的多样性,本文以特殊矩阵键盘为例,设计了一套完整的驱动控制模块。硬件 电路 设计采用外扩3片SN74HC 164芯片的方式,节省了GPIO引脚的使用,大大提高了利用效率。同时,在此基础上引出了Linux内核中input子系统的特性和工作机制,呈现了较为完整的输入事件由内核空间传递到用户空间进程的过程。实验结果表明,设计的驱动模块具有良好的实时性和准确性。 随着 微处理器 技术的不断发展和数字化产品的普及,嵌入式系统的研究开发逐渐成为热点,Linux也以其开源、稳定、可裁剪的优势成为嵌入式操作系统的主流。在众多的嵌入式系统中,键盘成为一种应用最为广泛的输入设备。然而,嵌入式设备的功能差异性又决定了为其提
[单片机]
基于嵌入式<font color='red'>Linux</font>内核的键盘<font color='red'>驱动</font>控制模块<font color='red'>设计</font>
ARM入门书籍推荐
《深入浅出ARM7--LPC213x(上.下)》 (周立功 张华 著北京航天航空大学出版社 45.00元) 这本是首先要推荐的,周立功写的经典系列教材之一(另一个是基础教程系列,下面介绍)。 上册前两章为基于EasyARM2131的编译环境介绍,后三章功能部件的详细介绍与使用。下册是基于UCOS-Ⅱ操作系统的应用。 优点:每个章节都有配套实验和程序代码,非常适合初学者对ARM体系建立整体框架,简洁实用。 缺点:没有对汇编语言的讲解,在研究启动代码时有些不方便。而且你的板子并不是2104,启动代码会与书中例子不同,需要自己修改。(这一点可以参看基础教程弥补。)
[单片机]
解决make:arm-linux-gcc :command not found
1、设置交叉编译工具地址 arm-linux-gcc sudo vi /etc/environment PATH= /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin ~ 错误提示: arm-linux-gcc: Command not found 原因: 1)没有在 ~/.bashrc 添加交叉编译工具链bin文件路径 解决方法: 需要sudo vi ~/.bashrc,在最末添加 : exp
[单片机]
ARM看好多核、64位元处理器发展 不往PC靠拢
    而针对近期经常被提出讨论的多核心、64位元等议题,在此次与ARM处理器部门市场营销策略副总裁Noel Hurley、多媒体处理器部门产业合作及营销副总裁Dennis Laudick所进行说明活动中,我们也提问ARM方面对此类议题看法。 ARM处理器部门市场营销策略副总裁Noel Hurley 对于多核应用发展 ARM持正向看法 针对Qualcomm、Nvidia等厂商确实提出各自的多核心架构设计,以及不同省电技术应用,ARM处理器部门市场营销策略副总裁Noel Hurley认为其实多核心策略并没有所谓最好差别,毕竟同样都是看重于省电与效能之间的平衡,ARM big.LITTLE技术也同样是针对此目的而提出,因此认为这样的
[手机便携]
ARM7系统中实现CF卡存储的文件系统设计
摘要:介绍针对ARM7架构的嵌入式系统中,以CF卡作为存储介抽的文件系统的设计,并通过GPS车辆导航系统中地图信息读写的具体应用介绍了其软硬件电路的实现方法。 关键词:嵌入式文件系统 CF卡 ARM7 随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。 目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。 另一方
[应用]
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved