Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> MSM8909+Android5.1.1鍵盤驅動---sn7326介紹

MSM8909+Android5.1.1鍵盤驅動---sn7326介紹

編輯:關於Android編程

1.Sn7326概述

SN7326是一款帶智能自掃描的鍵盤擴展芯片,支持多達8*8個按鍵。按下/松開按鍵的動作被編碼成一個字節的數據存入到按鍵事件寄存器(key event register)中,主控制器可通過I2C串行總線讀取按鍵事件寄存器。

SN7326具有去抖動功能,在任何按鍵按下時中斷輸出引腳會置低,為降低功耗,在沒有按鍵動作時SN7326自動進入低功耗模式。

SN7326的主要特性

(1) 2.4V到5.5V的工作電壓

(2) 400kHz的I2C串行接口

(3) 可檢測多鍵同時按下

(4) 低至0.3uA(VDD典型值為3.3V)的待機電流

2.原理圖設計

我們設備有qwerty鍵盤和簡易鍵盤通過SN7326按鍵擴展芯片,再經過電平轉換芯片NLSX4378連接到CPU,如下圖

\

SCL---GPIO_11

SDA---GPIO_10

KEY_INT---GPIO_98

KEY_RST---GPIO_2

KEY_UP---GPIO_90

KEY_DOWN---GPIO_91

CPU通過KEY_INT引腳知道是否按下按鍵,然後通過I2C讀取SN7326寄存器的值來判斷哪個按鍵按下,最後上報給系統。

3.sn7326設備從地址

\

圖2

A0為讀寫標志位,A0=0指示寫命令,A0=1指示讀命令。我們的設計AD1和AD0連接到VDD,所以AD1=AD0=0,故設備地址為1011000+A0位

4.sn7326寄存器介紹

有配置寄存器和按鍵狀態寄存器。

\

圖3

(1)配置寄存器(0x08)

DE位可用於控制是否使能去抖動功能。

LT位可設置長按鍵檢測延時時間

(2)按鍵狀態寄存器(0x10)

DN位可判斷是一個還是多個按鍵按下

KS位可知道按鍵是按下還是松開狀態

KM指按鍵位置編碼位,表示多達64個按鍵的編碼,當讀取完按鍵狀態寄存器後(DN=0),此寄存器被設置為00000000,且/INT引腳被置高。

 

按鍵映射表如下:

\

圖4

需要重點注意,當中斷產生時,一定要讀取完按鍵狀態寄存器的值,即讀取按鍵狀態寄存器的DN位=0時,停止讀取按鍵狀態寄存器的。

5.典型應用

5.1 上電復位

SN7326包含有一個完整上電復位電路可確保在上電時所有寄存器被復位為已知的狀態,當VDD>2.4V,上電電路會釋放寄存器和I2C接口可正常工作。當VDD

5.2 I2C復位控制

當I2C總線被鎖死時,向RST管腳發送一個低電平,可使I2C總線重置得以繼續通信,此復位動作不影響中斷輸出。

5.3 待機模式

當總線空閒時,SN7326自動進入待機模式,降低供電電流。

5.4 按鍵自動掃描

SN7326能支持一個8*8矩陣鍵盤掃描,8個列輸入端口(OD端口)需要一個100kΩ,在待機狀態時8個行輸入端口(PP端口)被拉低。

如果檢測到鍵盤狀態變化,鍵盤會在反彈延時(debounce delay)時間內掃描3次。當捕獲到按鍵按下/松開時,按鍵事件被編碼並寫入到按鍵狀態寄存器中,然後通過/INT產生一個中斷。按照從最低編碼值到最高編碼值的順序讀取按鍵狀態寄存器來報告按鍵事件。

/INT引腳在按鍵事件被讀完之前一直保持為低,一種情況除外,也就是當使能自動清空/INT的功能,如果在編程時間(由08h寄存器的SD位決定)沒有讀取完所有的按鍵事件數據,在編程時間到達時/INT引腳變為高電平。但是臨時按鍵狀態寄存器將保持不變和按鍵事件數據可繼續讀出,直到檢測到另一個按鍵檢測到之前。

5.5 去抖動(debounce)

當配置寄存器(08h)的SD=0/1和鍵盤狀態改變時,鍵盤第1次掃描並保存數據到臨時寄存器,等待6/3ms進行第2次掃描,再等待8/4ms進行第3次掃描,如果這幾次掃描結果一樣,按鍵事件數據就鎖存到臨時按鍵狀態寄存器並/INT置低,否則,掃描停止和設備返回到待機模式,沒有數據存入臨時按鍵狀態寄存器和/INT保持高電平。

5.6 長按鍵檢測(Long-pressed Key Detect)

當配置寄存器(08h)的LE=1,開啟長按鍵功能。當有按鍵長按時,芯片會自動重復發送中斷信號和掃描按鍵,知道按鍵松開,長按鍵檢測的時間間隔由配置寄存器(08h)的LT位決定。

5.7 按鍵事件中斷

一旦有按鍵事件碼鎖存到臨時按鍵狀態寄存器中,向MCU輸出一個中斷信號,當鍵盤時間讀取完之前,/INT保持為低,且任何鍵盤狀態的改變都被忽略。但一種情況除外:如果使能了/INT自動清除功能,在編程時間到達時/INT引腳變為高電平。但是臨時按鍵狀態寄存器將保持不變和按鍵事件數據可繼續讀出,直到檢測到另一個按鍵檢測到之前。

5.8 自動清除INT功能

如果配置寄存器(08h)的ACI=01/10,使能此功能。在產生中斷後,就算按鍵狀態寄存器的值沒有讀取完成,在5/10ms自動置高/INT。當/INT為低電平時,按鍵狀態寄存器的數據不會改變,不管/INT為高還是低,都可以讀取阿年狀態寄存器的值。但如果有新的按鍵事件會產生新中斷,新數據會寫入按鍵狀態寄出去你,舊數據將會丟失,只有新的數據才可被讀取。

5.9 輸入端口濾波器

配置寄出去你的DE=1,使能輸入端口濾波功能。當DE=0,輸入端口濾波功能關閉,芯片會對輸入端口的任何變化應答。當DE=1,任何小於100ns的脈沖都會被過濾掉,如果輸入脈沖寬度大於100ns,芯片將會對信號產生應答。

\

圖5

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved