linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落
按鍵抖動示意圖
我們平常所用的按鍵為機械彈性開關,由于觸點的彈性作用,按鍵在閉合時不會馬上穩定的接通,而是有一段時間的抖動,在斷開時也不會立即斷開。抖動時間由按鍵的機械特性所決定,一般為5ms~10ms。所以我們在做按鍵檢測時都要加一個消抖的過程。
按鍵消抖主要有兩種方案:
一是延時重采樣;
二是持續采樣。
從理論上來說,延時(如10ms)重采樣的準確率肯定低于持續采樣。
按鍵消抖的方法
(1)延時重采樣
延時重采樣的意思是,當第一次檢測到鍵值由'1'變為'0'時,再延時一段時間(如10ms),再次采樣,確認是否仍是'0';若是'0'則認為此時鍵值為'0',否則,重新執行檢測過程。
該方案的缺陷:a.如果延時太短,有可能兩次采樣時都處于抖動時間,因此可能引起誤判;
b.如果延時太長,可能檢測不出按鍵變換
(2)持續采樣
持續采樣的原理是,當檢測到按鍵處于某電平(如'0')時,在之后的N個時鐘周期內連續檢測此按鍵的電平,如果一直不變,則讀出此按鍵的電平值(如'0')。
持續采樣的優點:a.樣本足夠多,減少誤判的可能性。
b.對于按鍵按下('1'->'0'),按鍵釋放('0'->'1')都可以檢測。
持續采樣的缺點:持續檢測的時間太長(大于按鍵按下和釋放的時間差),則可能無法檢測按鍵的變換。
在這里我們使用的延時采樣的方式,即:當某個鍵被按下后會觸發中斷,上一個試驗中我們進了按鍵中斷之后就喚醒讀取函數,這樣由于按鍵抖動可能會短時間內進好幾次按鍵中斷;現在我們加入內個定時器,當按鍵按下出發了按鍵中斷之后,在按鍵中斷里修改定時器觸發時間(比如定時10ms)。
原理說完了,下面開始做測試:
還是一共三個文件,1驅動相關:. keyIrq_drv_timer.c ?Makefile
2.測試程序 : key_test_irq.c
實驗步驟:
驅動和應用程序都編譯出來之后,首先加載驅動:
insmod keyIrq_drv_timer.ko
加載按鍵驅動
如上圖所示,加載完驅動之后,按鍵節點已經自動創建出來了,
下面開始測試;
輸入 ./key_test_irq
按鍵測試
總結
以上是生活随笔為你收集整理的linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《看恽家牡丹花戏赠李二十》第三句是什么
- 下一篇: linux 脚本 字符串函数调用函数调用