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 );
449 Input_Port_0, Input_Port_1,
450 Output_Port_0, Output_Port_1,
451 Polarity_Inversion_Port_0, Polarity_Inversion_Port_1,
452 Configuration_Port_0, Configuration_Port_1,
459 PCA9555( uint8_t i2c_address = (0x40 >> 1) + 0 );
466 PCA9555( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
471 static constexpr uint8_t access_ref[ NUM_access_word ] = {
474 Polarity_Inversion_Port_0,
475 Configuration_Port_0,
517 void output(
int port, uint8_t value, uint8_t mask = 0 );
609 void write_port( access_word w, uint8_t value,
int port_num = 0 );
653 PCAL6xxx_base( uint8_t i2c_address,
const int nbits,
const uint8_t arp[], uint8_t ai );
654 PCAL6xxx_base( TwoWire& wire, uint8_t i2c_address,
const int nbits,
const uint8_t arp[], uint8_t ai );
672 Output_drive_strength_0 = 0x40,
673 Output_drive_strength_1,
675 Pull_up_pull_down_enable,
676 Pull_up_pull_down_selection,
679 Output_port_configuration,
686 PCAL6408A( uint8_t i2c_address = (0x40 >> 1) + 0 );
693 PCAL6408A( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
698 static constexpr uint8_t access_ref[ NUM_access_word ] = {
703 Output_drive_strength_0,
705 Pull_up_pull_down_enable,
706 Pull_up_pull_down_selection,
709 Output_port_configuration,
744 void output(
int port, uint8_t value, uint8_t mask = 0 );
836 void write_port( access_word w, uint8_t value,
int port_num = 0 );
879 Input_Port_0, Input_Port_1,
880 Output_Port_0, Output_Port_1,
881 Polarity_Inversion_port_0, Polarity_Inversion_port_1,
882 Configuration_port_0, Configuration_port_1,
883 Output_drive_strength_register_0=0x40, Output_drive_strength_register_0B,
884 Output_drive_strength_register_1, Output_drive_strength_register_1B,
885 Input_latch_register_0, Input_latch_register_1,
886 Pull_up_pull_down_enable_register_0, Pull_up_pull_down_enable_register_1,
887 Pull_up_pull_down_selection_register_0, Pull_up_pull_down_selection_register_1,
888 Interrupt_mask_register_0, Interrupt_mask_register_1,
889 Interrupt_status_register_0, Interrupt_status_register_1,
890 Output_port_configuration_register,
897 PCAL6416A( uint8_t i2c_address = (0x40 >> 1) + 0 );
904 PCAL6416A( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
909 static constexpr uint8_t access_ref[ NUM_access_word ] = {
912 Polarity_Inversion_port_0,
913 Configuration_port_0,
914 Output_drive_strength_register_0,
915 Input_latch_register_0,
916 Pull_up_pull_down_enable_register_0,
917 Pull_up_pull_down_selection_register_0,
918 Interrupt_mask_register_0,
919 Interrupt_status_register_0,
920 Output_port_configuration_register,
955 void output(
int port, uint8_t value, uint8_t mask = 0 );
1047 void write_port( access_word w, uint8_t value,
int port_num = 0 );
1090 Input_Port_0, Input_Port_1, Input_Port_2, reserved0,
1091 Output_Port_0, Output_Port_1, Output_Port_2, reserved1,
1092 Polarity_Inversion_port_0, Polarity_Inversion_port_1, Polarity_Inversion_port_2, reserved2,
1093 Configuration_port_0, Configuration_port_1, Configuration_port_2,
1094 Output_drive_strength_register_port_0A=0x40, Output_drive_strength_register_port_0B,
1095 Output_drive_strength_register_port_1A, Output_drive_strength_register_port_1B,
1096 Output_drive_strength_register_port_2A, Output_drive_strength_register_port_2B,
1097 reserved3, reserved4,
1098 Input_latch_register_port_0, Input_latch_register_port_1, Input_latch_register_port_2, reserved5,
1099 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,
1100 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,
1101 Interrupt_mask_register_port_0, Interrupt_mask_register_port_1, Interrupt_mask_register_port_2, reserved8,
1102 Interrupt_status_register_port_0, Interrupt_status_register_port_1, Interrupt_status_register_port_2, reserved9,
1103 Output_port_configuration_register, reserved10, reserved11, reserved12,
1104 Interrupt_edge_register_port_0A, Interrupt_edge_register_port_0B,
1105 Interrupt_edge_register_port_1A, Interrupt_edge_register_port_1B,
1106 Interrupt_edge_register_port_2A, Interrupt_edge_register_port_2B,
1107 reserved13, reserved14,
1108 Interrupt_clear_register_port_0, Interrupt_clear_register_port_1, Interrupt_clear_register_port_2, reserved15,
1109 Input_status_port_0, Input_status_port_1, Input_status_port_2, reserved16,
1110 Individual_pin_output_port_0_configuration_register, Individual_pin_output_port_1_configuration_register, Individual_pin_output_port_2_configuration_register, reserved17,
1111 Switch_debounce_enable_0, Switch_debounce_enable_1, Switch_debounce_count,
1118 PCAL6524( uint8_t i2c_address = (0x44 >> 1) + 0 );
1125 PCAL6524( TwoWire& wire, uint8_t i2c_address = (0x44 >> 1) + 0 );
1130 static constexpr uint8_t access_ref[ NUM_access_word ] = {
1133 Polarity_Inversion_port_0,
1134 Configuration_port_0,
1135 Output_drive_strength_register_port_0A,
1136 Input_latch_register_port_0,
1137 Pull_up_pull_down_enable_register_port_0,
1138 Pull_up_pull_down_selection_register_port_0,
1139 Interrupt_mask_register_port_0,
1140 Interrupt_status_register_port_0,
1141 Output_port_configuration_register,
1176 void output(
int port, uint8_t value, uint8_t mask = 0 );
1268 void write_port( access_word w, uint8_t value,
int port_num = 0 );
1311 Input_Port_0, Input_Port_1, Input_Port_2, Input_Port_3, Input_Port_4,
1312 Output_Port_0, Output_Port_1, Output_Port_2, Output_Port_3, Output_Port_4,
1313 Polarity_Inversion_port_0, Polarity_Inversion_port_1, Polarity_Inversion_port_2, Polarity_Inversion_port_3, Polarity_Inversion_port_4,
1314 Configuration_port_0, Configuration_port_1, Configuration_port_2, Configuration_port_3, Configuration_port_4,
1315 Output_drive_strength_register_port_0A = 0x30, Output_drive_strength_register_port_0B,
1316 Output_drive_strength_register_port_1A, Output_drive_strength_register_port_1B,
1317 Output_drive_strength_register_port_2A, Output_drive_strength_register_port_2B,
1318 Output_drive_strength_register_port_3A, Output_drive_strength_register_port_3B,
1319 Output_drive_strength_register_port_4A, reserved0,
1320 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,
1321 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,
1322 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,
1323 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,
1324 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,
1325 Output_port_configuration_register,
1326 Interrupt_edge_register_port_0A, Interrupt_edge_register_port_0B,
1327 Interrupt_edge_register_port_1A, Interrupt_edge_register_port_1B,
1328 Interrupt_edge_register_port_2A, Interrupt_edge_register_port_2B,
1329 Interrupt_edge_register_port_3A, Interrupt_edge_register_port_3B,
1330 Interrupt_edge_register_port_4A, reserved1,
1331 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,
1332 Input_status_port_0, Input_status_port_1, Input_status_port_2, Input_status_port_3, Input_status_port_4,
1333 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,
1334 Switch_debounce_enable_0, Switch_debounce_enable_1,
1335 Switch_debounce_count,
1342 PCAL6534( uint8_t i2c_address = (0x44 >> 1) + 0 );
1349 PCAL6534( TwoWire& wire, uint8_t i2c_address = (0x44 >> 1) + 0 );
1354 static constexpr uint8_t access_ref[ NUM_access_word ] = {
1357 Polarity_Inversion_port_0,
1358 Configuration_port_0,
1359 Output_drive_strength_register_port_0A,
1360 Input_latch_register_port_0,
1361 Pull_up_pull_down_enable_register_port_0,
1362 Pull_up_pull_down_selection_register_port_0,
1363 Interrupt_mask_register_port_0,
1364 Interrupt_status_register_port_0,
1365 Output_port_configuration_register,
1400 void output(
int port, uint8_t value, uint8_t mask = 0 );
1492 void write_port( access_word w, uint8_t value,
int port_num = 0 );
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)
void write_port16(access_word w, uint16_t value, int port_num=0)
void write_port(access_word w, uint8_t *vp)
void write_port16(access_word w, uint16_t *vp)
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)
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)
void write_port(access_word w, uint8_t value, int port_num=0)
uint8_t read_port(access_word w, int port_num=0)
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_port16(access_word w, uint16_t *vp)
uint8_t * input(uint8_t *vp)
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)
void write_port16(access_word w, uint16_t *vp)
uint8_t * input(uint8_t *vp)
void write_port16(access_word w, uint16_t value, int port_num=0)
void begin(board env=NONE)
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)
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)
void output(int port, uint8_t value, uint8_t mask=0)
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)
void config(int port, uint8_t config, uint8_t mask=0)
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)
uint8_t read_port(access_word w, int port_num=0)
void write_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 begin(board env=NONE)
uint8_t * read_port(access_word w, uint8_t *vp)
void write_port(access_word w, uint8_t *vp)
uint16_t * read_port16(access_word w, uint16_t *vp)
void output(int port, uint8_t value, uint8_t mask=0)
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)
void write_port16(access_word w, uint16_t value, int port_num=0)
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 begin(board env=NONE)
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)
void write_port16(access_word w, uint16_t *vp)