带按键去反跳功能的按键检测方法和系统的制作方法

文档序号:6649443阅读:532来源:国知局
专利名称:带按键去反跳功能的按键检测方法和系统的制作方法
技术领域
本发明总地涉及电子电路,更具体地涉及一种高性能按键去反跳校正方法和系统。
背景技术
含有机械按键的用户输入设备经常遇到由于按键去反跳引起的错误。按键去反跳通常由按键的机械反跳引起,它会在按键信号中产生干扰,这样下去可能导致按键的错误检测。例如,只按下一次的按键可能会产生按键去反跳,这可能导致键盘控制器以为相同的键按了两次。另一种情况就是,按键去反跳可能导致键盘控制器以为该键根本没有按下。
按键去反跳校正电路能够阻止键盘中按下的按键反跳时出现的不希望有的两次输入(或者缺少输入)。但是,传统的按键去反跳系统是在固件中实现的,并且它们依赖于处理器的指令周期。这些系统相对比较慢,并且可能会占用处理器的执行时间。此外,由于现有的系统依赖于处理器的指令周期,其时限无法统一且不可预测。
因此,就需要一种基于硬件的高性能的按键去反跳校正方法和系统。

发明内容
本发明提供一种高性能的按键去反跳校正方法和系统。
一个实施例中,本发明提供了一种带按键去反跳功能的按键检测方法,所述方法包括检测按键激活;在用户可定义数量的时钟周期内测试所述按键激活;若在用户可定义数量的时钟周期内所述按键激活是有效的,存储能识别已激活按键的按键索引至一缓冲器中;在用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;若在用户可定义数量的硬件按键扫描周期内所述按键激活是有效的,建立一按键激活事件。
一个实施例中,本发明提供了一种带按键去反跳功能的按键检测系统,所述系统包括用于检测按键激活的电路;与所述电路连接的第一记数器和时钟,用于在第一用户可定义数量的时钟周期内测试所述按键激活;按键去反跳缓冲器,用于在第一用户可定义数量的时钟周期内所述按键激活为有效时存储识别已激活按键用的按键索引;第二记数器,用于在第一用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;按键事件缓冲器,用于在第一用户可定义硬件扫描周期内所述按键激活为有效时存储按键激活事件。
一个实施例中,本发明提供了一种检测按键的系统,所述系统包括检测按键激活的装置;在用户可定义数量的时钟周期内测试所述按键激活的装置;在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试已测试的激活按键的装置;在用户可定义数量的硬件按键扫描周期内所述按键激活为有效时建立按键激活事件的装置。
根据本发明的一个方面,提供了一种带按键去反跳功能的按键检测方法,所述方法包括检测按键激活;在用户可定义数量的时钟周期内测试所述按键激活;若在用户可定义数量的时钟周期内所述按键激活是有效的,存储能识别已激活按键的按键索引至一缓冲器中;在用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;若在用户可定义数量的硬件按键扫描周期内所述按键激活是有效的,建立一按键激活事件。
优选地,所述方法进一步包括检测按键释放;在用户可定义数量的时钟周期内测试所述按键释放;若在用户可定义数量的时钟周期内所述按键激活是有效的,在用户可定义数量的硬件按键扫描周期内测试所述按键释放;
若在用户可定义数量的硬件按键扫描周期内所述按键释放是有效的,建立一按键释放事件。
优选地,所述方法进一步包括对每个硬件按键扫描周期增加一个用户可定义时间延迟。
优选地,所述时钟周期与系统时钟周期有关。
优选地,所述按键激活是键盘上按下的按键、鼠标的移动、操纵杆的移动以及感应事件中的一个或者多个。
优选地,所述用于测试按键激活的用户可定义数量的硬件按键扫描周期与用于按键释放的用户可定义数量的硬件按键扫描周期相同。
优选地,所述用于测试按键激活的用户可定义数量的硬件按键扫描周期与用于按键释放的用户可定义数量的硬件按键扫描周期不同。
根据本发明的一个方面,提供了一种带按键去反跳功能的按键检测系统,所述系统包括用于检测按键激活的电路;与所述电路连接的第一记数器和时钟,用于在第一用户可定义数量的时钟周期内测试所述按键激活;按键去反跳缓冲器,用于在第一用户可定义数量的时钟周期内所述按键激活为有效时存储识别已激活按键用的按键索引;第二记数器,用于在第一用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;按键事件缓冲器,用于在第一用户可定义硬件扫描周期内所述按键激活为有效时存储按键激活事件。
优选地,所述电路检测按键释放;所述第一计数器在第二用户可定义数量的时钟周期内测试所述按键释放;在第二用户可定义数量的时钟周期内所述按键激活为有效时,所述第二计数器在第二用户可定义数量的硬件按键扫描周期内测试所述按键释放;在第二用户可定义数量的硬件按键扫描周期内所述按键释放为有效时,所述按键事件缓冲器存储按键释放事件。
优选地,所述系统进一步包括加入每个硬件按键扫描周期内的用户可定义时间延迟。
优选地,所述时钟周期与系统时钟周期有关。
优选地,所述按键激活是键盘上按下的按键、鼠标的移动、操纵杆的移动以及感应事件中的一个或者多个。
优选地,所述用于测试按键激活的第一和第二用户可定义数量的硬件按键扫描周期与用于按键释放的第一和第二用户可定义数量的硬件按键扫描周期相同。
优选地,所述用于测试按键激活的第一和第二用户可定义数量的硬件按键扫描周期与用于按键释放的第一和第二用户可定义数量的硬件按键扫描周期不同。
优选地,所述第一记数器是加/减记数器。
优选地,所述第二记数器是加/减记数器。
根据本发明的一个方面,提供了一种检测按键的系统,所述系统包括检测按键激活的装置;在用户可定义数量的时钟周期内测试所述按键激活的装置;在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试已测试的激活按键的装置;在用户可定义数量的硬件按键扫描周期内所述按键激活为有效时建立按键激活事件的装置。
优选地,所述系统进一步包括检测按键释放的装置;在用户可定义数量的时钟周期内测试所述按键释放的装置;在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试所述按键释放的装置;在用户可定义数量的硬件按键扫描周期内所述按键释放为有效时建立按键释放事件的装置。
优选地,所述系统进一步包括对每个硬件按键扫描周期增加一个用户可定义时钟延迟的装置。
优选地,所述时钟周期与系统时钟周期有关。


