米乐m6官网
您现在的位置:首页 > 产品展示 > LED驱动

嵌入式Linux设备驱动开发之:按键驱动程序实例

发布时间:2022-04-15 14:27:39 来源:米乐m6官网

  LED和蜂鸣器是最简略的GPIO的运用,都不需求任何外部输入或操控。按键相同运用GPIO接口,但按键自身需求外部的输入,即在驱动程序中要处理外部中止。按键硬件驱动原理图如图11-7所示。在图11-7的4×4矩阵按键(K1~K16)电路中,运用4个输入/输出端口(EINT0、EINT2、EINT11和EINT19)和4个输出端口(KSCAN0~KSCAN3)。

  由于一般中止端口是比较宝贵且有限的资源,所以在本电路设计中,16个按键复用了4个中止线。那怎么样才干及时而精确地对矩阵按键进行扫描呢?

  某个中止的发生表明,与它所对应的矩阵行的4个按键中,至少有一个按键被按住了。因而能够经过检查发生了哪个中止,来承认在矩阵的哪一行中发生了按键操作(按住或开释)。例如,假如发生了外部2号线变为低电平),则表明K7、K8、K9和K15中至少有一个按键被按住了。这时候4个EINT端口应该经过GPIO装备寄存器被设置为外部中止端口,并且4个KSCAN端口的输出有必要为低电平。

  在承认按键操作所内行的方位之后,咱们还得检查按键操作地点列的方位。此刻要运用KSCAN端口组,一起将4个EINT端口装备为通用输入端口(而不是中止端口)。在4个KSCAN端口中,轮番将其间某一个端口的输出置为低电平,其他3个端口的输出置为高电平。这样逐列进行扫描,直到按键地点列的KSCAN端口输出为低电平,此刻按键操作所内行的EINT管脚的输入端口的值会变成低电平。例如,在承认发生了外部2号中止之后,进行逐列扫描。若发现在KSCAN1为低电平时(其他端口输出均为高电平),GPF2(EINT2管脚的输入端口)变为低电平,则能够判定按键K8被按住了。

  以上的评论都是在按键的抱负状态下进行的,但实践的按键动作会在短时间(几毫秒至几十毫秒)内发生信号颤动。例如,当按键被按下时,其动作就像绷簧的若干次往复运动,将发生几个脉冲信号。一次按键操作将会发生若干次按键中止,从而会发生颤动现象。因而驱动程序中有必要要处理去除颤动所发生的毛刺信号的问题。