pressure  2.0.0.0
pressure.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright (c) 2019, MikroElektronika - www.mikroe.com
4  * All rights reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * 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 
44 // -------------------------------------------------------------- PUBLIC MACROS
59 #define PRESSURE_REG_REF_P_XLB 0x8 // Reference pressure (LSB)
60 #define PRESSURE_REG_REF_P_LSB 0x9 // Reference pressure (middle)
61 #define PRESSURE_REG_REF_P_MSB 0xA // Reference pressure (MSB)
62 #define PRESSURE_REG_DEVICE_ID 0xF // Device identification
63 #define PRESSURE_REG_RES_CFG 0x10 // Pressure resolution
64 #define PRESSURE_REG_CTRL_REG1 0x20 // Control register 1
65 #define PRESSURE_REG_CTRL_REG2 0x21 // Control register 2
66 #define PRESSURE_REG_CTRL_REG3 0x22 // Control register 3
67 #define PRESSURE_REG_INT_CFG 0x23 // Interrupt configuration
68 #define PRESSURE_REG_INT_SOURCE 0x24 // Interrupt source
69 #define PRESSURE_REG_THSH_P_LSB 0x25 // Threshold pressure (LSB)
70 #define PRESSURE_REG_THSH_P_MSB 0x26 // Threshold pressure (MSB)
71 #define PRESSURE_REG_STATUS 0x27 // Status register
72 #define PRESSURE_REG_PRESS_OUT_XLB 0x28 // Pressure data (LSB)
73 #define PRESSURE_REG_PRESS_OUT_LSB 0x29 // Pressure data (middle)
74 #define PRESSURE_REG_PRESS_OUT_MSB 0x2A // Pressure data (MSB)
75 #define PRESSURE_REG_TEMP_OUT_LSB 0x2B // Temperature data (LSB)
76 #define PRESSURE_REG_TEMP_OUT_MSB 0x2C // Temperature data (MSB)
77 #define PRESSURE_REG_AMP_CTRL 0x30 // Analog front and control
78 
84 #define PRESSURE_WHO_AM_I 0xBB
85 
96 #define PRESSURE_SET_RES_AVG_1 0x0
97 #define PRESSURE_SET_RES_AVG_2 0x1
98 #define PRESSURE_SET_RES_AVG_4 0x2
99 #define PRESSURE_SET_RES_AVG_8 0x3
100 #define PRESSURE_SET_RES_AVG_16 0x4
101 #define PRESSURE_SET_RES_AVG_32 0x5
102 #define PRESSURE_SET_RES_AVG_64 0x6
103 #define PRESSURE_SET_RES_AVG_128 0x7
104 #define PRESSURE_SET_RES_AVG_256 0x8
105 #define PRESSURE_SET_RES_AVG_384 0x9
106 #define PRESSURE_SET_RES_AVG_512 0xA
107 
113 #define PRESSURE_SET_PWR_UP_DEV 0x80
114 #define PRESSURE_SET_PWR_UP_INT 0x8
115 #define PRESSURE_SET_BLOCK_DATA_UPDATE 0x4
116 #define PRESSURE_SET_PWR_UP_DELTA_PRESS 0x2
117 #define PRESSURE_SET_SPI_3_WIRE 0x1
118 
124 #define PRESSURE_SET_REBOOT_MEM_CONTENT 0x80
125 #define PRESSURE_SET_SW_RESET 0x4
126 #define PRESSURE_SET_AUTOZERO_EN 0x2
127 #define PRESSURE_SET_ONESHOT_EN 0x1
128 #define PRESSURE_SET_NORMAL_MODE 0x0
129 
135 #define PRESSURE_SET_INT_ACT_LOW 0x80
136 #define PRESSURE_SET_INT_OPEN_DRAIN 0x40
137 #define PRESSURE_SET_INT_GND 0x0
138 #define PRESSURE_SET_INT_PRESS_HIGH 0x1
139 #define PRESSURE_SET_INT_PRESS_LOW 0x2
140 #define PRESSURE_SET_INT_P_LOW_OR_HIGH 0x3
141 #define PRESSURE_SET_INT_DATA_RDY 0x4
142 #define PRESSURE_SET_INT_TRI_STATE 0x7
143  // End settings group
146 
156 #define PRESSURE_FLAG_MASK_P_DATA_OR 0x20
157 #define PRESSURE_FLAG_MASK_T_DATA_OR 0x10
158 #define PRESSURE_FLAG_MASK_P_DATA_RDY 0x2
159 #define PRESSURE_FLAG_MASK_T_DATA_RDY 0x1
160 
166 #define PRESSURE_FLAG_MASK_INT_ACT 0x4
167 #define PRESSURE_FLAG_MASK_DIFF_P_LOW 0x2
168 #define PRESSURE_FLAG_MASK_DIFF_P_HIGH 0x1
169  // End status group
172 
177 #define PRESSURE_DATA_NUMBER_MIN 1
178 #define PRESSURE_DATA_NUMBER_MAX 49
179  // End registers group
182 
187 #define PRESSURE_MAP_MIKROBUS( cfg, mikrobus ) \
188  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
189  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
190  cfg.sdo = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
191  cfg.sdi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
192  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT ); \
193  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
194  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA )
195  // End macros group
198 // --------------------------------------------------------------- PUBLIC TYPES
207 typedef void ( *pressure_master_transfer_t )( struct pressure_s*, uint8_t, uint8_t*, uint8_t );
208 
212 typedef enum
213 {
214  PRESSURE_OK = 0x0,
218 
220 
224 typedef enum
225 {
228 
230 
234 typedef enum
235 {
244 
246 
250 typedef enum
251 {
254 
256 
260 typedef struct pressure_s
261 {
262  // Interrupt pin.
263  digital_in_t int_pin;
264 
265  // Modules.
266  i2c_master_t i2c;
267  spi_master_t spi;
268 
269  // Context variables.
270  hal_i2c_address_t slave_addr;
273 
274 } pressure_t;
275 
279 typedef struct
280 {
281  // Communication gpio pins.
282  pin_name_t cs;
283  pin_name_t sck;
284  pin_name_t sdo;
285  pin_name_t sdi;
286  pin_name_t scl;
287  pin_name_t sda;
288 
289  // Additional gpio pins.
290  pin_name_t int_pin;
291 
292  // Configuration variables.
293  bool i2c_addr;
294  hal_i2c_speed_t i2c_speed;
295  hal_spi_speed_t spi_speed;
296  hal_spi_mode_t spi_mode;
298 
300  // End types group
302 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
308 #ifdef __cplusplus
309 extern "C"{
310 #endif
311 
321 void
323 
340 
349 void
351 
365 pressure_generic_single_write( pressure_t *ctx, uint8_t reg_addr,
366  uint8_t data_in );
367 
384 pressure_generic_multiple_write( pressure_t *ctx, uint8_t reg_addr,
385  uint8_t *data_in, uint8_t n_data );
386 
403 pressure_generic_multiple_read( pressure_t *ctx, uint8_t reg_addr,
404  uint8_t *data_out, uint8_t n_data );
405 
415 uint8_t
417 
426 void
428 
437 void
439 
448 void
450 
461 void
463 
473 void
475 
484 void
486 
495 void
497 
507 float
509 
520 float
522 
534 uint8_t
535 pressure_get_status( pressure_t *ctx, uint8_t bit_mask );
536 
548 digital_in_data_t
550 
551 #ifdef __cplusplus
552 }
553 #endif
554 #endif // _PRESSURE_H_
555  // End public_function group
558 
559 // ------------------------------------------------------------------------ END
void pressure_cfg_setup(pressure_cfg_t *cfg)
Configuration Object Setup function.
pressure_err_t
Click error code definition.
Definition: pressure.h:212
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:263
uint8_t pressure_read_id(pressure_t *ctx)
ID Read function.
Click configuration structure definition.
Definition: pressure.h:279
pressure_pwr_ctrl_t
Click power control definition.
Definition: pressure.h:250
void pressure_pwr_ctrl(pressure_t *ctx, pressure_pwr_ctrl_t state)
Device Power Control function.
hal_spi_speed_t spi_speed
Definition: pressure.h:295
pressure_err_t pressure_init(pressure_t *ctx, pressure_cfg_t *cfg)
Click Initialization function.
void pressure_set_odr(pressure_t *ctx, pressure_odr_t odr)
Output Data Rate Set function.
Definition: pressure.h:226
hal_i2c_address_t slave_addr
Definition: pressure.h:270
void pressure_block_data_update(pressure_t *ctx, pressure_pwr_ctrl_t state)
Data Update Block function.
hal_i2c_speed_t i2c_speed
Definition: pressure.h:294
Definition: pressure.h:240
Definition: pressure.h:238
Definition: pressure.h:239
Definition: pressure.h:237
pressure_drv_select_t drv_sel
Definition: pressure.h:297
Definition: pressure.h:216
pin_name_t cs
Definition: pressure.h:282
void(* pressure_master_transfer_t)(struct pressure_s *, uint8_t, uint8_t *, uint8_t)
Click master transfer function definition.
Definition: pressure.h:207
pressure_drv_select_t
Click driver selector definition.
Definition: pressure.h:224
spi_master_t spi
Definition: pressure.h:267
Definition: pressure.h:227
void pressure_pwr_ctrl_interrupt(pressure_t *ctx, pressure_pwr_ctrl_t state)
Interrupt Power Control function.
Definition: pressure.h:214
pressure_master_transfer_t read
Definition: pressure.h:272
digital_in_data_t pressure_get_int_pin(pressure_t *ctx)
INT Pin Get function.
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:283
bool i2c_addr
Definition: pressure.h:293
pressure_master_transfer_t write
Definition: pressure.h:271
Definition: pressure.h:241
i2c_master_t i2c
Definition: pressure.h:266
uint8_t pressure_get_status(pressure_t *ctx, uint8_t bit_mask)
Status Get function.
Definition: pressure.h:215
Definition: pressure.h:252
pin_name_t int_pin
Definition: pressure.h:290
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:287
pressure_odr_t
Click output data rate definition.
Definition: pressure.h:234
Definition: pressure.h:242
void pressure_sw_reset(pressure_t *ctx)
Software Reset function.
Definition: pressure.h:243
Definition: pressure.h:217
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:260
pin_name_t scl
Definition: pressure.h:286
void pressure_default_cfg(pressure_t *ctx)
Click Default Configuration function.
hal_spi_mode_t spi_mode
Definition: pressure.h:296
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:284
pin_name_t sdi
Definition: pressure.h:285
Definition: pressure.h:253
Definition: pressure.h:236