图1是一台个人计算机和一个输入设备组成的系统的示意图;图2是根据本发明一个实施例的键盘矩阵的结构方框示意图;图3是根据本发明一个实施例与按键矩阵扫描电路相连的键盘开关矩阵的示意图;图4是根据本发明一个实施例的键盘扫描电路的时序示意图;图5是分别对应中止屏蔽(break-masking)法、开始屏蔽(make-masking)法和混合方法的时序示意图;图6A是根据本发明一个实施例的微去反跳操作的时序示意图;图6B是根据本发明一个实施例的微去反跳按键检测的时序示意图;图7是根据本发明一个实施例的去反跳缓冲器的示意图;图8是根据本发明一个实施例的按键事件缓冲器的示意图。
具体实施例方式
一个实施例中,本发明提供了一种用于硬件实现的开关去反跳电路校正按键机械反跳的方法和装置。所述去反跳电路提供了有效的功率/性能设计,甚至适用于无线输入设备。一个实施例中,所述按键去反跳分为两个操作微去反跳(micro-debounce)和大规模去反跳(macro-debounce)。微去反跳是按键按下事件中的一个初级滤波机制。该操作将按键下按过程中可能发生的短期事件滤除。一旦按键激活被检测,在随后的几个周期中,基于寄存器中的一个确定值,该按键激活被再次测试。一旦符合微去反跳条件,按键状态被移到按键缓冲器中,以便进行大规模去反跳操作。大规模去反跳在(用户可定义的)多个硬件按键扫描周期内检查按键是否满足去反跳的要求。
虽然本说明利用键盘和鼠标作为输入设备,但下面描述的实施例并不限于键盘和鼠标。包括有机械按键的其他输入设备,比如头戴式耳机、游戏控制器、麦克风、传感器等,都属于本发明的范围。本申请中,术语“按键”一般用做由用户激活的输入设备。例如,如果是鼠标或者游戏控制器的话,按键激活则是鼠标或者操纵杆的移动。如果为头戴式耳机、麦克风或者传感器,按键激活则是声音或者感应到的事件。
图1是根据本发明一个实施例的个人计算机(PC)主机106和输入设备(例如键盘108)组成的系统的示意图,其包括有无线或者有线(或者二者都有)接口和检测装置。
图2是根据本发明一个实施例与一个接口设备(如集成电路202)配合的键盘矩阵203的结构示意图。如图2所示,接口设备202为按键扫描矩阵203服务,提供来自键盘的输入。接口设备202和晶振206、EEPROM 208及天线216相连。指示器205包括有数字、大写字母和滚动光,显示在键盘上。接口设备202包括一个处理器,通过键盘矩阵203检测和控制按键。
图3是与按键矩阵扫描电路302相连的键盘开关矩阵1102的示意图。键盘矩阵1102包含多个列1108和多个行1106。在图3中所示的具体实施例中,多个列1108包含C0-C5六列,多个行1106包含R0-R3四行。为简便起见,图3的实施例中仅显示了实际键盘矩阵的很小一部分。本领域的一般技术人员可知,行和列的数目可根据具体的应用而增加或者减少。
当用户按下相应的按键时,多个开关1110连接对应的行和列。在本实施例中,当开关1110按下时,开关1110连接行R0和列C0。虽然没有为每个开关给出标示数字,应该可以理解图3中总共有24个开关1110连接彼此相交的行和列。为了便于讨论,将图3中所示的24个开关1110表示为开关1、开关2……和开关24。当某一特定行内对应的开关全部打开时,该行被与Vdd相连的电阻1112拉为“高”。行R0-R3为按键矩阵扫描电路302中的行解码器1120提供输入,这一点将在下面进行详细的论述。
按键矩阵扫描电路302包括列/行控制逻辑1114和驱动逻辑1115,产生适当的信号以控制相应列和行的状态。驱动逻辑1115包含一个三态驱动器1116和一个缓冲器1118。列/行控制逻辑1114产生合适的“高”和“低”信号,并将这些信号提供给三态驱动器1116的输入端。列/行控制逻辑能产生合适的“使能”信号改变特定行或列的状态,以控制控制逻辑1115中的三态驱动器1116的操作。
例如,如果三态驱动器1116的输入为“高”,产生的使能信号致使三态驱动器1116输出“高”信号,以驱动列或者行为“高”。相反的,如果输入给三态驱动器1116的信号为“低”,产生的使能信号致使三态驱动器将列或者行驱动为“低”。该使能信号可为全局使能信号,为所有行启动三态驱动器,例如ENB_R,或者为所有列启动三态驱动器,例如ENB_C。该使能信号还可以为特定的行启动三态驱动器,例如ENB_R1,或者为特定的列启动三态驱动器,例如ENB_C3。
按键矩阵扫描电路302还包含行解码器1120和列解码器1122,对从键盘矩阵1102中对应的行和列接收的输出信号进行解码。来自行解码器1120和列解码器1122中的解码输出信号提供给扫描逻辑1124,以生成数据流指示不同开关(按键)1110的状态。
按键矩阵扫描电路302还包括一个开关转换检测电路1126,接收来自行解码器1120和列解码器1122的输出信号。开关转换检测电路1126与如下所述扫描各行和列的扫描逻辑1124通信连接。此外,开关转换检测电路1126生成一“输入/输出有效(I/O Active)”信号,并提供给输入/输出单元306(图3中所示),以使系统转换到如上所述的“忙”模式。一个实施例中,开关转换检测电路1126包括有一个硬件开关去反跳电路,用于校正按键的机械反跳。该去反跳电路提供了有效的功率/性能设计,甚至适用于无线输入设备。
键盘扫描电路的操作可以参照图4的时序图来进行理解。参照图4,所有行和列的初始状态的分析从“就绪(ready)”参考线开始。处理开始时,提供向“就绪”参考线左方的转换,以分清行和列的“高”或者“低”状态。从“准备”参考点开始,ENB)C为高(有效),所有的列都被三态驱动器1116驱动为低,而所有的行都被图3中所示的电阻1112拉为高。
例如,若开关(按键)#9被按下,R0从“高”变为“低”,这一转换被用作触发信号以锁存(存储)所有列的值。这一转换还促使ENB_C从“高”转为“低”。由于ENB_C为“低”,所有的列不再被驱动,因此,R0变回“高”。列C2的线电容和电阻1112的电阻电容乘积(RC)常数使得R0回到“高”的实际转换被稍微延迟。由于开关#9还仍处于按下状态,列C2变为“高”。列C2从“低”到“高”的转换被用作触发信号以锁存所有列的值。列的值被锁存后,ENB_C从“低”变为“高”,列C2从“高”变为“低”。所有其他的列仍保持在“低”状态,因为ENB_C目前为高(有效)。
在图4所示的实施例中,有一个高的锁存列值(C2)和一个低的锁存行值(R0)。一个锁存列和一个锁存行唯一地确定一个按键开关(开关#9),因此,没必要进入对其他的行和列的“扫描”。因而在整个周期中扫描信号一直保持“低”。列/行控制逻辑1114结合驱动器逻辑1115产生控制上述的状态转换所需的所有信号。
此外,开关转换检测电路1126可根据接收自行解码器1120和/或列解码器1122的输出信号,为输入/输出单元(图中没有示出)即时生成一个“输入/输出有效”信号,指出一个开关被激活。在本实施例中,所述的“输入/输入有效”信号由开关转换检测电路1126直接根据对因开关行#9被激活而导致的R0从“高”到“低”转换的检测即时生成。
一个实施例中,硬件开关去反跳电路校正按键的机械反跳。有多种途径来实现去反跳的性能,包括中止屏蔽(break-masking),开始屏蔽(make-masking)和两种途径的混合。图5描述的是上述各种去反跳方法的时序图。
图5中的符号定义如下TDB=去反跳间隔TFPM=第一按键按下开始的时间TLPM=最后按键按下开始的时间TFRB=第一按键释放中止的时间TLRB=最后按键释放中止的时间如图所示,采用中止屏蔽方法时,如果按下某个按键(即“开始(make)”被检测),即马上注册为一个有效的按键按下。如果机械反跳导致短期间内开关是打开的(即“中止(break)”的情况),去反跳算法将继续报告该开关在与TDB相等的期间内仍然是关闭的,从而“屏蔽”中止。然后,只要有屏蔽的情况出现,测量TDB的计时器(如记数器)都须复位。这种方法类似于很多微控制器的复位线中的电阻-电容方法,其中的TDB相当于电阻电容乘积时间常数。
这种方法中,在尽可能早的时间对按键关闭进行报告,报告的按键关闭总时长为(TLRB-TFPM)+TDB。
采用开始屏蔽方法时,如果有按键被按下,直到检测到周期大于TDB的一直持续的“开始”,才被注册为有效的按键按下。因此,持续期间内的任何小于TDB的“开始”期间都被屏蔽。按键释放时,第一中止导致该按键被报告为被释放,任何后续的小于TDB的“开始”都将被屏蔽。这种方法中,报告的按键关闭总时间为(TFRB-TLPM)-TDB,小于TDB的“开始”期间被完全屏蔽。
采用混合方法时,开始屏蔽方法用于检测键按下的开始。一旦检测到按键确实被按下,将使用中止屏蔽方法来确定按键是否被释放。按键压下检测和按键释放检测时将使用不同的TDB。这种方法中,在尽可能早的时间报告按键关闭,因而报告的按键关闭总时间是(TLRB+TDB2)-(TLPM+TDBI),小于TDB1的“开始”期间被完全屏蔽。
一般来说,中止屏蔽方法同时简化了去反跳和消重像的实现。由于及时的报告了“开始”,因而无需缓冲按键按下,为随后测定按键是否按下提供了足够的时间。此外,虽然中止屏蔽方法或者混合方法要求对按键进行缓冲和做时间标记,直到按键被按下足够长的时间,才进入重像检测算法,但是在所有行和列的每个完整扫描的末端,都能够及时地检测重像。
以下将介绍中止屏蔽方法中各元件的寄存器转换语言(RTL)描述。本领域的一般技术人员很容易理解并实现用于开始屏蔽方法和混合方法的寄存器转换语言描述。
注释+=Logical OR*=Logical ANDSSM[1:0]=Scan State MachineRTC[2:0]=Row terminal count-control registerCTC[4:0]=Column terminal count-control registerMKYVn[7:0]=Nth Modifier Key Value
S0=Idle StateS1=Scan StateS2=De-Ghost StateS3=Store-to-Buffer StateSEFF=Scan Enable Flip-FlopKI=Key Index Counter1)3-bit Row Counter(RC)to count 8 column inputsSync Reset((SSM=S0)+(RC=RTC))Increment(SSM=S1)2)5-bit Column Counter(CC)to count 19 row outputsSync Reset(SSM=S0)Increment(RC=RTC)3)8-bit″Row Hit″register(RH)to record row-hits as oolumnsare scannedFor each Nth bitSync Reset(SSM=S0)-Unnecessary,as each bit isset/cleared as column is scannedLoad(RC=<Nth bit>)InputsRH[N]+KSI[N]4)8-bit″Single-Hit″register(SH)to record hits in columnswith only 1 key downFor each Nth bitSync Reset(SSM=S0)Load(RC=0)-note 1 cycle pipe-lining-SH takes RH onecycle laterInputsSH[N]+RH[N]5)8-bit″Multi-Hit″register(MH)to record hits in columnswith 2 or more keys downFor each Nth bitSync Reset(SSM=S0)Load(RC=0)-note 1 cycle pipe-lining-MH takes RH onecycle laterInputsMH[N]+RH[N]6)8-bit key-index counter(KI)incremented at each key-scan,for usage code lookupSync Reset(SSM=S0)Increment(SSM=S1)
7)Scanning State Machine(SSM)Async ResetPORInput(next state)S0 if SEFF=0+(SSM=S3*RH!=0)S1 If SSM=S0*SEFF=1S2 if SSM=S1*(CC=CTC)*(RC=RTC)S3 if SSM=S26-byte bufferFor each single-byte key buffer,KB[N]Sync Reset(SSM=S0)(Reset to all 1′s)Load(NewKey!=KB[N]*NewKey!=MDKY[N])for all N(Store NewKey to beginning of buffer if not already inbuffer)InputsKB[N-1] for KB[N] where N>0;NewKey value forKB
For each debounce count value,DBCV[N]Load(NewKey!=KB[N]*NewKey!=MDKY[N])for all N OR8)Scan-clock enable flip-flop-1-bit to enable low-poweroscillatorAsync SetLogical OR of pulse detects on each Wake signalfrom each peripheralAsync ResetPOR+(AND of all~BUSY signals fromperipherals)Sync Reset9)KSOKey scan outputsKSI[N]=1 if SSM=S0+KSI_OE[N]=SSM=S0*N!=RC一个实施例中,本发明采用用于微去反跳按键检测的各种综合方法的硬件实现。也就是说,本发明的微去反跳方法对按键压下(在预定的时钟周期数内)和按键释放(在预定的时钟周期数内)事件均能检测。一旦微去反跳操作检测到某个按键被按下,就对该按键执行大规模去反跳,以确定该按键是否应识别为被激活的按键。
因此,本发明的按键去反跳操作被分为两步微去反跳操作和大规模去反跳操作。微去反跳按键检测是对基于硬件系统时钟的按键按下(如向下)事件做的基于硬件的初级滤波,用于滤除比如在电子快速转换(EFT)事件中出现的短期事件。一旦检测到按键按下,在随后的几个时钟周期中,根据在u_debounce[1:0]寄存器中定义的值对按键按下再次进行测试。
图6A是微去反跳步骤的时序示意图。如图所示,当按键A在时刻td按下时,一个系统时钟(SCK)周期后将检测到按键的激活,如果u_debounce寄存器编程为具有值1,也就是在时刻t1。类似地,如果u_debounce寄存器编程设置值为2,两个系统时钟周期(t2)后,将检测到按键的激活。相反地,当在时刻tu释放按键A,一个(完整的)系统时钟周期后,也就是如果u_debounce寄存器编程设置值为1,在时刻t3,检测到按键的释放。可选择地,如果u_debounce寄存器编程设置值为2,两个系统时钟周期后,在时刻t4检测到按键的释放。一个实施例中,根据系统的要求,可使用两个u_debounce寄存器,具有不同的值分别用于按键按下和释放时的微去反跳操作。
一个实施例中,u_debounce寄存器被定义为u_debounce[1:0]=0->check key down[&up)for 1 cycle.
u_debounce[1:0]=1->check key down[&up)for 2 cycle.
u_debounce[1:0]=2->check key down(&up)for 3 cycle.
u_debounce[1:0]=3->check key down(&up)for 4 cycle.
一旦满足微去反跳的条件,按键状态被存入按键去反跳缓冲器,以便进行基于硬件的大规模去反跳操作。大规模去反跳操作在多个(用户可定义的)硬件按键扫描周期内检查按键是否满足去反跳的要求。因此,大规模去反跳操作是基于硬件按键扫描周期的,而硬件按键扫描周期又是基于系统周期的。
一个实施例中,硬件按键扫描周期被定义为Time for scanning all(e.g.,8x20)keys+Time duration ofthe scancycle_timer[11:0]+(#of key pressed*u_debounce+1)/SCK扫描所有按键(例如8×20)的时间+scancycle_timer[11:0]的持续时间+(按下键的号#×u_debounce+1)/SCK。
对高性能键盘来说,要求高速的按键检测,扫描周期计时器(scancycle_timer)可以设置为0,这样的话去反跳时间间隔定义如下u_debounce*total#of keys/128K只有被检测到“按下”的按键才会在进行u_debounce次测试。这样,如果在该周期内按键被按下,则硬件按键扫描周期将更长一些。例如,对一个8×20的矩阵来说,u_debounce=2,扫描周期计时器=0,硬件去反跳时间间隔将为(8*20+3)/SCK=1.27ms,基于以上等式,SCK频率为128KHz。
在某些情况下,根据按键开关机械反跳的特性,单个的按键按下事件会被误认为多个按键按下事件。扫描周期计时器用于隔开硬件扫描活动,以便上述的错误情况将尽可能少发生。操作中,为了更有效地检测按键按下事件,扫描周期计时器可被编程为对每个硬件扫描周期增加一个额外的(用户可编程的)延时。
图6B是具有或者不具有扫描周期计时器的大规模去反跳按键检测的时序示意图。如图所示,若扫描周期计时器=0,三个硬件按键扫描周期(maD_debounce=3)后,大规模去反跳按键按下被检测。大规模去反跳按键弹起(释放)也在三个硬件按键扫描周期(maU_debounce=3)后被检测。maD_debounce和maU_debounce的值可以不同。如果扫描周期计时器=Δt,则在每个硬件按键扫描周期的末端都加上一个延时Δt。
图7是根据本发明一个实施例的去反跳缓冲器的示意图。已满足微去反跳按下条件的按键状态存储在(比如13×10)去反跳缓冲器中,以便进一步检测大规模去反跳。如图所示,去反跳缓冲器的每条记录都包括一个8位的按键索引、一个4位的加/减大规模去反跳计数器(macro_debounce_cntr)和一个用于指示存储在特定按键索引字段内的按键上是否在执行弹起和按下去反跳操作的数据位。
一个实施例中,去反跳缓冲器的每个记录定义如下bit 12”0”key in down detection;”1”key in up detection;bit 11-8key macro-debounce counter;an up/down counter;bit 7-0key index.
无论是否有按键按下,在每个按键矩阵扫描期间,最好都对u_debounce缓冲器进行去反跳条件检查。
图8是根据本发明一个实施例的按键事件缓冲器的示意图。如图所示,按键索引“A”有两个记录。当按键“A”的大规模去反跳按键按下事件被检测时,存储在按键事件缓冲器内的按键索引在UP/DN字段为“0”。然后检测该按键的“高”转换,即按键释放检测。当满足按键释放的微去反跳检测条件后,执行微去反跳检测以检测按键“A”的释放。一旦满足按键释放的大规模去反跳检测后,按键索引再次存入按键事件缓冲器中,UP/DN字段值为“1”。
一个实施例中,在逐排硬件扫描周期中,当按键不能通过大规模去反跳条件时,大规模去反跳计数器复位为“0”。例如,如果maD_debounce[3:0]=3,检测到的按键操作为按下、按下、弹起、按下、按下、按下,则maD_debounce计数器中的值为1,2,0,1,2,3。在计数到3时,按键值被复制到按键事件缓冲器。
一个实施例中,按键事件缓冲器的每个记录定义如下bit 8set to 0 for the key down indication;1 for key up indication;bit 7-0key index下面的实施例将说明按键去反跳操作是如何进行的。当有按键按下时,将执行微去反跳操作。经微去反跳操作限制后,将对按键进行由按键按下大规模去反跳寄存器(maD_debounce[3:0])所定义的大规模去反跳条件测试。如果在“maD_debounce”个连续的硬件扫描周期内检测到一个按键,则其将被移入(例如12×9)按键事件缓冲器中,以便输入设备固件(运行在如图2所示的接口设备202的处理器中)进行访问。如果被激活,还会对该固件产生硬件中断。
执行按键弹起的微去反跳操作时,一旦检测到按键被按下,去反跳缓冲器的第12位将设置为表示去反跳缓冲器中的按键准备好进行大规模去反跳按键弹起检测。该位还将去反跳计数器(如图7中所示)转换为降值计数的模式。一个实施例中,u_debounce的值也可用于按键弹起事件的检测。无论何时,只要去反跳缓冲器按键在“u_debounce”个连续周期内弹起,去反跳计数器计数减1。一个实施例中,可对按键弹起事件检测使用不同的u_debounce值。
执行按键弹起大规模去反跳操作时,该按键必须在“maU_debounce”个连续的硬件扫描周期内弹起,才会认为该按键被释放。释放后的按键复制到按键事件缓冲器中,第8位设置为“1”来表示一个弹起事件。
一个实施例中,本发明的系统包括以下用户可编程的寄存器,用于微去反跳和大规模去反跳操作中u_debounce[1:0]maD_debounce[3:0]maU_debounce[3:0]scancycle_timer[11:0]一个实施例中,按键事件缓冲器被映射到存储空间中。
本领域的一般技术人员可知,对本发明的上述或者其他实施方案进行的多种改变都没有超出本发明的范围。本发明并不仅限于上述公开的具体实施例或者方案,其覆盖了由本发明权利要求所确定的范围内的任何替换、修改或改进。
关联申请参考本专利申请要求美国临时专利申请号为No.60/613,658、申请日为2004年9月28日、名称为“高性能按键去反跳的方法和装置”的专利申请的优先权,其全部内容在此作为参考。
权利要求
1.一种带按键去反跳功能的按键检测方法,所述方法包括检测按键激活;在用户可定义数量的时钟周期内测试所述按键激活;若在用户可定义数量的时钟周期内所述按键激活是有效的,存储能识别已激活按键的按键索引至一缓冲器中;在用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;若在用户可定义数量的硬件按键扫描周期内所述按键激活是有效的,建立一按键激活事件。
2.如权利要求1所述的按键检测方法,其特征在于,所述方法进一步包括检测按键释放;在用户可定义数量的时钟周期内测试所述按键释放;若在用户可定义数量的时钟周期内所述按键激活是有效的,在用户可定义数量的硬件按键扫描周期内测试所述按键释放;若在用户可定义数量的硬件按键扫描周期内所述按键释放是有效的,建立一按键释放事件。
3.如权利要求1所述的按键检测方法,其特征在于,所述方法进一步包括对每个硬件按键扫描周期增加一个用户可定义时间延迟。
4.如权利要求1所述的按键检测方法,其特征在于,所述时钟周期与系统时钟周期有关。
5.如权利要求1所述的按键检测方法,其特征在于,所述按键激活是键盘上按下的按键、鼠标的移动、操纵杆的移动以及感应事件中的一个或者多个。
6.一种带按键去反跳功能的按键检测系统,所述系统包括用于检测按键激活的电路;与所述电路连接的第一记数器和时钟,用于在第一用户可定义数量的时钟周期内测试所述按键激活;按键去反跳缓冲器,用于在第一用户可定义数量的时钟周期内所述按键激活为有效时存储识别已激活按键用的按键索引;第二记数器,用于在第一用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;按键事件缓冲器,用于在第一用户可定义硬件扫描周期内所述按键激活为有效时存储按键激活事件。
7.如权利要求6所述的按键检测系统,其特征在于,所述电路检测按键释放;所述第一计数器在第二用户可定义数量的时钟周期内测试所述按键释放;在第二用户可定义数量的时钟周期内所述按键激活为有效时,所述第二计数器在第二用户可定义数量的硬件按键扫描周期内测试所述按键释放;在第二用户可定义数量的硬件按键扫描周期内所述按键释放为有效时,所述按键事件缓冲器存储按键释放事件。
8.如权利要求6所述的按键检测系统,其特征在于,所述系统进一步包括加入每个硬件按键扫描周期内的用户可定义时间延迟。
9.一种检测按键的系统,所述系统包括检测按键激活的装置;在用户可定义数量的时钟周期内测试所述按键激活的装置;在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试已测试的激活按键的装置;在用户可定义数量的硬件按键扫描周期内所述按键激活为有效时建立按键激活事件的装置。
10.如权利要9所述的检测按键的系统,其特征在于,所述系统进一步包括检测按键释放的装置;在用户可定义数量的时钟周期内测试所述按键释放的装置;在用户可定义数量的时钟周期内所述按键激活为有效时,在用户可定义数量的硬件按键扫描周期内测试所述按键释放的装置;在用户可定义数量的硬件按键扫描周期内所述按键释放为有效时建立按键释放事件的装置。
全文摘要
一种带按键去反跳功能的按键检测系统,包括用于检测按键激活的电路;与所述电路连接的第一记数器和时钟,用于在第一用户可定义数量的时钟周期内测试所述按键激活;按键去反跳缓冲器,用于在第一用户可定义数量的时钟周期数内所述按键激活为有效时存储识别已激活按键用的按键索引;第二记数器,用于在第一用户可定义数量的硬件按键扫描周期内测试被识别的已激活按键;按键事件缓冲器,用于在第一用户可定义硬件扫描周期内所述按键激活为有效时存储按键激活事件。
文档编号G06F11/22GK1770637SQ20051010892
公开日2006年5月10日 申请日期2005年9月27日 优先权日2004年9月28日
发明者温克韦·罗 申请人:美国博通公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1