8#ifndef ARDUINO_GPIO_NXP_ARD_H
9#define ARDUINO_GPIO_NXP_ARD_H
14#include <I2C_device.h>
21enum access_word : uint8_t
65 GPIO_base( uint8_t i2c_address,
const int nbits,
const uint8_t* arp, uint8_t ai );
75 GPIO_base( TwoWire& wire, uint8_t i2c_address,
const int nbits,
const uint8_t* arp, uint8_t ai );
89 void begin( board env = NONE );
99 void output(
int port, uint8_t value, uint8_t mask = 0 );
107 void output( uint8_t *vp );
116 uint8_t
input(
int port );
125 uint8_t*
input( uint8_t *vp );
135 void config(
int port, uint8_t
config, uint8_t mask = 0 );
143 void config( uint8_t* vp );
152 void write_port( access_word w, uint8_t* vp );
171 uint8_t*
read_port( access_word w, uint8_t* vp );
181 uint16_t*
read_port16( access_word w, uint16_t* vp );
191 void write_port( access_word w, uint8_t value,
int port_num = 0 );
201 void write_port16( access_word w, uint16_t value,
int port_num = 0 );
211 uint8_t
read_port( access_word w,
int port_num = 0 );
221 uint16_t
read_port16( access_word w,
int port_num = 0 );
223 static void print_bin( uint8_t v );
227 const uint8_t auto_increment;
230 static constexpr int RESET_PIN = 8;
231 static constexpr int ADDR_PIN = 9;
255 PCA9554( uint8_t i2c_address = (0x40 >> 1) + 0 );
262 PCA9554( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
267 static constexpr uint8_t access_ref[ NUM_access_word ] = {
313 void output(
int port, uint8_t value, uint8_t mask = 0 );
405 void write_port( access_word w, uint8_t value,
int port_num = 0 );
450 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
459 int reg_w( uint8_t reg_adr, uint8_t data );
468 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
517 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
518 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
532 Input_Port_0, Input_Port_1,
533 Output_Port_0, Output_Port_1,
534 Polarity_Inversion_Port_0, Polarity_Inversion_Port_1,
535 Configuration_Port_0, Configuration_Port_1,
542 PCA9555( uint8_t i2c_address = (0x40 >> 1) + 0 );
549 PCA9555( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
554 static constexpr uint8_t access_ref[ NUM_access_word ] = {
557 Polarity_Inversion_Port_0,
558 Configuration_Port_0,
600 void output(
int port, uint8_t value, uint8_t mask = 0 );
692 void write_port( access_word w, uint8_t value,
int port_num = 0 );
737 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
746 int reg_w( uint8_t reg_adr, uint8_t data );
755 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
804 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
805 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
819 PCAL6xxx_base( uint8_t i2c_address,
const int nbits,
const uint8_t arp[], uint8_t ai );
820 PCAL6xxx_base( TwoWire& wire, uint8_t i2c_address,
const int nbits,
const uint8_t arp[], uint8_t ai );
838 Output_drive_strength_0 = 0x40,
839 Output_drive_strength_1,
841 Pull_up_pull_down_enable,
842 Pull_up_pull_down_selection,
845 Output_port_configuration,
852 PCAL6408A( uint8_t i2c_address = (0x40 >> 1) + 0 );
859 PCAL6408A( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
864 static constexpr uint8_t access_ref[ NUM_access_word ] = {
869 Output_drive_strength_0,
871 Pull_up_pull_down_enable,
872 Pull_up_pull_down_selection,
875 Output_port_configuration,
910 void output(
int port, uint8_t value, uint8_t mask = 0 );
1002 void write_port( access_word w, uint8_t value,
int port_num = 0 );
1047 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
1056 int reg_w( uint8_t reg_adr, uint8_t data );
1065 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
1114 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
1115 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
1128 Input_Port_0, Input_Port_1,
1129 Output_Port_0, Output_Port_1,
1130 Polarity_Inversion_port_0, Polarity_Inversion_port_1,
1131 Configuration_port_0, Configuration_port_1,
1132 Output_drive_strength_register_0=0x40, Output_drive_strength_register_0B,
1133 Output_drive_strength_register_1, Output_drive_strength_register_1B,
1134 Input_latch_register_0, Input_latch_register_1,
1135 Pull_up_pull_down_enable_register_0, Pull_up_pull_down_enable_register_1,
1136 Pull_up_pull_down_selection_register_0, Pull_up_pull_down_selection_register_1,
1137 Interrupt_mask_register_0, Interrupt_mask_register_1,
1138 Interrupt_status_register_0, Interrupt_status_register_1,
1139 Output_port_configuration_register,
1146 PCAL6416A( uint8_t i2c_address = (0x40 >> 1) + 0 );
1153 PCAL6416A( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
1158 static constexpr uint8_t access_ref[ NUM_access_word ] = {
1161 Polarity_Inversion_port_0,
1162 Configuration_port_0,
1163 Output_drive_strength_register_0,
1164 Input_latch_register_0,
1165 Pull_up_pull_down_enable_register_0,
1166 Pull_up_pull_down_selection_register_0,
1167 Interrupt_mask_register_0,
1168 Interrupt_status_register_0,
1169 Output_port_configuration_register,
1204 void output(
int port, uint8_t value, uint8_t mask = 0 );
1296 void write_port( access_word w, uint8_t value,
int port_num = 0 );
1341 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
1350 int reg_w( uint8_t reg_adr, uint8_t data );
1359 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
1408 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
1409 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
1422 Input_Port_0, Input_Port_1, Input_Port_2, reserved0,
1423 Output_Port_0, Output_Port_1, Output_Port_2, reserved1,
1424 Polarity_Inversion_port_0, Polarity_Inversion_port_1, Polarity_Inversion_port_2, reserved2,
1425 Configuration_port_0, Configuration_port_1, Configuration_port_2,
1426 Output_drive_strength_register_port_0A=0x40, Output_drive_strength_register_port_0B,
1427 Output_drive_strength_register_port_1A, Output_drive_strength_register_port_1B,
1428 Output_drive_strength_register_port_2A, Output_drive_strength_register_port_2B,
1429 reserved3, reserved4,
1430 Input_latch_register_port_0, Input_latch_register_port_1, Input_latch_register_port_2, reserved5,
1431 Pull_up_pull_down_enable_register_port_0, Pull_up_pull_down_enable_register_port_1, Pull_up_pull_down_enable_register_port_2, reserved6,
1432 Pull_up_pull_down_selection_register_port_0, Pull_up_pull_down_selection_register_port_1, Pull_up_pull_down_selection_register_port_2, reserved7,
1433 Interrupt_mask_register_port_0, Interrupt_mask_register_port_1, Interrupt_mask_register_port_2, reserved8,
1434 Interrupt_status_register_port_0, Interrupt_status_register_port_1, Interrupt_status_register_port_2, reserved9,
1435 Output_port_configuration_register, reserved10, reserved11, reserved12,
1436 Interrupt_edge_register_port_0A, Interrupt_edge_register_port_0B,
1437 Interrupt_edge_register_port_1A, Interrupt_edge_register_port_1B,
1438 Interrupt_edge_register_port_2A, Interrupt_edge_register_port_2B,
1439 reserved13, reserved14,
1440 Interrupt_clear_register_port_0, Interrupt_clear_register_port_1, Interrupt_clear_register_port_2, reserved15,
1441 Input_status_port_0, Input_status_port_1, Input_status_port_2, reserved16,
1442 Individual_pin_output_port_0_configuration_register, Individual_pin_output_port_1_configuration_register, Individual_pin_output_port_2_configuration_register, reserved17,
1443 Switch_debounce_enable_0, Switch_debounce_enable_1, Switch_debounce_count,
1450 PCAL6524( uint8_t i2c_address = (0x44 >> 1) + 0 );
1457 PCAL6524( TwoWire& wire, uint8_t i2c_address = (0x44 >> 1) + 0 );
1462 static constexpr uint8_t access_ref[ NUM_access_word ] = {
1465 Polarity_Inversion_port_0,
1466 Configuration_port_0,
1467 Output_drive_strength_register_port_0A,
1468 Input_latch_register_port_0,
1469 Pull_up_pull_down_enable_register_port_0,
1470 Pull_up_pull_down_selection_register_port_0,
1471 Interrupt_mask_register_port_0,
1472 Interrupt_status_register_port_0,
1473 Output_port_configuration_register,
1508 void output(
int port, uint8_t value, uint8_t mask = 0 );
1600 void write_port( access_word w, uint8_t value,
int port_num = 0 );
1645 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
1654 int reg_w( uint8_t reg_adr, uint8_t data );
1663 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
1712 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
1713 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
1726 Input_Port_0, Input_Port_1, Input_Port_2, Input_Port_3, Input_Port_4,
1727 Output_Port_0, Output_Port_1, Output_Port_2, Output_Port_3, Output_Port_4,
1728 Polarity_Inversion_port_0, Polarity_Inversion_port_1, Polarity_Inversion_port_2, Polarity_Inversion_port_3, Polarity_Inversion_port_4,
1729 Configuration_port_0, Configuration_port_1, Configuration_port_2, Configuration_port_3, Configuration_port_4,
1730 Output_drive_strength_register_port_0A = 0x30, Output_drive_strength_register_port_0B,
1731 Output_drive_strength_register_port_1A, Output_drive_strength_register_port_1B,
1732 Output_drive_strength_register_port_2A, Output_drive_strength_register_port_2B,
1733 Output_drive_strength_register_port_3A, Output_drive_strength_register_port_3B,
1734 Output_drive_strength_register_port_4A, reserved0,
1735 Input_latch_register_port_0, Input_latch_register_port_1, Input_latch_register_port_2, Input_latch_register_port_3, Input_latch_register_port_4,
1736 Pull_up_pull_down_enable_register_port_0, Pull_up_pull_down_enable_register_port_1, Pull_up_pull_down_enable_register_port_2, Pull_up_pull_down_enable_register_port_3, Pull_up_pull_down_enable_register_port_4,
1737 Pull_up_pull_down_selection_register_port_0, Pull_up_pull_down_selection_register_port_1, Pull_up_pull_down_selection_register_port_2, Pull_up_pull_down_selection_register_port_3, Pull_up_pull_down_selection_register_port_4,
1738 Interrupt_mask_register_port_0, Interrupt_mask_register_port_1, Interrupt_mask_register_port_2, Interrupt_mask_register_port_3, Interrupt_mask_register_port_4,
1739 Interrupt_status_register_port_0, Interrupt_status_register_port_1, Interrupt_status_register_port_2, Interrupt_status_register_port_3, Interrupt_status_register_port_4,
1740 Output_port_configuration_register,
1741 Interrupt_edge_register_port_0A, Interrupt_edge_register_port_0B,
1742 Interrupt_edge_register_port_1A, Interrupt_edge_register_port_1B,
1743 Interrupt_edge_register_port_2A, Interrupt_edge_register_port_2B,
1744 Interrupt_edge_register_port_3A, Interrupt_edge_register_port_3B,
1745 Interrupt_edge_register_port_4A, reserved1,
1746 Interrupt_clear_register_port_0, Interrupt_clear_register_port_1, Interrupt_clear_register_port_2, Interrupt_clear_register_port_3, Interrupt_clear_register_port_4,
1747 Input_status_port_0, Input_status_port_1, Input_status_port_2, Input_status_port_3, Input_status_port_4,
1748 Individual_pin_output_port_0_configuration_register, Individual_pin_output_port_1_configuration_register, Individual_pin_output_port_2_configuration_register, Individual_pin_output_port_3_configuration_register, Individual_pin_output_port_4_configuration_register,
1749 Switch_debounce_enable_0, Switch_debounce_enable_1,
1750 Switch_debounce_count,
1757 PCAL6534( uint8_t i2c_address = (0x44 >> 1) + 0 );
1764 PCAL6534( TwoWire& wire, uint8_t i2c_address = (0x44 >> 1) + 0 );
1769 static constexpr uint8_t access_ref[ NUM_access_word ] = {
1772 Polarity_Inversion_port_0,
1773 Configuration_port_0,
1774 Output_drive_strength_register_port_0A,
1775 Input_latch_register_port_0,
1776 Pull_up_pull_down_enable_register_port_0,
1777 Pull_up_pull_down_selection_register_port_0,
1778 Interrupt_mask_register_port_0,
1779 Interrupt_status_register_port_0,
1780 Output_port_configuration_register,
1815 void output(
int port, uint8_t value, uint8_t mask = 0 );
1907 void write_port( access_word w, uint8_t value,
int port_num = 0 );
1952 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
1961 int reg_w( uint8_t reg_adr, uint8_t data );
1970 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
2019 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
2020 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
uint16_t * read_port16(access_word w, uint16_t *vp)
void config(int port, uint8_t config, uint8_t mask=0)
void write_port16(access_word w, uint16_t *vp)
void output(int port, uint8_t value, uint8_t mask=0)
void write_port(access_word w, uint8_t *vp)
void begin(board env=NONE)
uint8_t * read_port(access_word w, uint8_t *vp)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
void write_r16(uint8_t reg, uint16_t val)
void write_port16(access_word w, uint16_t value, int port_num=0)
uint8_t read_r8(uint8_t reg)
void write_port(access_word w, uint8_t *vp)
void write_r8(uint8_t reg, uint8_t val)
void write_port16(access_word w, uint16_t *vp)
uint8_t reg_r(uint8_t reg_adr)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
uint16_t read_port16(access_word w, int port_num=0)
void output(int port, uint8_t value, uint8_t mask=0)
uint16_t * read_port16(access_word w, uint16_t *vp)
int reg_w(uint8_t reg_adr, uint8_t data)
void config(int port, uint8_t config, uint8_t mask=0)
uint8_t * input(uint8_t *vp)
void begin(board env=NONE)
uint8_t * read_port(access_word w, uint8_t *vp)
uint16_t read_r16(uint8_t reg)
void write_port(access_word w, uint8_t value, int port_num=0)
uint8_t read_port(access_word w, int port_num=0)
void write_r8(uint8_t reg, uint8_t val)
uint8_t * read_port(access_word w, uint8_t *vp)
void write_port16(access_word w, uint16_t *vp)
void config(int port, uint8_t config, uint8_t mask=0)
uint16_t read_port16(access_word w, int port_num=0)
void write_port(access_word w, uint8_t *vp)
void write_port(access_word w, uint8_t value, int port_num=0)
void write_port16(access_word w, uint16_t value, int port_num=0)
void output(int port, uint8_t value, uint8_t mask=0)
uint16_t read_r16(uint8_t reg)
int reg_w(uint8_t reg_adr, uint8_t data)
uint8_t reg_r(uint8_t reg_adr)
uint8_t read_r8(uint8_t reg)
uint16_t * read_port16(access_word w, uint16_t *vp)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
void write_r16(uint8_t reg, uint16_t val)
uint8_t * input(uint8_t *vp)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
void begin(board env=NONE)
uint8_t read_port(access_word w, int port_num=0)
void write_port(access_word w, uint8_t *vp)
uint16_t * read_port16(access_word w, uint16_t *vp)
uint8_t read_r8(uint8_t reg)
void write_port16(access_word w, uint16_t *vp)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
uint8_t * input(uint8_t *vp)
void write_port16(access_word w, uint16_t value, int port_num=0)
void begin(board env=NONE)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
void write_r8(uint8_t reg, uint8_t val)
void write_r16(uint8_t reg, uint16_t val)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
uint8_t reg_r(uint8_t reg_adr)
int reg_w(uint8_t reg_adr, uint8_t data)
uint16_t read_port16(access_word w, int port_num=0)
uint8_t * read_port(access_word w, uint8_t *vp)
uint8_t read_port(access_word w, int port_num=0)
void config(int port, uint8_t config, uint8_t mask=0)
void write_port(access_word w, uint8_t value, int port_num=0)
void output(int port, uint8_t value, uint8_t mask=0)
uint16_t read_r16(uint8_t reg)
void write_port16(access_word w, uint16_t *vp)
uint16_t read_port16(access_word w, int port_num=0)
void write_port(access_word w, uint8_t *vp)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
void write_r8(uint8_t reg, uint8_t val)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
int reg_w(uint8_t reg_adr, uint8_t data)
uint8_t reg_r(uint8_t reg_adr)
void output(int port, uint8_t value, uint8_t mask=0)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
void begin(board env=NONE)
uint8_t read_port(access_word w, int port_num=0)
uint8_t * input(uint8_t *vp)
uint8_t * read_port(access_word w, uint8_t *vp)
uint16_t * read_port16(access_word w, uint16_t *vp)
uint8_t read_r8(uint8_t reg)
void config(int port, uint8_t config, uint8_t mask=0)
uint16_t read_r16(uint8_t reg)
void write_port16(access_word w, uint16_t value, int port_num=0)
void write_port(access_word w, uint8_t value, int port_num=0)
void write_r16(uint8_t reg, uint16_t val)
uint8_t read_port(access_word w, int port_num=0)
void write_port16(access_word w, uint16_t *vp)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
void config(int port, uint8_t config, uint8_t mask=0)
uint8_t * input(uint8_t *vp)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
void begin(board env=NONE)
uint8_t * read_port(access_word w, uint8_t *vp)
void write_r8(uint8_t reg, uint8_t val)
void write_port(access_word w, uint8_t *vp)
uint16_t read_r16(uint8_t reg)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
uint16_t * read_port16(access_word w, uint16_t *vp)
void output(int port, uint8_t value, uint8_t mask=0)
void write_r16(uint8_t reg, uint16_t val)
uint8_t reg_r(uint8_t reg_adr)
uint8_t read_r8(uint8_t reg)
void write_port16(access_word w, uint16_t value, int port_num=0)
uint16_t read_port16(access_word w, int port_num=0)
void write_port(access_word w, uint8_t value, int port_num=0)
int reg_w(uint8_t reg_adr, uint8_t data)
void write_r16(uint8_t reg, uint16_t val)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
void write_port16(access_word w, uint16_t value, int port_num=0)
uint8_t reg_r(uint8_t reg_adr)
uint8_t * read_port(access_word w, uint8_t *vp)
uint16_t read_port16(access_word w, int port_num=0)
void write_port(access_word w, uint8_t *vp)
uint8_t read_port(access_word w, int port_num=0)
void write_port(access_word w, uint8_t value, int port_num=0)
void write_r8(uint8_t reg, uint8_t val)
void begin(board env=NONE)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
uint8_t read_r8(uint8_t reg)
uint16_t read_r16(uint8_t reg)
uint16_t * read_port16(access_word w, uint16_t *vp)
void config(int port, uint8_t config, uint8_t mask=0)
uint8_t * input(uint8_t *vp)
void output(int port, uint8_t value, uint8_t mask=0)
int reg_w(uint8_t reg_adr, uint8_t data)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
void write_port16(access_word w, uint16_t *vp)