NAME
Device::Chip::MCP23x17
- chip driver for the MCP23x17 family
SYNOPSIS
use Device::Chip::MCP23S17;
use Future::AsyncAwait;
use constant { HIGH => 0xFFFF, LOW => 0 };
my $chip = Device::Chip::MCP23S17->new;
await $chip->mount( Device::Chip::Adapter::...->new );
foreach my $bit ( 0 .. 15 ) {
await $chip->write_gpio( HIGH, 1 << $bit );
sleep 1;
await $chip->write_gpio( LOW, 1 << $bit );
}
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 in an await
expression 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
await $chip->reset;
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
await $chip->write_gpio( $val, $mask );
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 = await $chip->read_gpio( $mask );
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
await $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
await $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
await $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.
as_adapter
$adapter = $chip->as_adapter;
Returns an instance implementing the Device::Chip::Adapter interface, allowing access to the GPIO pins via the standard adapter API. See also Device::Chip::MCP23x17::Adapter.
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.
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>