NAME
Device::Chip::MCP23x17
- chip driver for the MCP23x17 family
SYNOPSIS
use Device::Chip::MCP23S17;
use constant { HIGH => 0xFFFF, LOW => 0 };
my $chip = Device::Chip::MCP23S17->new;
$chip->mount( Device::Chip::Adapter::...->new )->get;
foreach my $bit ( 0 .. 15 ) {
$chip->write_gpio( HIGH, 1 << $bit )->get;
sleep 1;
$chip->write_gpio( LOW, 1 << $bit )->get;
}
DESCRIPTION
This Device::Chip subclass provides specific communication to the Microchip MCP23x17 family of chips.
This module itself is an abstract base; to talk to a specific chip see one of the following subclasses:
MCP23S17 over SPI - see Device::Chip::MCP23S17
Aside from the method of communication with the actual chip hardware, these modules all provide the same higher-level API to the containing application.
This module currently only supports a chip running in the IOCON.BANK=0
configuration.
MOUNT PARAMETERS
reset
The name of the GPIO line on the adapter that is connected to the RESET#
pin of the chip, if there is one. This will be used by the "reset" method.
METHODS
The following methods documented with a trailing call to ->get
return Future instances.
Each method that takes a $mask
parameter uses it to select which IO pins are affected. The mask is a 16-bit integer; selecting only those pins for which bits are set. The lower 8 bits relate to the GPA
pins, the higher 8 to the GPB
pins. Pins that are not selected by the mask remain unaffected.
reset
$chip->reset->get;
Resets the cached register values back to their power-up defaults.
Additionally, if the reset
mount parameter is defined, pulses the RESET#
pin of the chip.
write_gpio
$chip->write_gpio( $val, $mask )->get
Sets the pins named in the $mask
to be outputs, and sets their values from the bits in $val
. Both values are 16-bit integers.
read_gpio
$val = $chip->read_gpio( $mask )->get
Sets the pins named in the $mask
to be inputs, and reads the current pin values of them. The mask and the return value are 16-bit integers.
tris_gpio
$chip->tris_gpio( $mask )
Sets the pins named in the $mask
to be inputs ("tristate"). The mask is a 16-bit integer.
set_input_polarity
$chip->set_input_polarity( $pol, $mask )
Sets the input polarity of the pins given by $mask
to be the values given in $pol
. Pins associated with bits set in $pol
will read with an inverted sense. Both values are 16-bit integers.
set_input_pullup
$chip->set_input_pullup( $pullup, $mask )
Enables or disables the input pullup resistors on the pins given by $mask
as per the values given by $pullup
. Both values are 16-bit integers.
TODO
Wrap the interrupt-related registers -
GPINTEN
,DEFVAL
,INTCON
,INTF
,INTCAP
. Support the interrupt-related bits inIOCON
-MIRROR
,ODR
,INTPOL
.Support the general configuration bits in the
IOCON
register -DISSLW
,HAEN
.Consider how easy/hard or indeed how useful it might be to support
IOCON.BANK=1
configuration.Create a Device::Chip::Adapter instance to represent the GPIO pins as a standard adapter.
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>