expand9 2.0.0.0
expand9.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
28#ifndef EXPAND9_H
29#define EXPAND9_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_i2c_master.h"
52
73#define EXPAND9_REG_INPUT_DISABLE_B 0x00
74#define EXPAND9_REG_INPUT_DISABLE_A 0x01
75#define EXPAND9_REG_LONG_SLEW_B 0x02
76#define EXPAND9_REG_LONG_SLEW_A 0x03
77#define EXPAND9_REG_LOW_DRIVE_B 0x04
78#define EXPAND9_REG_LOW_DRIVE_A 0x05
79#define EXPAND9_REG_PULL_UP_B 0x06
80#define EXPAND9_REG_PULL_UP_A 0x07
81#define EXPAND9_REG_PULL_DOWN_B 0x08
82#define EXPAND9_REG_PULL_DOWN_A 0x09
83#define EXPAND9_REG_OPEN_DRAIN_B 0x0A
84#define EXPAND9_REG_OPEN_DRAIN_A 0x0B
85#define EXPAND9_REG_POLARITY_B 0x0C
86#define EXPAND9_REG_POLARITY_A 0x0D
87#define EXPAND9_REG_DIR_B 0x0E
88#define EXPAND9_REG_DIR_A 0x0F
89#define EXPAND9_REG_DATA_B 0x10
90#define EXPAND9_REG_DATA_A 0x11
91#define EXPAND9_REG_INTERRUPT_MASK_B 0x12
92#define EXPAND9_REG_INTERRUPT_MASK_A 0x13
93#define EXPAND9_REG_SENSE_HIGH_B 0x14
94#define EXPAND9_REG_SENSE_LOW_B 0x15
95#define EXPAND9_REG_SENSE_HIGH_A 0x16
96#define EXPAND9_REG_SENSE_LOW_A 0x17
97#define EXPAND9_REG_INTERRUPT_SOURCE_B 0x18
98#define EXPAND9_REG_INTERRUPT_SOURCE_A 0x19
99#define EXPAND9_REG_EVENT_STATUS_B 0x1A
100#define EXPAND9_REG_EVENT_STATUS_A 0x1B
101#define EXPAND9_REG_LEVEL_SHIFTER_1 0x1C
102#define EXPAND9_REG_LEVEL_SHIFTER_2 0x1D
103#define EXPAND9_REG_CLOCK 0x1E
104#define EXPAND9_REG_MISC 0x1F
105#define EXPAND9_REG_LED_DRIVER_ENABLE_B 0x20
106#define EXPAND9_REG_LED_DRIVER_ENABLE_A 0x21
107#define EXPAND9_REG_DEBOUNCE_CONFIG 0x22
108#define EXPAND9_REG_DEBOUNCE_ENABLE_B 0x23
109#define EXPAND9_REG_DEBOUNCE_ENABLE_A 0x24
110#define EXPAND9_REG_KEY_CONFIG_1 0x25
111#define EXPAND9_REG_KEY_CONFIG_2 0x26
112#define EXPAND9_REG_KEY_DATA_1 0x27
113#define EXPAND9_REG_KEY_DATA_2 0x28
114#define EXPAND9_REG_T_ON_0 0x29
115#define EXPAND9_REG_I_ON_0 0x2A
116#define EXPAND9_REG_OFF_0 0x2B
117#define EXPAND9_REG_T_ON_1 0x2C
118#define EXPAND9_REG_I_ON_1 0x2D
119#define EXPAND9_REG_OFF_1 0x2E
120#define EXPAND9_REG_T_ON_2 0x2F
121#define EXPAND9_REG_I_ON_2 0x30
122#define EXPAND9_REG_OFF_2 0x31
123#define EXPAND9_REG_T_ON_3 0x32
124#define EXPAND9_REG_I_ON_3 0x33
125#define EXPAND9_REG_OFF_3 0x34
126#define EXPAND9_REG_T_ON_4 0x35
127#define EXPAND9_REG_I_ON_4 0x36
128#define EXPAND9_REG_OFF_4 0x37
129#define EXPAND9_REG_T_RISE_4 0x38
130#define EXPAND9_REG_T_FALL_4 0x39
131#define EXPAND9_REG_T_ON_5 0x3A
132#define EXPAND9_REG_I_ON_5 0x3B
133#define EXPAND9_REG_OFF_5 0x3C
134#define EXPAND9_REG_T_RISE_5 0x3D
135#define EXPAND9_REG_T_FALL_5 0x3E
136#define EXPAND9_REG_T_ON_6 0x3F
137#define EXPAND9_REG_I_ON_6 0x40
138#define EXPAND9_REG_OFF_6 0x41
139#define EXPAND9_REG_T_RISE_6 0x42
140#define EXPAND9_REG_T_FALL_6 0x43
141#define EXPAND9_REG_T_ON_7 0x44
142#define EXPAND9_REG_I_ON_7 0x45
143#define EXPAND9_REG_OFF_7 0x46
144#define EXPAND9_REG_T_RISE_7 0x47
145#define EXPAND9_REG_T_FALL_7 0x48
146#define EXPAND9_REG_T_ON_8 0x49
147#define EXPAND9_REG_I_ON_8 0x4A
148#define EXPAND9_REG_OFF_8 0x4B
149#define EXPAND9_REG_T_ON_9 0x4C
150#define EXPAND9_REG_I_ON_9 0x4D
151#define EXPAND9_REG_OFF_9 0x4E
152#define EXPAND9_REG_T_ON_10 0x4F
153#define EXPAND9_REG_I_ON_10 0x50
154#define EXPAND9_REG_OFF_10 0x51
155#define EXPAND9_REG_T_ON_11 0x52
156#define EXPAND9_REG_I_ON_11 0x53
157#define EXPAND9_REG_OFF_11 0x54
158#define EXPAND9_REG_T_ON_12 0x55
159#define EXPAND9_REG_I_ON_12 0x56
160#define EXPAND9_REG_OFF_12 0x57
161#define EXPAND9_REG_T_RISE_12 0x58
162#define EXPAND9_REG_T_FALL_12 0x59
163#define EXPAND9_REG_T_ON_13 0x5A
164#define EXPAND9_REG_I_ON_13 0x5B
165#define EXPAND9_REG_OFF_13 0x5C
166#define EXPAND9_REG_T_RISE_13 0x5D
167#define EXPAND9_REG_T_FALL_13 0x5E
168#define EXPAND9_REG_T_ON_14 0x5F
169#define EXPAND9_REG_I_ON_14 0x60
170#define EXPAND9_REG_OFF_14 0x61
171#define EXPAND9_REG_T_RISE_14 0x62
172#define EXPAND9_REG_T_FALL_14 0x63
173#define EXPAND9_REG_T_ON_15 0x64
174#define EXPAND9_REG_I_ON_15 0x65
175#define EXPAND9_REG_OFF_15 0x66
176#define EXPAND9_REG_T_RISE_15 0x67
177#define EXPAND9_REG_T_FALL_15 0x68
178#define EXPAND9_REG_HIGH_INPUT_B 0x69
179#define EXPAND9_REG_HIGH_INPUT_A 0x6A
180#define EXPAND9_REG_RESET 0x7D
181#define EXPAND9_REG_TEST_1 0x7E
182#define EXPAND9_REG_TEST_2 0x7F
183
184 // expand9_reg
185
200#define EXPAND9_CHANGE 0x01
201#define EXPAND9_FALLING 0x02
202#define EXPAND9_RISING 0x03
203#define EXPAND9_FREQ_DIV_1 0x01
204#define EXPAND9_FREQ_DIV_2 0x02
205#define EXPAND9_FREQ_DIV_3 0x03
206#define EXPAND9_FREQ_DIV_4 0x04
207#define EXPAND9_FREQ_DIV_5 0x05
208#define EXPAND9_FREQ_DIV_6 0x06
209#define EXPAND9_FREQ_DIV_7 0x07
210#define EXPAND9_LED_MODE_LINEAR 0x00
211#define EXPAND9_LED_MODE_LOGARITHMIC 0x01
212
218#define EXPAND9_SET_DEV_ADDR_GND 0x3E
219#define EXPAND9_SET_DEV_ADDR_VCC 0x70
220
221 // expand9_set
222
237#define EXPAND9_MAP_MIKROBUS( cfg, mikrobus ) \
238 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
239 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
240 cfg.add = MIKROBUS( mikrobus, MIKROBUS_AN ); \
241 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
242 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
243
244 // expand9_map
245 // expand9
246
251typedef struct
252{
253 // Output pins
254 digital_out_t add;
255 digital_out_t rst;
258 // Input pins
259 digital_in_t int_pin;
261 // Modules
262 i2c_master_t i2c;
264 // I2C slave address
267} expand9_t;
268
273typedef struct
274{
275 pin_name_t scl;
276 pin_name_t sda;
278 pin_name_t add;
279 pin_name_t rst;
280 pin_name_t int_pin;
282 uint32_t i2c_speed;
283 uint8_t i2c_address;
286
291typedef enum
292{
294 EXPAND9_ERROR = -1
295
297
308
319
336
352
367
383err_t expand9_set_slave_address ( expand9_t *ctx, uint8_t slave_addr );
384
400err_t expand9_generic_write ( expand9_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
401
417err_t expand9_generic_read ( expand9_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
418
433
448err_t expand9_set_ch_direction ( expand9_t *ctx, uint8_t ch_pos, expand9_direction_value_t direction );
449
464
479
495err_t expand9_set_ch_output_state ( expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t ch_state );
496
512err_t expand9_get_ch_output_state ( expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t *ch_state );
513
532err_t expand9_write_ch ( expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t ch_state );
533
549err_t expand9_read_ch ( expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t *ch_state );
550
571err_t expand9_led_driver_config ( expand9_t *ctx, uint8_t ch_pos, uint8_t freq_div, uint8_t lin_log );
572
589err_t expand9_set_intensity ( expand9_t *ctx, uint8_t ch_pos, uint8_t intensity );
590
605err_t expand9_sync ( expand9_t *ctx );
606
631err_t expand9_debounce_config ( expand9_t *ctx, uint8_t config_val );
632
652err_t expand9_enable_ch_interrupt ( expand9_t *ctx, uint8_t ch_pos, uint8_t rise_fall );
653
669
685err_t expand9_check_ch_interrupt ( expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t *int_state );
686
701
702#ifdef __cplusplus
703}
704#endif
705#endif // EXPAND9_H
706
707 // expand9
708
709// ------------------------------------------------------------------------ END
expand9_direction_value_t
Expand 9 Click direction value data.
Definition expand9.h:303
@ DIRECTION_INPUT
Definition expand9.h:304
@ DIRECTION_OUTPUT
Definition expand9.h:305
expand9_return_value_t
Expand 9 Click return value data.
Definition expand9.h:292
@ EXPAND9_OK
Definition expand9.h:293
@ EXPAND9_ERROR
Definition expand9.h:294
expand9_ch_state_value_t
Expand 9 Click channel state value data.
Definition expand9.h:314
@ CH_OUTPUT_OFF
Definition expand9.h:315
@ CH_OUTPUT_ON
Definition expand9.h:316
uint8_t expand9_check_interrupt_pin(expand9_t *ctx)
Expand 9 check interrupt pin function.
err_t expand9_generic_read(expand9_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
Expand 9 I2C reading function.
err_t expand9_set_slave_address(expand9_t *ctx, uint8_t slave_addr)
Expand 9 set I2C Slave address function.
err_t expand9_set_ch_output_state(expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t ch_state)
Expand 9 set channel output state function.
err_t expand9_set_intensity(expand9_t *ctx, uint8_t ch_pos, uint8_t intensity)
Expand 9 set intensity function.
err_t expand9_default_cfg(expand9_t *ctx)
Expand 9 default configuration function.
err_t expand9_set_all_ch_input(expand9_t *ctx)
Expand 9 set all channel input function.
err_t expand9_write_ch(expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t ch_state)
Expand 9 write channel function.
err_t expand9_led_driver_config(expand9_t *ctx, uint8_t ch_pos, uint8_t freq_div, uint8_t lin_log)
Expand 9 LED driver configuration function.
err_t expand9_read_ch(expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t *ch_state)
Expand 9 read channel function.
void expand9_cfg_setup(expand9_cfg_t *cfg)
Expand 9 configuration object setup function.
err_t expand9_soft_reset(expand9_t *ctx)
Expand 9 software reset function.
err_t expand9_enable_ch_interrupt(expand9_t *ctx, uint8_t ch_pos, uint8_t rise_fall)
Expand 9 enable channel interrupt function.
err_t expand9_debounce_config(expand9_t *ctx, uint8_t config_val)
Expand 9 sync function.
err_t expand9_clear_interrupt(expand9_t *ctx)
Expand 9 clear all interrupt function.
err_t expand9_sync(expand9_t *ctx)
Expand 9 sync function.
err_t expand9_set_ch_direction(expand9_t *ctx, uint8_t ch_pos, expand9_direction_value_t direction)
Expand 9 set channel direction function.
err_t expand9_generic_write(expand9_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
Expand 9 I2C writing function.
err_t expand9_set_all_ch_output(expand9_t *ctx)
Expand 9 set all channel output function.
err_t expand9_get_ch_output_state(expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t *ch_state)
Expand 9 get channel output state function.
err_t expand9_init(expand9_t *ctx, expand9_cfg_t *cfg)
Expand 9 initialization function.
err_t expand9_check_ch_interrupt(expand9_t *ctx, uint8_t ch_pos, expand9_ch_state_value_t *int_state)
Expand 9 check channel interrupt function.
Expand 9 Click configuration object.
Definition expand9.h:274
uint32_t i2c_speed
Definition expand9.h:282
pin_name_t add
Definition expand9.h:278
pin_name_t scl
Definition expand9.h:275
pin_name_t int_pin
Definition expand9.h:280
pin_name_t sda
Definition expand9.h:276
pin_name_t rst
Definition expand9.h:279
uint8_t i2c_address
Definition expand9.h:283
Expand 9 Click context object.
Definition expand9.h:252
digital_out_t add
Definition expand9.h:254
digital_in_t int_pin
Definition expand9.h:259
i2c_master_t i2c
Definition expand9.h:262
digital_out_t rst
Definition expand9.h:255
uint8_t slave_address
Definition expand9.h:265