mcp23x17: Driver for I2C/SPI 16 bit GPIO expanders MCP23017/MCP23S17
Enums
- enum mcp23x17_gpio_mode_t
GPIO mode.
Values:
- enumerator MCP23X17_GPIO_OUTPUT
- enumerator MCP23X17_GPIO_INPUT
Functions
- esp_err_t mcp23x17_init_desc_spi(mcp23x17_t *dev, spi_host_device_t host, uint32_t clock_speed_hz, uint8_t addr, gpio_num_t cs_pin)
Initialize device descriptor.
- Parameters:
dev – Pointer to device descriptor
host – SPI host
clock_speed_hz – SPI clock speed, Hz (max
MCP23X17_MAX_SPI_FREQ
)addr – Device address
cs_pin – CS pin
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_free_desc_spi(mcp23x17_t *dev)
Free device descriptor.
- Parameters:
dev – Pointer to device descriptor
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_get_int_out_mode(mcp23x17_t *dev, mcp23x17_int_out_mode_t *mode)
Get INTA/INTB pins mode.
- Parameters:
dev – Pointer to device descriptor
mode – [out] Buffer to store mode
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_set_int_out_mode(mcp23x17_t *dev, mcp23x17_int_out_mode_t mode)
Set INTA/INTB pins mode.
- Parameters:
dev – Pointer to device descriptor
mode – INTA/INTB pins mode
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_port_get_mode(mcp23x17_t *dev, uint16_t *val)
Get GPIO pins mode.
0 - output, 1 - input for each bit in
val
- Parameters:
dev – Pointer to device descriptor
val – [out] Buffer to store mode, 0 bit for PORTA/GPIO0..15 bit for PORTB/GPIO7
- Returns:
- esp_err_t mcp23x17_port_set_mode(mcp23x17_t *dev, uint16_t val)
Set GPIO pins mode.
0 - output, 1 - input for each bit in
val
- Parameters:
dev – Pointer to device descriptor
val – Mode, 0 bit for PORTA/GPIO0..15 bit for PORTB/GPIO7
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_port_get_pullup(mcp23x17_t *dev, uint16_t *val)
Get GPIO pullups status.
0 - pullup disabled, 1 - pullup enabled for each bit in
val
- Parameters:
dev – Pointer to device descriptor
val – [out] Pullup status, 0 bit for PORTA/GPIO0..15 bit for PORTB/GPIO7
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_port_set_pullup(mcp23x17_t *dev, uint16_t val)
Set GPIO pullups status.
0 - pullup disabled, 1 - pullup enabled for each bit in
val
- Parameters:
dev – Pointer to device descriptor
val – Pullup status, 0 bit for PORTA/GPIO0..15 bit for PORTB/GPIO7
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_port_read(mcp23x17_t *dev, uint16_t *val)
Read GPIO port value.
- Parameters:
dev – Pointer to device descriptor
val – [out] 16-bit GPIO port value, 0 bit for PORTA/GPIO0..15 bit for PORTB/GPIO7
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_port_write(mcp23x17_t *dev, uint16_t val)
Write value to GPIO port.
- Parameters:
dev – Pointer to device descriptor
val – GPIO port value, 0 bit for PORTA/GPIO0..15 bit for PORTB/GPIO7
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_get_mode(mcp23x17_t *dev, uint8_t pin, mcp23x17_gpio_mode_t *mode)
Get GPIO pin mode.
- Parameters:
dev – Pointer to device descriptor
pin – Pin number, 0 for PORTA/GPIO0..15 for PORTB/GPIO7
mode – [out] GPIO pin mode
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_set_mode(mcp23x17_t *dev, uint8_t pin, mcp23x17_gpio_mode_t mode)
Set GPIO pin mode.
- Parameters:
dev – Pointer to device descriptor
pin – Pin number, 0 for PORTA/GPIO0..15 for PORTB/GPIO7
mode – GPIO pin mode
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_get_pullup(mcp23x17_t *dev, uint8_t pin, bool *enable)
Get pullup mode of GPIO pin.
- Parameters:
dev – Pointer to device descriptor
pin – Pin number, 0 for PORTA/GPIO0..15 for PORTB/GPIO7
enable – [out] pullup mode
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_set_pullup(mcp23x17_t *dev, uint8_t pin, bool enable)
Set pullup mode of GPIO pin.
- Parameters:
dev – Pointer to device descriptor
pin – Pin number, 0 for PORTA/GPIO0..15 for PORTB/GPIO7
enable –
true
to enable pullup- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_get_level(mcp23x17_t *dev, uint8_t pin, uint32_t *val)
Read GPIO pin level.
- Parameters:
dev – Pointer to device descriptor
pin – Pin number, 0 for PORTA/GPIO0..15 for PORTB/GPIO7
val – [out]
true
if pin currently in high state- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_set_level(mcp23x17_t *dev, uint8_t pin, uint32_t val)
Set GPIO pin level.
Pin must be set up as output
- Parameters:
dev – Pointer to device descriptor
pin – Pin number, 0 for PORTA/GPIO0..15 for PORTB/GPIO7
val – [out]
true
if pin currently in high state- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_port_set_interrupt(mcp23x17_t *dev, uint16_t mask, mcp23x17_gpio_intr_t intr)
Setup interrupt for group of GPIO pins.
- Parameters:
dev – Pointer to device descriptor
mask – Pins to setup
intr – Interrupt mode
- Returns:
ESP_OK
on success
- esp_err_t mcp23x17_set_interrupt(mcp23x17_t *dev, uint8_t pin, mcp23x17_gpio_intr_t intr)
Setup interrupt for GPIO pin.
- Parameters:
dev – Pointer to device descriptor
pin – Pin number, 0 for PORTA/GPIO0..15 for PORTB/GPIO7
intr – Interrupt mode
- Returns:
ESP_OK
on success
- struct mcp23x17_t
#include <mcp23x17.h>Public Members
- spi_device_interface_config_t spi_cfg
- spi_device_handle_t spi_dev
- uint8_t addr
- bool use_software_cs
Use software CS control instead of hardware.
Whether to use a software Chip Select (CS) line instead of the hardware one. This is useful when multiple MCP23S17 chips are sharing the same CS line on the SPI bus.
- gpio_port_t cs_pin
GPIO pin number for CS.