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

发布者:SparklingSoul最新更新时间:2014-03-17 来源: elecfans关键字: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的其他设备中均未使用到,否则会引起该驱动程序或其他驱动程序初始化失败。

  5行4列的矩阵键盘电路原理图

  考虑到手持终端设备按键的常用性与操作的方便性,只取矩阵键盘的前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()。[page]

  中断的注册和行列初始化在打开键盘时(即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驱动实现

上一篇:气动泵流量控制系统的设计
下一篇:基于AVR单片机和EM4094读写芯片的多协议RFID读卡器

推荐阅读最新更新时间:2024-03-16 13:38

ARM成立25年 它交出了一份怎样的成绩单?
    作为半导体行业最上游的公司,ARM的合作伙伴远比竞争对手多,从1990年成立到现在已经积累了1000多家合作伙伴,这些合作伙伴在ARM诞生的25 年里卖出了750多亿基于ARM架构的芯片。一千多家公司为你打工,这是一个很了不起的成绩,更何况这些“打工仔”中还有高通、联发科和三星这样的巨头。 谈到ARM的竞争对手,大部分人第一反应可能是英特尔x86或者是MIPS。不过那是过去式了,在物联网战场里,ARM的竞争对手会更多。 昨天是ARM公司成立25周年的日子,ARM来深圳展示了其傲人的战绩:今年第三季度营收达到了3.76亿美元(虽然不及高通的十分之一,但其员工数量也只为高通的十分之一),有95%的智能手机基于ARM架构;去
[手机便携]
基于arm cortex m0的MM32SPIN05TW之无传感方波驱动水泵方案
1. 简介:本文简单介绍基于MM32SPIN05TW之无传感方波驱动于 小型水泵 的应用实例。 方案特色: ARM Cortex-M0高性能电机驱动专用芯片 32K字节闪存、4K字节存储器、72MHz高速运行,并自带除法器、ADC、比较器…等 120/150度无传感方波驱动 电机转速可达100,000rpm (2极电机) 速度命令输入可为模拟电压或PWM信号 FG输出 定转速或恒功率运转 完整的保护机制: 过流保护、堵转保护、过压/欠压保护 水泵专属特点: 空载时,以高转速产生大吸力将水提上来 带载时,以高扭矩满足量程的要求 图1. 左图:常见的24V/13W小型水泵; 右图:采用MM32SPIN05TW的驱动板 2
[单片机]
基于<font color='red'>arm</font> cortex m0的MM32SPIN05TW之无传感方波<font color='red'>驱动</font>水泵方案
Applied Micro拆分ARM架构服务器芯片业
上月下旬通信芯片厂商MACOM达成最终协议以约7.7亿美元收购Applied Micro,日前则已决定只留下后者的高速载波和数据中心连网芯片业务,分拆它的ARM架构服务器芯片业务,这对ARM在服务器芯片市场造成了重击,对于Intel来说则是重大喜讯。 为何说是对ARM的重击 ARM已在移动市场占据垄断性的市场地位,Intel的X86架构进军移动市场基本可以说失败,另两种架构MIPS和Power的市场份额几乎可以忽略不计,在这样的情况下ARM希望进入Intel占据优势的PC市场和服务器市场。 PC市场目前以谷歌推出的chromebook帮助ARM占据了较大的优势,虽然chromebook可以使用Intel的处理器也可以使用ARM架构
[手机便携]
Arm CEO:英伟达收购不会改变Arm对中国市场的投入
根据协议,英伟达将向软银公司支付价值215亿美元的英伟达股票,以及120亿美元现金,其中包括签约时即刻支付的20亿美元。 对于此次收购,英伟达CEO黄仁勋表示,收购Arm是一生仅有的机会,会花很多精力和时间,但有信心回应监管挑战。 Arm CEO 西蒙·赛格斯则表示,英伟达的收购不会改变Arm对中国市场的投入,中国合资公司对Arm很重要。 据悉,此项交易尚须获得中国、美国、欧盟和英国的批准,预计监管审批可能需要长达18个月的时间。 另外,西蒙·赛格斯早前曾表示,我们大部分产品不受美国的出口管制约束,这不会随着美国母公司的改变而改变。
[手机便携]
s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(1)
还是先说下整体结构,又要说到大家很熟悉的平台设备了,同样看门狗定时器也是作为平台设备存在的,但与以前的不同的地方是,看门狗定时器是一种混杂设备,先介绍下混杂设备。 1、混杂设备 1.1、混杂设备并没有明确的定义。它的主设备号是10,不同的设备用次设备号区分。混杂设备用结构体miscdevice表示,源码如下: struct miscdevice { int minor; 次设备号 const char *name; 设备名 const struct file_operations *fops;设备的操作函数,与字符设备相同 struct list_head list; 链接混杂设备的链表 struct device *
[单片机]
ARM7的MVB_CAN网关设计方案
0 引言 随着网络技术和控制技术的发展,机车信息化控制技术向着更高的方向发展。为此,IEC制定出新的列车通信网路国际标准TCN(机车通信网络),以满足列车微机控制系统中对车载数据通信网提出的新要求。 按照TCN标准,列车通信网可分为两级:第一级是WTB绞线式列车总线(Wired Train Bus),可实现车辆间的数据通信;第二级是MVB(Mul-tifunction Vehicle bus)多功能车辆总线,主要实现同一个车辆内各个功能控制单元之间的数据通信。 多功能车辆总线(MVB)是主要用于有互操作性和互换性要求的互连设备之间进行串行数据通信的一种总线,MVB以其高实时性、高可靠性及可管理性等多方面的优势而广泛的应用在
[单片机]
<font color='red'>ARM</font>7的MVB_CAN网关设计方案
基于ARM9 AT91RM9200T的嵌入式网络接口设计
1 引言 当今时代设备网络化是当今科技发展的趋势。如何使用嵌入式系统将设备的远程控制、数据的远程传输数据转发到网络上呢?这里设计的是一个信息电器网络接口模块,并构建一个实现特定功能的嵌入式Web服务器,它可以对远程设备进行监控,用户可通过网络远程访问Web服务器来实现数据的采集和历史数据的查询,也可以通过各种接口对信息家电进行控制。另外,还可以根据需要添加新的控制功能, 而不需对Web服务器的框架进行大的改动。 2 硬件设计 本系统采用ATMEL公司生产的微处理器AT91RM9200T 。其处理速度可达200MIPS,同时它也具有USB、Earthnet、支持RS485的红外串口、IIC、SPI、SSC等丰富的片内资源。网口
[单片机]
基于<font color='red'>ARM</font>9 AT91RM9200T的嵌入式网络接口设计
基于ARM7的人机接口模块设计
0 引言 随着电力系统的发展,其系统容量越来越大,结构越来越复杂,系统中的自控及继保装置所需处理的信息不断增加,这对人机接口的功能提出了更高的要求。新型的人机接口模块要能够快速响应和处理大量数据,并具备实时信息显示和人性化界面功能。而集成电路技术和嵌入式系统技术的飞速发展及其在电力系统中的应用,为人机接口的升级提供了技术支持。本文以小电流接地系统故障选线装置的研发为背景,并利用高性能低功耗的集成电路芯片,设计了一种基于ARM7的人机接口模块,该模块比传统的人机接口具有更大的优势。 1 系统结构 本系统的人机接口模块功能框图如图1所示。 1.1 CPU系统 本模块中的CPU采用32位高性能低功耗微控制器芯片LPC2134,该芯片
[单片机]
基于<font color='red'>ARM</font>7的人机接口模块设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved