开机时后TestMode的作法
TestMode必须在开机时后按下某些组合按键同时通过de-bounce才可进入testmode
2.按键处理
1)一般来说key的处理是所有程序的基础教科书里面所教导的key处理观念大多以delay循环与多次检查来处理弹跳事件,但是此种方法由于导入delay循环大大降低系统实时性,而大多使用者都没有警觉此问题依然延续此观念设计keyscanandde-bounce技巧,此份文件详细叙述key处理观念
2)家电产品中经常用到抗干扰的测试EFT,会从电源端打入噪声测试系统抗噪声能力,如果key处理不好会有key误动作产生,一般使用者会在keyscan地方加入电容以减低此问题的产生,但是此方法还是无法完全避免此问题同时还增加硬件成本,这里提出的de-bounce观念可以完全解决此问题
3)按键处理很多程序员都会将系统的程序设计与key程序结合没有分开结构,这造成很多程序就以key程序变成程序主体来运行,这里提出将key动作得出的keycode存到fifo(firstinfirstout)中,使得AP系统得以在有空闲的时候才处理keycode动作,程序架构自然形成
4)一般来说key处理都只侦测keydown,但是在某些系统确有keydownandkeyup的要求,这方面可以透过keyinbuffer的储存new/oldbufferXOR比对得到keyevent,更深一层的技巧侦测多按键处理更是需要利用new/oldbufferXOR来处理
合理的按键处理一般包括按键扫描、按键弹跳处理、按键输出转换等环节。
例如:
mn_key:
callkeyin;读取按键输入将资料储存在keyinbuf里面
callkeychk;按键弹跳处理
callkeycvt;弹跳处理后,将按键扫描码转换储存到FIFO里面!ret
①keyin――按键扫描,其主要负责将外部按键信息读入到内部buffer中。
常用的按键一般包括:直接按键、M*N矩阵式扫描按键、三角形按键、扩充按键、按键与其它周边共享I/O脚位等,部分场合还要考虑睡眠和按键的唤醒功能。下面进行分别说明:
1)直接按键
最简单的按键方式,通常作法利用MCU里面的pull-up电阻上拉,外面按键落地,平时没有按键的时候,MCUinput端口读到Hi,按键按下时候读到Low,如下图所示
2)M*N矩阵式扫描按键
最典型的按键扫描方式,有分Singlekey,multi-key扫描
单按键扫描:一个时间只允许一个按键动作同时也只读取一个按键