GPIO_NXP_Arduino 1.0.0
GPIO device operation sample code for Arduino
Loading...
Searching...
No Matches
GPIO_NXP.h
1
8#ifndef ARDUINO_GPIO_NXP_ARD_H
9#define ARDUINO_GPIO_NXP_ARD_H
10
11#include <Arduino.h>
12#include <stdint.h>
13
14#include <I2C_device.h>
15
21enum access_word : uint8_t
22{
23 IN,
24 OUT,
25 POLARITY,
26 CONFIG,
27 DRIVE_STRENGTH,
28 LATCH,
29 PULL_UD_EN,
30 PULL_UD_SEL,
31 INT_MASK,
32 INT_STATUS,
33 OUTPUT_PORT_CONFIG,
34 NUM_access_word,
35};
36
44class GPIO_base : public I2C_device
45{
46public:
47 enum board {
48 NONE,
49 ARDUINO_SHIELD,
50 };
51
53 const int n_bits;
54
56 const int n_ports;
57
65 GPIO_base( uint8_t i2c_address, const int nbits, const uint8_t* arp, uint8_t ai );
66
75 GPIO_base( TwoWire& wire, uint8_t i2c_address, const int nbits, const uint8_t* arp, uint8_t ai );
76
78 virtual ~GPIO_base();
79
89 void begin( board env = NONE );
90
99 void output( int port, uint8_t value, uint8_t mask = 0 );
100
107 void output( uint8_t *vp );
108
116 uint8_t input( int port );
117
125 uint8_t* input( uint8_t *vp );
126
135 void config( int port, uint8_t config, uint8_t mask = 0 );
136
143 void config( uint8_t* vp );
144
152 void write_port( access_word w, uint8_t* vp );
153
161 void write_port16( access_word w, uint16_t* vp );
162
171 uint8_t* read_port( access_word w, uint8_t* vp );
172
181 uint16_t* read_port16( access_word w, uint16_t* vp );
182
191 void write_port( access_word w, uint8_t value, int port_num = 0 );
192
201 void write_port16( access_word w, uint16_t value, int port_num = 0 );
202
211 uint8_t read_port( access_word w, int port_num = 0 );
212
221 uint16_t read_port16( access_word w, int port_num = 0 );
222
223 static void print_bin( uint8_t v );
224
225private:
226 const uint8_t* arp;
227 const uint8_t auto_increment;
228 bool endian;
229
230 static constexpr int RESET_PIN = 8;
231 static constexpr int ADDR_PIN = 9;
232
233 void init( void );
234};
235
240class PCA9554 : public GPIO_base
241{
242public:
244 enum reg_num {
245 Input_Port,
246 Output_Port,
247 Polarity_Inversion,
248 Configuration,
249 };
250
255 PCA9554( uint8_t i2c_address = (0x40 >> 1) + 0 );
256
262 PCA9554( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
263
265 virtual ~PCA9554();
266
267 static constexpr uint8_t access_ref[ NUM_access_word ] = {
268 Input_Port, // IN,
269 Output_Port, // OUT
270 Polarity_Inversion, // POLARITY
271 Configuration, // CONFIG
272 0xFF, // DRIVE_STRENGTH ** CANNOT BE USED **
273 0xFF, // LATCHLATCH ** CANNOT BE USED **
274 0xFF, // PULL_UD_EN ** CANNOT BE USED **
275 0xFF, // PULL_UD_SEL ** CANNOT BE USED **
276 0xFF, // INT_MASK ** CANNOT BE USED **
277 0xFF, // INT_STATUS ** CANNOT BE USED **
278 0xFF, // OUTPUT_PORT_CONFIG ** CANNOT BE USED **
279 };
280
281#if DOXYGEN_ONLY
283 enum board {
284 NONE,
285 ARDUINO_SHIELD,
286 };
287
289 const int n_bits;
290
292 const int n_ports;
293
303 void begin( board env = NONE );
304
313 void output( int port, uint8_t value, uint8_t mask = 0 );
314
321 void output( uint8_t *vp );
322
330 uint8_t input( int port );
331
339 uint8_t* input( uint8_t *vp );
340
349 void config( int port, uint8_t config, uint8_t mask = 0 );
350
357 void config( uint8_t* vp );
358
366 void write_port( access_word w, uint8_t* vp );
367
375 void write_port16( access_word w, uint16_t* vp );
376
385 uint8_t* read_port( access_word w, uint8_t* vp );
386
395 uint16_t* read_port16( access_word w, uint16_t* vp );
396
405 void write_port( access_word w, uint8_t value, int port_num = 0 );
406
415 void write_port16( access_word w, uint16_t value, int port_num = 0 );
416
425 uint8_t read_port( access_word w, int port_num = 0 );
426
435 uint16_t read_port16( access_word w, int port_num = 0 );
436
441 bool ping( void );
442
450 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
451
459 int reg_w( uint8_t reg_adr, uint8_t data );
460
468 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
469
475 uint8_t reg_r( uint8_t reg_adr );
476
482 void write_r8( uint8_t reg, uint8_t val );
483
491 void write_r16( uint8_t reg, uint16_t val );
492
498 uint8_t read_r8( uint8_t reg );
499
507 uint16_t read_r16( uint8_t reg );
508
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 );
519#endif // DOXYGEN_ONLY
520
521};
522
527class PCA9555 : public GPIO_base
528{
529public:
531 enum reg_num {
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,
536 };
537
542 PCA9555( uint8_t i2c_address = (0x40 >> 1) + 0 );
543
549 PCA9555( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
550
552 virtual ~PCA9555();
553
554 static constexpr uint8_t access_ref[ NUM_access_word ] = {
555 Input_Port_0, // IN,
556 Output_Port_0, // OUT
557 Polarity_Inversion_Port_0, // POLARITY
558 Configuration_Port_0, // CONFIG
559 0xFF, // DRIVE_STRENGTH ** CANNOT BE USED **
560 0xFF, // LATCHLATCH ** CANNOT BE USED **
561 0xFF, // PULL_UD_EN ** CANNOT BE USED **
562 0xFF, // PULL_UD_SEL ** CANNOT BE USED **
563 0xFF, // INT_MASK ** CANNOT BE USED **
564 0xFF, // INT_STATUS ** CANNOT BE USED **
565 0xFF, // OUTPUT_PORT_CONFIG ** CANNOT BE USED **
566 };
567
568#if DOXYGEN_ONLY
570 enum board {
571 NONE,
572 ARDUINO_SHIELD,
573 };
574
576 const int n_bits;
577
579 const int n_ports;
580
590 void begin( board env = NONE );
591
600 void output( int port, uint8_t value, uint8_t mask = 0 );
601
608 void output( uint8_t *vp );
609
617 uint8_t input( int port );
618
626 uint8_t* input( uint8_t *vp );
627
636 void config( int port, uint8_t config, uint8_t mask = 0 );
637
644 void config( uint8_t* vp );
645
653 void write_port( access_word w, uint8_t* vp );
654
662 void write_port16( access_word w, uint16_t* vp );
663
672 uint8_t* read_port( access_word w, uint8_t* vp );
673
682 uint16_t* read_port16( access_word w, uint16_t* vp );
683
692 void write_port( access_word w, uint8_t value, int port_num = 0 );
693
702 void write_port16( access_word w, uint16_t value, int port_num = 0 );
703
712 uint8_t read_port( access_word w, int port_num = 0 );
713
722 uint16_t read_port16( access_word w, int port_num = 0 );
723
728 bool ping( void );
729
737 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
738
746 int reg_w( uint8_t reg_adr, uint8_t data );
747
755 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
756
762 uint8_t reg_r( uint8_t reg_adr );
763
769 void write_r8( uint8_t reg, uint8_t val );
770
778 void write_r16( uint8_t reg, uint16_t val );
779
785 uint8_t read_r8( uint8_t reg );
786
794 uint16_t read_r16( uint8_t reg );
795
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 );
806#endif // DOXYGEN_ONLY
807};
808
817{
818public:
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 );
821 virtual ~PCAL6xxx_base();
822};
823
824
830{
831public:
833 enum reg_num {
834 Input_Port,
835 Output_Port,
836 Polarity_Inversion,
837 Configuration,
838 Output_drive_strength_0 = 0x40,
839 Output_drive_strength_1,
840 Input_latch,
841 Pull_up_pull_down_enable,
842 Pull_up_pull_down_selection,
843 Interrupt_mask,
844 Interrupt_status,
845 Output_port_configuration,
846 };
847
852 PCAL6408A( uint8_t i2c_address = (0x40 >> 1) + 0 );
853
859 PCAL6408A( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
860
862 virtual ~PCAL6408A();
863
864 static constexpr uint8_t access_ref[ NUM_access_word ] = {
865 Input_Port, // IN,
866 Output_Port, // OUT
867 Polarity_Inversion, // POLARITY
868 Configuration, // CONFIG
869 Output_drive_strength_0, // DRIVE_STRENGTH
870 Input_latch, // LATCHLATCH
871 Pull_up_pull_down_enable, // PULL_UD_EN
872 Pull_up_pull_down_selection, // PULL_UD_SEL
873 Interrupt_mask, // INT_MASK
874 Interrupt_status, // INT_STATUS
875 Output_port_configuration, // OUTPUT_PORT_CONFIG
876 };
877
878#if DOXYGEN_ONLY
880 enum board {
881 NONE,
882 ARDUINO_SHIELD,
883 };
884
886 const int n_bits;
887
889 const int n_ports;
890
900 void begin( board env = NONE );
901
910 void output( int port, uint8_t value, uint8_t mask = 0 );
911
918 void output( uint8_t *vp );
919
927 uint8_t input( int port );
928
936 uint8_t* input( uint8_t *vp );
937
946 void config( int port, uint8_t config, uint8_t mask = 0 );
947
954 void config( uint8_t* vp );
955
963 void write_port( access_word w, uint8_t* vp );
964
972 void write_port16( access_word w, uint16_t* vp );
973
982 uint8_t* read_port( access_word w, uint8_t* vp );
983
992 uint16_t* read_port16( access_word w, uint16_t* vp );
993
1002 void write_port( access_word w, uint8_t value, int port_num = 0 );
1003
1012 void write_port16( access_word w, uint16_t value, int port_num = 0 );
1013
1022 uint8_t read_port( access_word w, int port_num = 0 );
1023
1032 uint16_t read_port16( access_word w, int port_num = 0 );
1033
1038 bool ping( void );
1039
1047 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
1048
1056 int reg_w( uint8_t reg_adr, uint8_t data );
1057
1065 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
1066
1072 uint8_t reg_r( uint8_t reg_adr );
1073
1079 void write_r8( uint8_t reg, uint8_t val );
1080
1088 void write_r16( uint8_t reg, uint16_t val );
1089
1095 uint8_t read_r8( uint8_t reg );
1096
1104 uint16_t read_r16( uint8_t reg );
1105
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 );
1116#endif // DOXYGEN_ONLY
1117};
1118
1124{
1125public:
1127 enum reg_num {
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,
1140 };
1141
1146 PCAL6416A( uint8_t i2c_address = (0x40 >> 1) + 0 );
1147
1153 PCAL6416A( TwoWire& wire, uint8_t i2c_address = (0x40 >> 1) + 0 );
1154
1156 virtual ~PCAL6416A();
1157
1158 static constexpr uint8_t access_ref[ NUM_access_word ] = {
1159 Input_Port_0, // IN,
1160 Output_Port_0, // OUT
1161 Polarity_Inversion_port_0, // POLARITY
1162 Configuration_port_0, // CONFIG
1163 Output_drive_strength_register_0, // DRIVE_STRENGTH
1164 Input_latch_register_0, // LATCHLATCH
1165 Pull_up_pull_down_enable_register_0, // PULL_UD_EN
1166 Pull_up_pull_down_selection_register_0, // PULL_UD_SEL
1167 Interrupt_mask_register_0, // INT_MASK
1168 Interrupt_status_register_0, // INT_STATUS
1169 Output_port_configuration_register, // OUTPUT_PORT_CONFIG
1170 };
1171
1172#if DOXYGEN_ONLY
1174 enum board {
1175 NONE,
1176 ARDUINO_SHIELD,
1177 };
1178
1180 const int n_bits;
1181
1183 const int n_ports;
1184
1194 void begin( board env = NONE );
1195
1204 void output( int port, uint8_t value, uint8_t mask = 0 );
1205
1212 void output( uint8_t *vp );
1213
1221 uint8_t input( int port );
1222
1230 uint8_t* input( uint8_t *vp );
1231
1240 void config( int port, uint8_t config, uint8_t mask = 0 );
1241
1248 void config( uint8_t* vp );
1249
1257 void write_port( access_word w, uint8_t* vp );
1258
1266 void write_port16( access_word w, uint16_t* vp );
1267
1276 uint8_t* read_port( access_word w, uint8_t* vp );
1277
1286 uint16_t* read_port16( access_word w, uint16_t* vp );
1287
1296 void write_port( access_word w, uint8_t value, int port_num = 0 );
1297
1306 void write_port16( access_word w, uint16_t value, int port_num = 0 );
1307
1316 uint8_t read_port( access_word w, int port_num = 0 );
1317
1326 uint16_t read_port16( access_word w, int port_num = 0 );
1327
1332 bool ping( void );
1333
1341 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
1342
1350 int reg_w( uint8_t reg_adr, uint8_t data );
1351
1359 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
1360
1366 uint8_t reg_r( uint8_t reg_adr );
1367
1373 void write_r8( uint8_t reg, uint8_t val );
1374
1382 void write_r16( uint8_t reg, uint16_t val );
1383
1389 uint8_t read_r8( uint8_t reg );
1390
1398 uint16_t read_r16( uint8_t reg );
1399
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 );
1410#endif // DOXYGEN_ONLY
1411};
1412
1418{
1419public:
1421 enum reg_num {
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,
1444 };
1445
1450 PCAL6524( uint8_t i2c_address = (0x44 >> 1) + 0 );
1451
1457 PCAL6524( TwoWire& wire, uint8_t i2c_address = (0x44 >> 1) + 0 );
1458
1460 virtual ~PCAL6524();
1461
1462 static constexpr uint8_t access_ref[ NUM_access_word ] = {
1463 Input_Port_0, // IN,
1464 Output_Port_0, // OUT
1465 Polarity_Inversion_port_0, // POLARITY
1466 Configuration_port_0, // CONFIG
1467 Output_drive_strength_register_port_0A, // DRIVE_STRENGTH
1468 Input_latch_register_port_0, // LATCHLATCH
1469 Pull_up_pull_down_enable_register_port_0, // PULL_UD_EN
1470 Pull_up_pull_down_selection_register_port_0, // PULL_UD_SEL
1471 Interrupt_mask_register_port_0, // INT_MASK
1472 Interrupt_status_register_port_0, // INT_STATUS
1473 Output_port_configuration_register, // OUTPUT_PORT_CONFIG
1474 };
1475
1476#if DOXYGEN_ONLY
1478 enum board {
1479 NONE,
1480 ARDUINO_SHIELD,
1481 };
1482
1484 const int n_bits;
1485
1487 const int n_ports;
1488
1498 void begin( board env = NONE );
1499
1508 void output( int port, uint8_t value, uint8_t mask = 0 );
1509
1516 void output( uint8_t *vp );
1517
1525 uint8_t input( int port );
1526
1534 uint8_t* input( uint8_t *vp );
1535
1544 void config( int port, uint8_t config, uint8_t mask = 0 );
1545
1552 void config( uint8_t* vp );
1553
1561 void write_port( access_word w, uint8_t* vp );
1562
1570 void write_port16( access_word w, uint16_t* vp );
1571
1580 uint8_t* read_port( access_word w, uint8_t* vp );
1581
1590 uint16_t* read_port16( access_word w, uint16_t* vp );
1591
1600 void write_port( access_word w, uint8_t value, int port_num = 0 );
1601
1610 void write_port16( access_word w, uint16_t value, int port_num = 0 );
1611
1620 uint8_t read_port( access_word w, int port_num = 0 );
1621
1630 uint16_t read_port16( access_word w, int port_num = 0 );
1631
1636 bool ping( void );
1637
1645 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
1646
1654 int reg_w( uint8_t reg_adr, uint8_t data );
1655
1663 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
1664
1670 uint8_t reg_r( uint8_t reg_adr );
1671
1677 void write_r8( uint8_t reg, uint8_t val );
1678
1686 void write_r16( uint8_t reg, uint16_t val );
1687
1693 uint8_t read_r8( uint8_t reg );
1694
1702 uint16_t read_r16( uint8_t reg );
1703
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 );
1714#endif // DOXYGEN_ONLY
1715};
1716
1722{
1723public:
1725 enum reg_num {
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,
1751 };
1752
1757 PCAL6534( uint8_t i2c_address = (0x44 >> 1) + 0 );
1758
1764 PCAL6534( TwoWire& wire, uint8_t i2c_address = (0x44 >> 1) + 0 );
1765
1767 virtual ~PCAL6534();
1768
1769 static constexpr uint8_t access_ref[ NUM_access_word ] = {
1770 Input_Port_0, // IN,
1771 Output_Port_0, // OUT
1772 Polarity_Inversion_port_0, // POLARITY
1773 Configuration_port_0, // CONFIG
1774 Output_drive_strength_register_port_0A, // DRIVE_STRENGTH
1775 Input_latch_register_port_0, // LATCHLATCH
1776 Pull_up_pull_down_enable_register_port_0, // PULL_UD_EN
1777 Pull_up_pull_down_selection_register_port_0, // PULL_UD_SEL
1778 Interrupt_mask_register_port_0, // INT_MASK
1779 Interrupt_status_register_port_0, // INT_STATUS
1780 Output_port_configuration_register, // OUTPUT_PORT_CONFIG
1781 };
1782
1783#if DOXYGEN_ONLY
1785 enum board {
1786 NONE,
1787 ARDUINO_SHIELD,
1788 };
1789
1791 const int n_bits;
1792
1794 const int n_ports;
1795
1805 void begin( board env = NONE );
1806
1815 void output( int port, uint8_t value, uint8_t mask = 0 );
1816
1823 void output( uint8_t *vp );
1824
1832 uint8_t input( int port );
1833
1841 uint8_t* input( uint8_t *vp );
1842
1851 void config( int port, uint8_t config, uint8_t mask = 0 );
1852
1859 void config( uint8_t* vp );
1860
1868 void write_port( access_word w, uint8_t* vp );
1869
1877 void write_port16( access_word w, uint16_t* vp );
1878
1887 uint8_t* read_port( access_word w, uint8_t* vp );
1888
1897 uint16_t* read_port16( access_word w, uint16_t* vp );
1898
1907 void write_port( access_word w, uint8_t value, int port_num = 0 );
1908
1917 void write_port16( access_word w, uint16_t value, int port_num = 0 );
1918
1927 uint8_t read_port( access_word w, int port_num = 0 );
1928
1937 uint16_t read_port16( access_word w, int port_num = 0 );
1938
1943 bool ping( void );
1944
1952 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
1953
1961 int reg_w( uint8_t reg_adr, uint8_t data );
1962
1970 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
1971
1977 uint8_t reg_r( uint8_t reg_adr );
1978
1984 void write_r8( uint8_t reg, uint8_t val );
1985
1993 void write_r16( uint8_t reg, uint16_t val );
1994
2000 uint8_t read_r8( uint8_t reg );
2001
2009 uint16_t read_r16( uint8_t reg );
2010
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 );
2021#endif // DOXYGEN_ONLY
2022};
2023
2024#endif // ARDUINO_GPIO_NXP_ARD_H
uint16_t * read_port16(access_word w, uint16_t *vp)
Definition GPIO_NXP.cpp:138
const int n_bits
Definition GPIO_NXP.h:53
void config(int port, uint8_t config, uint8_t mask=0)
Definition GPIO_NXP.cpp:80
const int n_ports
Definition GPIO_NXP.h:56
virtual ~GPIO_base()
Definition GPIO_NXP.cpp:33
void write_port16(access_word w, uint16_t *vp)
Definition GPIO_NXP.cpp:104
void output(int port, uint8_t value, uint8_t mask=0)
Definition GPIO_NXP.cpp:55
void write_port(access_word w, uint8_t *vp)
Definition GPIO_NXP.cpp:93
void begin(board env=NONE)
Definition GPIO_NXP.cpp:37
uint8_t input(int port)
Definition GPIO_NXP.cpp:68
uint8_t * read_port(access_word w, uint8_t *vp)
Definition GPIO_NXP.cpp:125
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
const int n_bits
Definition GPIO_NXP.h:289
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)
void config(uint8_t *vp)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
const int n_ports
Definition GPIO_NXP.h:292
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 output(uint8_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)
bool ping(void)
uint8_t input(int port)
void write_port(access_word w, uint8_t value, int port_num=0)
uint8_t read_port(access_word w, int port_num=0)
virtual ~PCA9554()
Definition GPIO_NXP.cpp:203
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)
virtual ~PCA9555()
Definition GPIO_NXP.cpp:222
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)
void output(uint8_t *vp)
void config(uint8_t *vp)
int reg_w(uint8_t reg_adr, uint8_t data)
const int n_bits
Definition GPIO_NXP.h:576
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)
uint8_t input(int port)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
const int n_ports
Definition GPIO_NXP.h:579
bool ping(void)
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)
const int n_bits
Definition GPIO_NXP.h:886
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)
bool ping(void)
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)
void config(uint8_t *vp)
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)
const int n_ports
Definition GPIO_NXP.h:889
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)
virtual ~PCAL6408A()
Definition GPIO_NXP.cpp:258
void output(int port, uint8_t value, uint8_t mask=0)
void output(uint8_t *vp)
uint8_t input(int port)
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)
bool ping(void)
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)
void config(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)
uint8_t input(int port)
void output(uint8_t *vp)
void config(int port, uint8_t config, uint8_t mask=0)
const int n_ports
Definition GPIO_NXP.h:1183
virtual ~PCAL6416A()
Definition GPIO_NXP.cpp:277
uint16_t read_r16(uint8_t reg)
void write_port16(access_word w, uint16_t value, int port_num=0)
const int n_bits
Definition GPIO_NXP.h:1180
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)
virtual ~PCAL6524()
Definition GPIO_NXP.cpp:296
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)
const int n_ports
Definition GPIO_NXP.h:1487
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 config(uint8_t *vp)
void output(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)
bool ping(void)
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)
const int n_bits
Definition GPIO_NXP.h:1484
uint8_t input(int port)
int reg_w(uint8_t reg_adr, uint8_t data)
void config(uint8_t *vp)
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)
const int n_ports
Definition GPIO_NXP.h:1794
uint16_t read_port16(access_word w, int port_num=0)
virtual ~PCAL6534()
Definition GPIO_NXP.cpp:315
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)
uint8_t input(int port)
void output(int port, uint8_t value, uint8_t mask=0)
int reg_w(uint8_t reg_adr, uint8_t data)
void output(uint8_t *vp)
bool ping(void)
const int n_bits
Definition GPIO_NXP.h:1791
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
void write_port16(access_word w, uint16_t *vp)