FIFO中存储的是按键操作信息,所要求的功能由控制器内的其它寄存器定义。FIFO的寄存器地址是0x00,配置寄存器的地址是0x01,0x02到0x06地址的寄存器用于定义其余操作。
MAX7359寄存器的内容可以通过I2C写命令设定,并通过I2C读命令进行校验。I2C写命令首先发送控制器的器件地址,控制器地址取决于AD0引脚的状态,分别为0x70、0x74、0x78、0x7C。随后是寄存器地址,寄存器地址之后可能发送多个数据字节。如果只有一个字节的数据,它将存储在前一个字节指定的寄存器内。当数据多于一个字节时,第一个字节存储在指定的寄存器内,下一个字节将存储在对应的下一个地址寄存器内,依次类推。该操作基于控制器寄存器地址的自动递增特性。例如,执行写命令:0x70、0x01、0x0A、0x00,器件将把0x0A写入0x01寄存器,0x00写入0x02寄存器。寄存器地址的自动递增特性适用于FIFO地址0x00以外的所有可进行写操作寄存器,包括写命令和读命令。如果I2C写命令的寄存器地址之后没有数据字节,那么它通常用于设置下一次读命令的地址。
I2C读命令从发送MAX7359芯片地址开始,后面紧随一个或多个数据字节。当只读取一个数据字节时,数据来自上一次没有相应数据字节的写命令指定的寄存器。否则,该数据将来自上一次写或读命令操作的寄存器。超过一个数据字节时,第一个字节来自指定的寄存器,除FIFO寄存器外,地址递增机制同样适用于其余的数据字节。换而言之,重复读FIFO寄存器0x00不需要重新设置地址。
上电复位时,MAX7359将随时准备进行按键弹起检测、按键按下唤醒以及自动关断功能(缺省设置)。另外,只有两列可用作按键开关控制,共计16个有效键。其余六列/GPO (通用输出)在高电平时工作于GPO模式。下面的I2C命令可用于激活六列/GPO端口,用于按键的开关控制,共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监视64个键,并且当有一个键按下时产生一次中断。当MAX7359通过I2C接口进行读操作时,该中断信号清除。
// 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