1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-24 05:53:49 +01:00

Microchip MCP23x17 I2C I/O expanders test application

Overview

This test application demonstrates the usage of the MCP23x17 driver interface and can be used to test each MCP23x17 expander I/O pin with shell commands.

The application bases on the test application for GPIO peripheral drivers which is under following copyright:

Copyright (C) 2014,2017 Freie Universität Berlin Author Hauke Petersen hauke.petersen@fu-berlin.de

Compilation

Used MCP23x17 I/O expander or interface variants have to be defined by the variable DRIVER using the corresponding pseudomodules mcp23017, mcp23s17, mcp23x17_i2c and/or mcp23x17_spi, for example:

DRIVER='mcp23x17_i2c mcp23x17_spi' BOARD=... make -C tests/drivers/mcp23x17 flash term

Please note: If DRIVER is not defined, mcp23x17_i2c is used by default.

The default hardware configuration parameters are defined in $(RIOTBASE)/drivers/mcp23x17/include/mcp23x17_params.h. They can be overridden either by placing a mcp23x17_params.h file with changed configuration parameters in the directory of the test application or by defining them in the CFLAGS variable in the make command, for example:

CFLAGS="-DMCP23X17_PARAM_RESET_PIN=GPIO_PIN\(0,7\)" \
USEMODULE=mcp23x17_reset \
BOARD=... make -C tests/drivers/mcp23x17 flash term

To use external interrupts for the MCP23x17 I/O expander pins, the MCP23x17 low-active push/pull interrupt signal has to be enabled. For this purpose add the module mcp23x17_irq and define the GPIO pin to which the combined INTA/INTB interrupt signal is connected, e.g. by overriding the default parameter MCP23X17_PARAM_I2C_INT for the default I2C device or MCP23X17_PARAM_SPI_INT for the default SPI device.

CFLAGS="-DMCP23X17_PARAM_I2C_INT=GPIO_PIN\(0,6\)" \
USEMODULE=mcp23x17_irq \
BOARD=... make -C tests/drivers/mcp23x17 flash term

Using module mcp23x17_irq uses by default an event thread with medium priority. An event thread with high priority can be used by enabling the module mcp23x17_irq_highest.

Please note: Since interrupts are handled in the context of a separate event thread, enabling interrupts requires more RAM.

Usage

The test allows to use commands as known from GPIO test application for MCP23x17 I/O expanders:

> help
Command              Description
---------------------------------------
init_out             init as output (push-pull mode)
init_in              init as input w/o pull resistor
init_in_pu           init as input with pull-up
init_od              init as output (open-drain without pull resistor)
init_od_pu           init as output (open-drain with pull-up)
init_int             init as external INT w/o pull resistor
enable_int           enable gpio interrupt
disable_int          disable gpio interrupt
read                 read pin status
set                  set pin to HIGH
clear                set pin to LOW
toggle               toggle pin
bench                run a set of predefined benchmarks

The number of the first MCP23x17 I/O expander port used by the test application is defined by the macro MCP23X17_PORT_0, which is 16 by default. This value can be overridden during compilation, for example:

CFLAGS="-DMCP23X17_PORT_0=8" \
BOARD=... make -C tests/drivers/mcp23x17 flash term

Using the port number defined by MCP23X17_PORT_0 and following port numbers, you can apply the command to the MCP23x17 expander ports. For example, the following command initializes I/O pin 7 of the first MCP23x17 expander:

init_out 16 7

Commands with port numbers less than MCP23X17_PORT_0 refer to GPIO peripheral ports. Thus, both the I/O pins of the MCP23x17 expanders as well as the GPIO peripheral pins of the MCU can be addressed by all commands.

Thus it is possible to connect a GPIO pin of the MCU with MCP23x17 I/O expander pins for testing.