MAX7359用于PDA/智能電話的多功能鍵和游戲鍵控制
MAX7359概述
MAX7359是一款低功耗、特定功能的按鍵開關(guān)控制器,非常適合蜂窩電話、打印機(jī)及其他便攜式應(yīng)用。該器件可最多控制64個按鍵。器件為每個按鍵的按下和彈起都分配了獨(dú)立的代碼。多個按鍵可以按照不同順序同時按下和/或保持、彈起。多達(dá)16個按鍵按下、彈起的輸入操作可以被保存在FIFO內(nèi)。MAX7359以一個字節(jié)為單位采集按鍵的按下或彈起輸入,并通過簡單的I2C接口讀取。為了增強(qiáng)芯片的抗噪聲能力,按鍵提供去抖檢測。換句話說,它在很短的時間內(nèi)對每次擊鍵操作進(jìn)行兩次掃描,以確認(rèn)擊鍵動作是否有效。
為降低功耗,MAX7359在等待按鍵動作時處于休眠模式,僅消耗1.2μA電流。按鍵按下時,該控制器在200μs之內(nèi)喚醒,從而采集按鍵的按下/彈起信息。經(jīng)過一個固定的按鍵操作間隔時間(0.256s至8s)后,芯片再次進(jìn)入休眠模式。需要注意的是,即使在休眠模式下也可以讀取按鍵FIFO的信息。為了減輕主機(jī)的工作負(fù)荷,可以使用中斷信號。當(dāng)按鍵按下或FIFO達(dá)到預(yù)設(shè)的輸入值時,芯片產(chǎn)生中斷信號。該中斷信號可以通過I2C接口讀取,或在FIFO清空時被清除。
MAX7359是MAX7349改進(jìn)版,供電范圍為1.8V到3.3V。圖1給出了MAX7359通過I2C與主機(jī)的典型連接。由于該I2C接口是開漏端口,因此MAX7359可連接到不同供電電壓的主機(jī)。
圖1. 通過I2C接口連接MAX7359。
MAX7359編程
FIFO中存儲的是按鍵操作信息,所要求的功能由控制器內(nèi)的其它寄存器定義。FIFO的寄存器地址是0x00,配置寄存器的地址是0x01,0x02到0x06地址的寄存器用于定義其余操作。
MAX7359寄存器的內(nèi)容可以通過I2C寫命令設(shè)定,并通過I2C讀命令進(jìn)行校驗。I2C寫命令首先發(fā)送控制器的器件地址,控制器地址取決于AD0引腳的狀態(tài),分別為0x70、0x74、0x78、0x7C。隨后是寄存器地址,寄存器地址之后可能發(fā)送多個數(shù)據(jù)字節(jié)。如果只有一個字節(jié)的數(shù)據(jù),它將存儲在前一個字節(jié)指定的寄存器內(nèi)。當(dāng)數(shù)據(jù)多于一個字節(jié)時,第一個字節(jié)存儲在指定的寄存器內(nèi),下一個字節(jié)將存儲在對應(yīng)的下一個地址寄存器內(nèi),依次類推。該操作基于控制器寄存器地址的自動遞增特性。例如,執(zhí)行寫命令:0x70、0x01、0x0A、0x00,器件將把0x0A寫入0x01寄存器,0x00寫入0x02寄存器。寄存器地址的自動遞增特性適用于FIFO地址0x00以外的所有可進(jìn)行寫操作寄存器,包括寫命令和讀命令。如果I2C寫命令的寄存器地址之后沒有數(shù)據(jù)字節(jié),那么它通常用于設(shè)置下一次讀命令的地址。
I2C讀命令從發(fā)送MAX7359芯片地址開始,后面緊隨一個或多個數(shù)據(jù)字節(jié)。當(dāng)只讀取一個數(shù)據(jù)字節(jié)時,數(shù)據(jù)來自上一次沒有相應(yīng)數(shù)據(jù)字節(jié)的寫命令指定的寄存器。否則,該數(shù)據(jù)將來自上一次寫或讀命令操作的寄存器。超過一個數(shù)據(jù)字節(jié)時,第一個字節(jié)來自指定的寄存器,除FIFO寄存器外,地址遞增機(jī)制同樣適用于其余的數(shù)據(jù)字節(jié)。換而言之,重復(fù)讀FIFO寄存器0x00不需要重新設(shè)置地址。
上電復(fù)位時,MAX7359將隨時準(zhǔn)備進(jìn)行按鍵彈起檢測、按鍵按下喚醒以及自動關(guān)斷功能(缺省設(shè)置)。另外,只有兩列可用作按鍵開關(guān)控制,共計16個有效鍵。其余六列/GPO (通用輸出)在高電平時工作于GPO模式。下面的I2C命令可用于激活六列/GPO端口,用于按鍵的開關(guān)控制,共64個有效鍵。
// A Write Command to disable GPO ports
0x70 // MAX7359 device address
0x02 // GPO enable and debounce register
0x00 // Disable GPO ports and 9ms debounce time
下面的I2C命令用于讀FIFO輸入:
// A write command to set the register address to 0x00 and a read command from the FIFO
{{分頁}}
// A write 0 data byte to address 0x00 command
0x70 // MAX7359 device address
0x00 // FIFO register
// A read one byte from FIFO command
0x71 // MAX7359 device address
0xXX // A data byte from the FIFO. The value depends on what is there
下面的I2C命令可用來使能MAX7359監(jiān)視64個鍵,并且當(dāng)有一個鍵按下時產(chǎn)生一次中斷。當(dāng)MAX7359通過I2C接口進(jìn)行讀操作時,該中斷信號清除。
// Initialization
More = 0x80 // More keys in the FIFO mask
Key = 0x00 // Key code variable
0x70, 0x02, 0x00 // Disable GPO ports
0x70, 0x03, 0x02 // Enable interrupt upon a keypress
0x70, 0x01, 0x2A // Enable interrupt cleared once read
// When an interrupt is received
0x70, 0x00 // Set the register address to 0x00
Loop: 0x71, 0xXX // Read the FIFO register
Key = 0xXX // Assign the key code to a variable
Save the key code // Save the key code for application
If (Key | More) go to Loop // If not the last entry, read more key codes
保留0x3F鍵碼表示FIFO空。
保留0x7F鍵碼為FIFO溢出標(biāo)志。
保留0x3E鍵碼為按鍵重復(fù)標(biāo)志,并且該鍵為最后一個FIFO數(shù)據(jù)。
保留0x7E鍵碼為按鍵重復(fù)標(biāo)志,并且FIFO里還有更多數(shù)據(jù)。
評論