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 
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 
371  uint8_t data_in );
372 
390  uint8_t *data_in, uint8_t n_data );
391 
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
pressure_read_id
uint8_t pressure_read_id(pressure_t *ctx)
ID Read function.
pressure_reboot_memory
void pressure_reboot_memory(pressure_t *ctx)
Memory Reboot function.
pressure_cfg_t::sdi
pin_name_t sdi
Definition: pressure.h:288
pressure_get_status
uint8_t pressure_get_status(pressure_t *ctx, uint8_t bit_mask)
Status Get function.
pressure_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: pressure.h:300
PRESSURE_ODR_P7HZ_T7HZ
@ PRESSURE_ODR_P7HZ_T7HZ
Definition: pressure.h:240
pressure_pwr_ctrl_delta_pressure
void pressure_pwr_ctrl_delta_pressure(pressure_t *ctx, pressure_pwr_ctrl_t state)
Delta Pressure Power Control function.
pressure_master_transfer_t
void(* pressure_master_transfer_t)(struct pressure_s *, uint8_t, uint8_t *, uint8_t)
Click master transfer function definition.
Definition: pressure.h:206
pressure_default_cfg
void pressure_default_cfg(pressure_t *ctx)
Click Default Configuration function.
PRESSURE_ODR_P25HZ_T25HZ
@ PRESSURE_ODR_P25HZ_T25HZ
Definition: pressure.h:242
pressure_sw_reset
void pressure_sw_reset(pressure_t *ctx)
Software Reset function.
pressure_s::i2c
i2c_master_t i2c
Definition: pressure.h:268
PRESSURE_ODR_P12HZ_T12HZ
@ PRESSURE_ODR_P12HZ_T12HZ
Definition: pressure.h:241
pressure_cfg_setup
void pressure_cfg_setup(pressure_cfg_t *cfg)
Configuration Object Setup function.
pressure_s
Click context object definition.
Definition: pressure.h:260
PRESSURE_DRV_SEL_SPI
@ PRESSURE_DRV_SEL_SPI
Definition: pressure.h:226
pressure_s::int_pin
digital_in_t int_pin
Definition: pressure.h:265
PRESSURE_OK
@ PRESSURE_OK
Definition: pressure.h:213
pressure_cfg_t::spi_speed
uint32_t spi_speed
Definition: pressure.h:298
pressure_pwr_ctrl_interrupt
void pressure_pwr_ctrl_interrupt(pressure_t *ctx, pressure_pwr_ctrl_t state)
Interrupt Power Control function.
PRESSURE_ERR_NDATA
@ PRESSURE_ERR_NDATA
Definition: pressure.h:216
pressure_generic_multiple_read
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.
pressure_pwr_ctrl_t
pressure_pwr_ctrl_t
Click power control definition.
Definition: pressure.h:250
pressure_cfg_t::cs
pin_name_t cs
Definition: pressure.h:285
pressure_s::read
pressure_master_transfer_t read
Definition: pressure.h:275
pressure_drv_select_t
pressure_drv_select_t
Click driver selector definition.
Definition: pressure.h:224
pressure_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: pressure.h:299
pressure_generic_multiple_write
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.
pressure_pwr_ctrl
void pressure_pwr_ctrl(pressure_t *ctx, pressure_pwr_ctrl_t state)
Device Power Control function.
PRESSURE_ODR_P12HZ_T1HZ
@ PRESSURE_ODR_P12HZ_T1HZ
Definition: pressure.h:238
pressure_get_pressure
float pressure_get_pressure(pressure_t *ctx)
Pressure Get function.
PRESSURE_PWR_UP
@ PRESSURE_PWR_UP
Definition: pressure.h:252
pressure_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pressure.h:297
pressure_cfg_t::i2c_addr
bool i2c_addr
Definition: pressure.h:296
PRESSURE_ODR_P1HZ_T1HZ
@ PRESSURE_ODR_P1HZ_T1HZ
Definition: pressure.h:236
PRESSURE_ODR_ONE_SHOT
@ PRESSURE_ODR_ONE_SHOT
Definition: pressure.h:235
pressure_cfg_t::drv_sel
pressure_drv_select_t drv_sel
Definition: pressure.h:302
pressure_set_odr
void pressure_set_odr(pressure_t *ctx, pressure_odr_t odr)
Output Data Rate Set function.
pressure_init
pressure_err_t pressure_init(pressure_t *ctx, pressure_cfg_t *cfg)
Click Initialization function.
pressure_get_int_pin
uint8_t pressure_get_int_pin(pressure_t *ctx)
INT Pin Get function.
pressure_cfg_t
Click configuration structure definition.
Definition: pressure.h:283
pressure_get_temperature
float pressure_get_temperature(pressure_t *ctx)
Temperature Get function.
pressure_cfg_t::scl
pin_name_t scl
Definition: pressure.h:289
pressure_cfg_t::sda
pin_name_t sda
Definition: pressure.h:290
PRESSURE_DRV_SEL_I2C
@ PRESSURE_DRV_SEL_I2C
Definition: pressure.h:225
pressure_s::chip_select
pin_name_t chip_select
Definition: pressure.h:273
pressure_s::spi
spi_master_t spi
Definition: pressure.h:269
pressure_s::slave_addr
uint8_t slave_addr
Definition: pressure.h:272
pressure_t
struct pressure_s pressure_t
Click context object definition.
PRESSURE_ODR_P7HZ_T1HZ
@ PRESSURE_ODR_P7HZ_T1HZ
Definition: pressure.h:237
pressure_cfg_t::sck
pin_name_t sck
Definition: pressure.h:286
pressure_s::write
pressure_master_transfer_t write
Definition: pressure.h:274
pressure_err_t
pressure_err_t
Click error code definition.
Definition: pressure.h:212
pressure_cfg_t::int_pin
pin_name_t int_pin
Definition: pressure.h:293
pressure_generic_single_write
pressure_err_t pressure_generic_single_write(pressure_t *ctx, uint8_t reg_addr, uint8_t data_in)
Generic Single Write function.
PRESSURE_ODR_P25HZ_T1HZ
@ PRESSURE_ODR_P25HZ_T1HZ
Definition: pressure.h:239
PRESSURE_PWR_DOWN
@ PRESSURE_PWR_DOWN
Definition: pressure.h:251
PRESSURE_ERR_INIT_DRV
@ PRESSURE_ERR_INIT_DRV
Definition: pressure.h:214
pressure_s::cs
digital_out_t cs
Definition: pressure.h:262
PRESSURE_ERR_ADDR
@ PRESSURE_ERR_ADDR
Definition: pressure.h:215
pressure_odr_t
pressure_odr_t
Click output data rate definition.
Definition: pressure.h:234
pressure_cfg_t::sdo
pin_name_t sdo
Definition: pressure.h:287
pressure_block_data_update
void pressure_block_data_update(pressure_t *ctx, pressure_pwr_ctrl_t state)
Data Update Block function.