pressure  2.0.0.0
pressure.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef _PRESSURE_H_
36 #define _PRESSURE_H_
37 
38 #include "drv_digital_out.h"
39 #include "drv_digital_in.h"
40 #include "drv_i2c_master.h"
41 #include "drv_spi_master.h"
42 
43 // -------------------------------------------------------------- PUBLIC MACROS
58 #define PRESSURE_REG_REF_P_XLB 0x8 // Reference pressure (LSB)
59 #define PRESSURE_REG_REF_P_LSB 0x9 // Reference pressure (middle)
60 #define PRESSURE_REG_REF_P_MSB 0xA // Reference pressure (MSB)
61 #define PRESSURE_REG_DEVICE_ID 0xF // Device identification
62 #define PRESSURE_REG_RES_CFG 0x10 // Pressure resolution
63 #define PRESSURE_REG_CTRL_REG1 0x20 // Control register 1
64 #define PRESSURE_REG_CTRL_REG2 0x21 // Control register 2
65 #define PRESSURE_REG_CTRL_REG3 0x22 // Control register 3
66 #define PRESSURE_REG_INT_CFG 0x23 // Interrupt configuration
67 #define PRESSURE_REG_INT_SOURCE 0x24 // Interrupt source
68 #define PRESSURE_REG_THSH_P_LSB 0x25 // Threshold pressure (LSB)
69 #define PRESSURE_REG_THSH_P_MSB 0x26 // Threshold pressure (MSB)
70 #define PRESSURE_REG_STATUS 0x27 // Status register
71 #define PRESSURE_REG_PRESS_OUT_XLB 0x28 // Pressure data (LSB)
72 #define PRESSURE_REG_PRESS_OUT_LSB 0x29 // Pressure data (middle)
73 #define PRESSURE_REG_PRESS_OUT_MSB 0x2A // Pressure data (MSB)
74 #define PRESSURE_REG_TEMP_OUT_LSB 0x2B // Temperature data (LSB)
75 #define PRESSURE_REG_TEMP_OUT_MSB 0x2C // Temperature data (MSB)
76 #define PRESSURE_REG_AMP_CTRL 0x30 // Analog front and control
77 
83 #define PRESSURE_WHO_AM_I 0xBB
84 
95 #define PRESSURE_SET_RES_AVG_1 0x0
96 #define PRESSURE_SET_RES_AVG_2 0x1
97 #define PRESSURE_SET_RES_AVG_4 0x2
98 #define PRESSURE_SET_RES_AVG_8 0x3
99 #define PRESSURE_SET_RES_AVG_16 0x4
100 #define PRESSURE_SET_RES_AVG_32 0x5
101 #define PRESSURE_SET_RES_AVG_64 0x6
102 #define PRESSURE_SET_RES_AVG_128 0x7
103 #define PRESSURE_SET_RES_AVG_256 0x8
104 #define PRESSURE_SET_RES_AVG_384 0x9
105 #define PRESSURE_SET_RES_AVG_512 0xA
106 
112 #define PRESSURE_SET_PWR_UP_DEV 0x80
113 #define PRESSURE_SET_PWR_UP_INT 0x8
114 #define PRESSURE_SET_BLOCK_DATA_UPDATE 0x4
115 #define PRESSURE_SET_PWR_UP_DELTA_PRESS 0x2
116 #define PRESSURE_SET_SPI_3_WIRE 0x1
117 
123 #define PRESSURE_SET_REBOOT_MEM_CONTENT 0x80
124 #define PRESSURE_SET_SW_RESET 0x4
125 #define PRESSURE_SET_AUTOZERO_EN 0x2
126 #define PRESSURE_SET_ONESHOT_EN 0x1
127 #define PRESSURE_SET_NORMAL_MODE 0x0
128 
134 #define PRESSURE_SET_INT_ACT_LOW 0x80
135 #define PRESSURE_SET_INT_OPEN_DRAIN 0x40
136 #define PRESSURE_SET_INT_GND 0x0
137 #define PRESSURE_SET_INT_PRESS_HIGH 0x1
138 #define PRESSURE_SET_INT_PRESS_LOW 0x2
139 #define PRESSURE_SET_INT_P_LOW_OR_HIGH 0x3
140 #define PRESSURE_SET_INT_DATA_RDY 0x4
141 #define PRESSURE_SET_INT_TRI_STATE 0x7
142  // End settings group
145 
155 #define PRESSURE_FLAG_MASK_P_DATA_OR 0x20
156 #define PRESSURE_FLAG_MASK_T_DATA_OR 0x10
157 #define PRESSURE_FLAG_MASK_P_DATA_RDY 0x2
158 #define PRESSURE_FLAG_MASK_T_DATA_RDY 0x1
159 
165 #define PRESSURE_FLAG_MASK_INT_ACT 0x4
166 #define PRESSURE_FLAG_MASK_DIFF_P_LOW 0x2
167 #define PRESSURE_FLAG_MASK_DIFF_P_HIGH 0x1
168  // End status group
171 
176 #define PRESSURE_DATA_NUMBER_MIN 1
177 #define PRESSURE_DATA_NUMBER_MAX 49
178  // End registers group
181 
186 #define PRESSURE_MAP_MIKROBUS( cfg, mikrobus ) \
187  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
188  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
189  cfg.sdo = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
190  cfg.sdi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
191  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT ); \
192  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
193  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA )
194  // End macros group
197 // --------------------------------------------------------------- PUBLIC TYPES
206 typedef void ( *pressure_master_transfer_t )( struct pressure_s*, uint8_t, uint8_t*, uint8_t );
207 
211 typedef enum
212 {
213  PRESSURE_OK = 0x0,
217 
219 
223 typedef enum
224 {
227 
229 
233 typedef enum
234 {
243 
245 
249 typedef enum
250 {
253 
255 
259 typedef struct pressure_s
260 {
261  // Output pin
262  digital_out_t cs;
263 
264  // Interrupt pin.
265  digital_in_t int_pin;
266 
267  // Modules.
268  i2c_master_t i2c;
269  spi_master_t spi;
270 
271  // Context variables.
272  uint8_t slave_addr;
273  pin_name_t chip_select;
276 
277 } pressure_t;
278 
282 typedef struct
283 {
284  // Communication gpio pins.
285  pin_name_t cs;
286  pin_name_t sck;
287  pin_name_t sdo;
288  pin_name_t sdi;
289  pin_name_t scl;
290  pin_name_t sda;
291 
292  // Additional gpio pins.
293  pin_name_t int_pin;
294 
295  // Configuration variables.
296  bool i2c_addr;
297  uint32_t i2c_speed;
298  uint32_t spi_speed;
299  spi_master_mode_t spi_mode;
300  spi_master_chip_select_polarity_t cs_polarity;
301 
303 
305  // End types group
307 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
313 #ifdef __cplusplus
314 extern "C"{
315 #endif
316 
326 void
328 
345 
354 void
356 
370 pressure_generic_single_write( pressure_t *ctx, uint8_t reg_addr,
371  uint8_t data_in );
372 
389 pressure_generic_multiple_write( pressure_t *ctx, uint8_t reg_addr,
390  uint8_t *data_in, uint8_t n_data );
391 
408 pressure_generic_multiple_read( pressure_t *ctx, uint8_t reg_addr,
409  uint8_t *data_out, uint8_t n_data );
410 
420 uint8_t
422 
431 void
433 
442 void
444 
453 void
455 
466 void
468 
478 void
480 
489 void
491 
500 void
502 
512 float
514 
525 float
527 
539 uint8_t
540 pressure_get_status( pressure_t *ctx, uint8_t bit_mask );
541 
553 uint8_t
555 
556 #ifdef __cplusplus
557 }
558 #endif
559 #endif // _PRESSURE_H_
560  // End public_function group
563 
564 // ------------------------------------------------------------------------ END
void pressure_cfg_setup(pressure_cfg_t *cfg)
Configuration Object Setup function.
pressure_err_t
Click error code definition.
Definition: pressure.h:211
pressure_err_t pressure_generic_single_write(pressure_t *ctx, uint8_t reg_addr, uint8_t data_in)
Generic Single Write function.
digital_in_t int_pin
Definition: pressure.h:265
uint8_t pressure_read_id(pressure_t *ctx)
ID Read function.
Click configuration structure definition.
Definition: pressure.h:282
pressure_pwr_ctrl_t
Click power control definition.
Definition: pressure.h:249
void pressure_pwr_ctrl(pressure_t *ctx, pressure_pwr_ctrl_t state)
Device Power Control function.
pressure_err_t pressure_init(pressure_t *ctx, pressure_cfg_t *cfg)
Click Initialization function.
digital_out_t cs
Definition: pressure.h:262
void pressure_set_odr(pressure_t *ctx, pressure_odr_t odr)
Output Data Rate Set function.
Definition: pressure.h:225
spi_master_chip_select_polarity_t cs_polarity
Definition: pressure.h:300
void pressure_block_data_update(pressure_t *ctx, pressure_pwr_ctrl_t state)
Data Update Block function.
Definition: pressure.h:239
Definition: pressure.h:237
Definition: pressure.h:238
uint32_t spi_speed
Definition: pressure.h:298
uint8_t pressure_get_int_pin(pressure_t *ctx)
INT Pin Get function.
Definition: pressure.h:236
pressure_drv_select_t drv_sel
Definition: pressure.h:302
Definition: pressure.h:215
uint32_t i2c_speed
Definition: pressure.h:297
pin_name_t cs
Definition: pressure.h:285
void(* pressure_master_transfer_t)(struct pressure_s *, uint8_t, uint8_t *, uint8_t)
Click master transfer function definition.
Definition: pressure.h:206
pressure_drv_select_t
Click driver selector definition.
Definition: pressure.h:223
spi_master_t spi
Definition: pressure.h:269
Definition: pressure.h:226
void pressure_pwr_ctrl_interrupt(pressure_t *ctx, pressure_pwr_ctrl_t state)
Interrupt Power Control function.
Definition: pressure.h:213
pressure_master_transfer_t read
Definition: pressure.h:275
spi_master_mode_t spi_mode
Definition: pressure.h:299
float pressure_get_pressure(pressure_t *ctx)
Pressure Get function.
void pressure_reboot_memory(pressure_t *ctx)
Memory Reboot function.
struct pressure_s pressure_t
Click context object definition.
pin_name_t sck
Definition: pressure.h:286
bool i2c_addr
Definition: pressure.h:296
pressure_master_transfer_t write
Definition: pressure.h:274
Definition: pressure.h:240
i2c_master_t i2c
Definition: pressure.h:268
uint8_t pressure_get_status(pressure_t *ctx, uint8_t bit_mask)
Status Get function.
Definition: pressure.h:214
Definition: pressure.h:251
pin_name_t int_pin
Definition: pressure.h:293
pressure_err_t pressure_generic_multiple_read(pressure_t *ctx, uint8_t reg_addr, uint8_t *data_out, uint8_t n_data)
Generic Multiple Read function.
pin_name_t sda
Definition: pressure.h:290
pressure_odr_t
Click output data rate definition.
Definition: pressure.h:233
uint8_t slave_addr
Definition: pressure.h:272
Definition: pressure.h:241
void pressure_sw_reset(pressure_t *ctx)
Software Reset function.
Definition: pressure.h:242
Definition: pressure.h:216
void pressure_pwr_ctrl_delta_pressure(pressure_t *ctx, pressure_pwr_ctrl_t state)
Delta Pressure Power Control function.
Click context object definition.
Definition: pressure.h:259
pin_name_t chip_select
Definition: pressure.h:273
pin_name_t scl
Definition: pressure.h:289
void pressure_default_cfg(pressure_t *ctx)
Click Default Configuration function.
float pressure_get_temperature(pressure_t *ctx)
Temperature Get function.
pressure_err_t pressure_generic_multiple_write(pressure_t *ctx, uint8_t reg_addr, uint8_t *data_in, uint8_t n_data)
Generic Multiple Write function.
pin_name_t sdo
Definition: pressure.h:287
pin_name_t sdi
Definition: pressure.h:288
Definition: pressure.h:252
Definition: pressure.h:235