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 "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_i2c_master.h"
51 #include "drv_spi_master.h"
52 
53 // -------------------------------------------------------------- PUBLIC MACROS
68 #define PRESSURE_REG_REF_P_XLB 0x8 // Reference pressure (LSB)
69 #define PRESSURE_REG_REF_P_LSB 0x9 // Reference pressure (middle)
70 #define PRESSURE_REG_REF_P_MSB 0xA // Reference pressure (MSB)
71 #define PRESSURE_REG_DEVICE_ID 0xF // Device identification
72 #define PRESSURE_REG_RES_CFG 0x10 // Pressure resolution
73 #define PRESSURE_REG_CTRL_REG1 0x20 // Control register 1
74 #define PRESSURE_REG_CTRL_REG2 0x21 // Control register 2
75 #define PRESSURE_REG_CTRL_REG3 0x22 // Control register 3
76 #define PRESSURE_REG_INT_CFG 0x23 // Interrupt configuration
77 #define PRESSURE_REG_INT_SOURCE 0x24 // Interrupt source
78 #define PRESSURE_REG_THSH_P_LSB 0x25 // Threshold pressure (LSB)
79 #define PRESSURE_REG_THSH_P_MSB 0x26 // Threshold pressure (MSB)
80 #define PRESSURE_REG_STATUS 0x27 // Status register
81 #define PRESSURE_REG_PRESS_OUT_XLB 0x28 // Pressure data (LSB)
82 #define PRESSURE_REG_PRESS_OUT_LSB 0x29 // Pressure data (middle)
83 #define PRESSURE_REG_PRESS_OUT_MSB 0x2A // Pressure data (MSB)
84 #define PRESSURE_REG_TEMP_OUT_LSB 0x2B // Temperature data (LSB)
85 #define PRESSURE_REG_TEMP_OUT_MSB 0x2C // Temperature data (MSB)
86 #define PRESSURE_REG_AMP_CTRL 0x30 // Analog front and control
87 
93 #define PRESSURE_WHO_AM_I 0xBB
94 
105 #define PRESSURE_SET_RES_AVG_1 0x0
106 #define PRESSURE_SET_RES_AVG_2 0x1
107 #define PRESSURE_SET_RES_AVG_4 0x2
108 #define PRESSURE_SET_RES_AVG_8 0x3
109 #define PRESSURE_SET_RES_AVG_16 0x4
110 #define PRESSURE_SET_RES_AVG_32 0x5
111 #define PRESSURE_SET_RES_AVG_64 0x6
112 #define PRESSURE_SET_RES_AVG_128 0x7
113 #define PRESSURE_SET_RES_AVG_256 0x8
114 #define PRESSURE_SET_RES_AVG_384 0x9
115 #define PRESSURE_SET_RES_AVG_512 0xA
116 
122 #define PRESSURE_SET_PWR_UP_DEV 0x80
123 #define PRESSURE_SET_PWR_UP_INT 0x8
124 #define PRESSURE_SET_BLOCK_DATA_UPDATE 0x4
125 #define PRESSURE_SET_PWR_UP_DELTA_PRESS 0x2
126 #define PRESSURE_SET_SPI_3_WIRE 0x1
127 
133 #define PRESSURE_SET_REBOOT_MEM_CONTENT 0x80
134 #define PRESSURE_SET_SW_RESET 0x4
135 #define PRESSURE_SET_AUTOZERO_EN 0x2
136 #define PRESSURE_SET_ONESHOT_EN 0x1
137 #define PRESSURE_SET_NORMAL_MODE 0x0
138 
144 #define PRESSURE_SET_INT_ACT_LOW 0x80
145 #define PRESSURE_SET_INT_OPEN_DRAIN 0x40
146 #define PRESSURE_SET_INT_GND 0x0
147 #define PRESSURE_SET_INT_PRESS_HIGH 0x1
148 #define PRESSURE_SET_INT_PRESS_LOW 0x2
149 #define PRESSURE_SET_INT_P_LOW_OR_HIGH 0x3
150 #define PRESSURE_SET_INT_DATA_RDY 0x4
151 #define PRESSURE_SET_INT_TRI_STATE 0x7
152  // End settings group
155 
165 #define PRESSURE_FLAG_MASK_P_DATA_OR 0x20
166 #define PRESSURE_FLAG_MASK_T_DATA_OR 0x10
167 #define PRESSURE_FLAG_MASK_P_DATA_RDY 0x2
168 #define PRESSURE_FLAG_MASK_T_DATA_RDY 0x1
169 
175 #define PRESSURE_FLAG_MASK_INT_ACT 0x4
176 #define PRESSURE_FLAG_MASK_DIFF_P_LOW 0x2
177 #define PRESSURE_FLAG_MASK_DIFF_P_HIGH 0x1
178  // End status group
181 
186 #define PRESSURE_DATA_NUMBER_MIN 1
187 #define PRESSURE_DATA_NUMBER_MAX 49
188  // End registers group
191 
196 #define PRESSURE_MAP_MIKROBUS( cfg, mikrobus ) \
197  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
198  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
199  cfg.sdo = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
200  cfg.sdi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
201  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT ); \
202  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
203  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA )
204  // End macros group
207 // --------------------------------------------------------------- PUBLIC TYPES
216 typedef void ( *pressure_master_transfer_t )( struct pressure_s*, uint8_t, uint8_t*, uint8_t );
217 
221 typedef enum
222 {
223  PRESSURE_OK = 0x0,
227 
229 
233 typedef enum
234 {
237 
239 
243 typedef enum
244 {
253 
255 
259 typedef enum
260 {
263 
265 
269 typedef struct pressure_s
270 {
271  // Output pin
272  digital_out_t cs;
273 
274  // Interrupt pin.
275  digital_in_t int_pin;
276 
277  // Modules.
278  i2c_master_t i2c;
279  spi_master_t spi;
280 
281  // Context variables.
282  uint8_t slave_addr;
283  pin_name_t chip_select;
286 
288 
292 typedef struct
293 {
294  // Communication gpio pins.
295  pin_name_t cs;
296  pin_name_t sck;
297  pin_name_t sdo;
298  pin_name_t sdi;
299  pin_name_t scl;
300  pin_name_t sda;
301 
302  // Additional gpio pins.
303  pin_name_t int_pin;
304 
305  // Configuration variables.
306  bool i2c_addr;
307  uint32_t i2c_speed;
308  uint32_t spi_speed;
309  spi_master_mode_t spi_mode;
310  spi_master_chip_select_polarity_t cs_polarity;
311 
313 
315  // End types group
317 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
323 #ifdef __cplusplus
324 extern "C"{
325 #endif
326 
336 void
338 
355 
364 void
366 
381  uint8_t data_in );
382 
400  uint8_t *data_in, uint8_t n_data );
401 
419  uint8_t *data_out, uint8_t n_data );
420 
430 uint8_t
432 
441 void
443 
452 void
454 
463 void
465 
476 void
478 
488 void
490 
499 void
501 
510 void
512 
522 float
524 
535 float
537 
549 uint8_t
550 pressure_get_status( pressure_t *ctx, uint8_t bit_mask );
551 
563 uint8_t
565 
566 #ifdef __cplusplus
567 }
568 #endif
569 #endif // _PRESSURE_H_
570  // End public_function group
573 
574 // ------------------------------------------------------------------------ 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:298
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:310
PRESSURE_ODR_P7HZ_T7HZ
@ PRESSURE_ODR_P7HZ_T7HZ
Definition: pressure.h:250
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:216
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:252
pressure_sw_reset
void pressure_sw_reset(pressure_t *ctx)
Software Reset function.
pressure_s::i2c
i2c_master_t i2c
Definition: pressure.h:278
PRESSURE_ODR_P12HZ_T12HZ
@ PRESSURE_ODR_P12HZ_T12HZ
Definition: pressure.h:251
pressure_cfg_setup
void pressure_cfg_setup(pressure_cfg_t *cfg)
Configuration Object Setup function.
pressure_s
Click context object definition.
Definition: pressure.h:270
PRESSURE_DRV_SEL_SPI
@ PRESSURE_DRV_SEL_SPI
Definition: pressure.h:236
pressure_s::int_pin
digital_in_t int_pin
Definition: pressure.h:275
PRESSURE_OK
@ PRESSURE_OK
Definition: pressure.h:223
pressure_cfg_t::spi_speed
uint32_t spi_speed
Definition: pressure.h:308
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:226
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:260
pressure_cfg_t::cs
pin_name_t cs
Definition: pressure.h:295
pressure_s::read
pressure_master_transfer_t read
Definition: pressure.h:285
pressure_drv_select_t
pressure_drv_select_t
Click driver selector definition.
Definition: pressure.h:234
pressure_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: pressure.h:309
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:248
pressure_get_pressure
float pressure_get_pressure(pressure_t *ctx)
Pressure Get function.
PRESSURE_PWR_UP
@ PRESSURE_PWR_UP
Definition: pressure.h:262
pressure_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pressure.h:307
pressure_cfg_t::i2c_addr
bool i2c_addr
Definition: pressure.h:306
PRESSURE_ODR_P1HZ_T1HZ
@ PRESSURE_ODR_P1HZ_T1HZ
Definition: pressure.h:246
PRESSURE_ODR_ONE_SHOT
@ PRESSURE_ODR_ONE_SHOT
Definition: pressure.h:245
pressure_cfg_t::drv_sel
pressure_drv_select_t drv_sel
Definition: pressure.h:312
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:293
pressure_get_temperature
float pressure_get_temperature(pressure_t *ctx)
Temperature Get function.
pressure_cfg_t::scl
pin_name_t scl
Definition: pressure.h:299
pressure_cfg_t::sda
pin_name_t sda
Definition: pressure.h:300
PRESSURE_DRV_SEL_I2C
@ PRESSURE_DRV_SEL_I2C
Definition: pressure.h:235
pressure_s::chip_select
pin_name_t chip_select
Definition: pressure.h:283
pressure_s::spi
spi_master_t spi
Definition: pressure.h:279
pressure_s::slave_addr
uint8_t slave_addr
Definition: pressure.h:282
pressure_t
struct pressure_s pressure_t
Click context object definition.
PRESSURE_ODR_P7HZ_T1HZ
@ PRESSURE_ODR_P7HZ_T1HZ
Definition: pressure.h:247
pressure_cfg_t::sck
pin_name_t sck
Definition: pressure.h:296
pressure_s::write
pressure_master_transfer_t write
Definition: pressure.h:284
pressure_err_t
pressure_err_t
Click error code definition.
Definition: pressure.h:222
pressure_cfg_t::int_pin
pin_name_t int_pin
Definition: pressure.h:303
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:249
PRESSURE_PWR_DOWN
@ PRESSURE_PWR_DOWN
Definition: pressure.h:261
PRESSURE_ERR_INIT_DRV
@ PRESSURE_ERR_INIT_DRV
Definition: pressure.h:224
pressure_s::cs
digital_out_t cs
Definition: pressure.h:272
PRESSURE_ERR_ADDR
@ PRESSURE_ERR_ADDR
Definition: pressure.h:225
pressure_odr_t
pressure_odr_t
Click output data rate definition.
Definition: pressure.h:244
pressure_cfg_t::sdo
pin_name_t sdo
Definition: pressure.h:297
pressure_block_data_update
void pressure_block_data_update(pressure_t *ctx, pressure_pwr_ctrl_t state)
Data Update Block function.