pressure20  2.0.0.0
pressure20.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 PRESSURE20_H
29 #define PRESSURE20_H
30 
31 #ifdef __cplusplus
32 extern "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 #include "drv_spi_master.h"
53 #include "spi_specifics.h"
54 
75 #define PRESSURE20_REG_TRIM1_MSB 0x05
76 #define PRESSURE20_REG_TRIM2_LSB 0x06
77 #define PRESSURE20_REG_TRIM2_MSB 0x07
78 #define PRESSURE20_REG_DEVICE_ID 0x0C
79 #define PRESSURE20_REG_IO_DRIVE_STRENGTH 0x0D
80 #define PRESSURE20_REG_OTP_CONFIG1 0xAC
81 #define PRESSURE20_REG_OTP_MR_LSB 0xAD
82 #define PRESSURE20_REG_OTP_MR_MSB 0xAE
83 #define PRESSURE20_REG_OTP_MRA_LSB 0xAF
84 #define PRESSURE20_REG_OTP_MRA_MSB 0xB0
85 #define PRESSURE20_REG_OTP_MRB_LSB 0xB1
86 #define PRESSURE20_REG_OTP_MRB_MSB 0xB2
87 #define PRESSURE20_REG_OTP_ADDRESS_REG 0xB5
88 #define PRESSURE20_REG_OTP_COMMAND_REG 0xB6
89 #define PRESSURE20_REG_OTP_RDATA 0xB8
90 #define PRESSURE20_REG_OTP_STATUS 0xB9
91 #define PRESSURE20_REG_OTP_DBG2 0xBC
92 #define PRESSURE20_REG_MASTER_LOCK 0xBE
93 #define PRESSURE20_REG_OTP_STATUS2 0xBF
94 #define PRESSURE20_REG_MODE_SELECT 0xC0
95 #define PRESSURE20_REG_INTERRUPT_STATUS 0xC1
96 #define PRESSURE20_REG_INTERRUPT_MASK 0xC2
97 #define PRESSURE20_REG_FIFO_CONFIG 0xC3
98 #define PRESSURE20_REG_FIFO_FILL 0xC4
99 #define PRESSURE20_REG_SPI_MODE 0xC5
100 #define PRESSURE20_REG_PRESS_ABS_LSB 0xC7
101 #define PRESSURE20_REG_PRESS_ABS_MSB 0xC8
102 #define PRESSURE20_REG_PRESS_DELTA_LSB 0xC9
103 #define PRESSURE20_REG_PRESS_DELTA_MSB 0xCA
104 #define PRESSURE20_REG_DEVICE_STATUS 0xCD
105 #define PRESSURE20_REG_I3C_INFO 0xCE
106 #define PRESSURE20_REG_VERSION 0xD3
107 #define PRESSURE20_REG_DUMMY 0xEE
108 #define PRESSURE20_REG_PRESS_DATA_0 0xFA
109 #define PRESSURE20_REG_PRESS_DATA_1 0xFB
110 #define PRESSURE20_REG_PRESS_DATA_2 0xFC
111 #define PRESSURE20_REG_TEMP_DATA_0 0xFD
112 #define PRESSURE20_REG_TEMP_DATA_1 0xFE
113 #define PRESSURE20_REG_TEMP_DATA_2 0xFF
114  // pressure20_reg
116 
131 #define PRESSURE20_TRIM1_MSB_PEFE_OFFSET_MASK 0x3F
132 #define PRESSURE20_TRIM2_LSB_HFOSC_MASK 0x7F
133 #define PRESSURE20_TRIM2_MSB_PEFE_GAIN_MASK 0x70
134 #define PRESSURE20_TRIM2_MSB_BG_PTAT_MASK 0x0F
135 
140 #define PRESSURE20_OTP_ADDRESS_OFFSET 0xF8
141 #define PRESSURE20_OTP_ADDRESS_GAIN 0xF9
142 #define PRESSURE20_OTP_ADDRESS_HFOSC 0xFA
143 #define PRESSURE20_OTP_COMMAND_READ_ACTION 0x10
144 
149 #define PRESSURE20_OTP_MRA_LSB 0x04
150 #define PRESSURE20_OTP_MRA_MSB 0x04
151 #define PRESSURE20_OTP_MRB_LSB 0x21
152 #define PRESSURE20_OTP_MRB_MSB 0x20
153 #define PRESSURE20_OTP_MR_LSB 0x10
154 #define PRESSURE20_OTP_MR_MSB 0x80
155 
160 #define PRESSURE20_OTP_WRITE_SWITCH 0x02
161 #define PRESSURE20_OTP_ENABLE 0x01
162 #define PRESSURE20_OTP_DISABLE 0x00
163 
168 #define PRESSURE20_OTP_RESET_SET 0x80
169 #define PRESSURE20_OTP_RESET_CLEAR 0x00
170 
175 #define PRESSURE20_BUSY 0x01
176 
181 #define PRESSURE20_BOOT_UP_STATUS 0x01
182 
187 #define PRESSURE20_MASTER_LOCK 0x00
188 #define PRESSURE20_MASTER_UNLOCK 0x1F
189 
194 #define PRESSURE20_MEAS_CONFIG_MODE0_ODR_25HZ 0x00
195 #define PRESSURE20_MEAS_CONFIG_MODE1_ODR_120HZ 0x20
196 #define PRESSURE20_MEAS_CONFIG_MODE2_ODR_40HZ 0x40
197 #define PRESSURE20_MEAS_CONFIG_MODE3_ODR_2HZ 0x60
198 #define PRESSURE20_MEAS_CONFIG_MODE4 0x80
199 #define PRESSURE20_FORCED_MEAS_TRIGGER 0x10
200 #define PRESSURE20_MEAS_MODE_TRIGGER 0x00
201 #define PRESSURE20_MEAS_MODE_CONTINUOUS 0x08
202 #define PRESSURE20_POWER_MODE_NORMAL 0x00
203 #define PRESSURE20_POWER_MODE_ACTIVE 0x04
204 #define PRESSURE20_FIFO_READOUT_MODE_PRESS_1ST 0x00
205 #define PRESSURE20_FIFO_READOUT_MODE_TEMP_ONLY 0x01
206 #define PRESSURE20_FIFO_READOUT_MODE_TEMP_1ST 0x02
207 #define PRESSURE20_FIFO_READOUT_MODE_PRESS_ONLY 0x03
208 
213 #define PRESSURE20_MODE_SYNC_STATUS 0x01
214 
219 #define PRESSURE20_FIFO_FLUSH 0x80
220 #define PRESSURE20_FIFO_EMPTY 0x40
221 #define PRESSURE20_FIFO_FULL 0x20
222 #define PRESSURE20_FIFO_LEVEL_EMPTY 0x00
223 #define PRESSURE20_FIFO_LEVEL_1 0x01
224 #define PRESSURE20_FIFO_LEVEL_2 0x02
225 #define PRESSURE20_FIFO_LEVEL_3 0x03
226 #define PRESSURE20_FIFO_LEVEL_4 0x04
227 #define PRESSURE20_FIFO_LEVEL_5 0x05
228 #define PRESSURE20_FIFO_LEVEL_6 0x06
229 #define PRESSURE20_FIFO_LEVEL_7 0x07
230 #define PRESSURE20_FIFO_LEVEL_8 0x08
231 #define PRESSURE20_FIFO_LEVEL_9 0x09
232 #define PRESSURE20_FIFO_LEVEL_10 0x0A
233 #define PRESSURE20_FIFO_LEVEL_11 0x0B
234 #define PRESSURE20_FIFO_LEVEL_12 0x0C
235 #define PRESSURE20_FIFO_LEVEL_13 0x0D
236 #define PRESSURE20_FIFO_LEVEL_14 0x0E
237 #define PRESSURE20_FIFO_LEVEL_15 0x0F
238 #define PRESSURE20_FIFO_LEVEL_FULL 0x10
239 
244 #define PRESSURE20_INT_STAT_PRESS_DELTA 0x40
245 #define PRESSURE20_INT_STAT_PRESS_ABS 0x20
246 #define PRESSURE20_INT_STAT_FIFO_WMK_LOW 0x08
247 #define PRESSURE20_INT_STAT_FIFO_WMK_HIGH 0x04
248 #define PRESSURE20_INT_STAT_FIFO_UNDERFLOW 0x02
249 #define PRESSURE20_INT_STAT_FIFO_OVERFLOW 0x01
250 
255 #define PRESSURE20_INT_MASK_RESERVED 0x80
256 #define PRESSURE20_INT_MASK_PRESS_DELTA 0x40
257 #define PRESSURE20_INT_MASK_PRESS_ABS 0x20
258 #define PRESSURE20_INT_MASK_FIFO_WMK_LOW 0x08
259 #define PRESSURE20_INT_MASK_FIFO_WMK_HIGH 0x04
260 #define PRESSURE20_INT_MASK_FIFO_UNDERFLOW 0x02
261 #define PRESSURE20_INT_MASK_FIFO_OVERFLOW 0x01
262 #define PRESSURE20_INT_MASK_ALL 0xFF
263 
268 #define PRESSURE20_DEVICE_ID 0x63
269 
274 #define PRESSURE20_PRESSURE_RES_RAW 0x020000ul
275 #define PRESSURE20_PRESSURE_RES_MBAR 400
276 #define PRESSURE20_PRESSURE_OFFSET_MBAR 700
277 #define PRESSURE20_TEMPERATURE_RES_RAW 0x040000ul
278 #define PRESSURE20_TEMPERATURE_RES_C 65
279 #define PRESSURE20_TEMPERATURE_OFFSET_C 25
280 
285 #define PRESSURE20_SPI_READ_REG 0x3C
286 #define PRESSURE20_SPI_WRITE_REG 0x33
287 
293 #define PRESSURE20_DEVICE_ADDRESS_0 0x63
294 #define PRESSURE20_DEVICE_ADDRESS_1 0x64
295 
304 #define PRESSURE20_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
305 #define PRESSURE20_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
306  // pressure20_set
308 
323 #define PRESSURE20_MAP_MIKROBUS( cfg, mikrobus ) \
324  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
325  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
326  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
327  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
328  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
329  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
330  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
331  // pressure20_map // pressure20
334 
339 typedef enum
340 {
345 
350 typedef err_t ( *pressure20_master_io_t )( struct pressure20_s*, uint8_t, uint8_t*, uint8_t );
356 typedef struct pressure20_s
357 {
358  digital_in_t int_pin;
360  i2c_master_t i2c;
361  spi_master_t spi;
363  uint8_t slave_address;
364  pin_name_t chip_select;
371 
376 typedef struct
377 {
378  pin_name_t scl;
379  pin_name_t sda;
380  pin_name_t miso;
381  pin_name_t mosi;
382  pin_name_t sck;
383  pin_name_t cs;
384  pin_name_t int_pin;
386  uint32_t i2c_speed;
387  uint8_t i2c_address;
389  uint32_t spi_speed;
390  spi_master_mode_t spi_mode;
391  spi_master_chip_select_polarity_t cs_polarity;
396 
401 typedef enum
402 {
404  PRESSURE20_ERROR = -1
405 
407 
424 
440 
455 
469 
484 err_t pressure20_generic_write ( pressure20_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
485 
500 err_t pressure20_generic_read ( pressure20_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
501 
514 err_t pressure20_write_register ( pressure20_t *ctx, uint8_t reg, uint8_t data_in );
515 
528 err_t pressure20_read_register ( pressure20_t *ctx, uint8_t reg, uint8_t *data_out );
529 
541 
553 err_t pressure20_write_mode_select ( pressure20_t *ctx, uint8_t mode_select );
554 
567 err_t pressure20_read_otp_data ( pressure20_t *ctx, uint8_t otp_address, uint8_t *data_out );
568 
581 err_t pressure20_read_data ( pressure20_t *ctx, float *pressure, float *temperature );
582 
592 
604 
605 #ifdef __cplusplus
606 }
607 #endif
608 #endif // PRESSURE20_H
609  // pressure20
611 
612 // ------------------------------------------------------------------------ END
pressure20_master_io_t
err_t(* pressure20_master_io_t)(struct pressure20_s *, uint8_t, uint8_t *, uint8_t)
Pressure 20 Click driver interface.
Definition: pressure20.h:350
pressure20_generic_write
err_t pressure20_generic_write(pressure20_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Pressure 20 data writing function.
pressure20_cfg_t::sck
pin_name_t sck
Definition: pressure20.h:382
pressure20_s::int_pin
digital_in_t int_pin
Definition: pressure20.h:358
pressure20_drv_t
pressure20_drv_t
Pressure 20 Click driver selector.
Definition: pressure20.h:340
pressure20_read_otp_data
err_t pressure20_read_otp_data(pressure20_t *ctx, uint8_t otp_address, uint8_t *data_out)
Pressure 20 read otp data function.
pressure20_read_data
err_t pressure20_read_data(pressure20_t *ctx, float *pressure, float *temperature)
Pressure 20 read data function.
pressure20_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: pressure20.h:391
pressure20_s
Pressure 20 Click context object.
Definition: pressure20.h:357
pressure20_clear_interrupts
err_t pressure20_clear_interrupts(pressure20_t *ctx)
Pressure 20 clear interrupts function.
PRESSURE20_DRV_SEL_SPI
@ PRESSURE20_DRV_SEL_SPI
Definition: pressure20.h:341
pressure20_check_communication
err_t pressure20_check_communication(pressure20_t *ctx)
Pressure 20 check communication function.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
pressure20_cfg_t::int_pin
pin_name_t int_pin
Definition: pressure20.h:384
pressure20_init
err_t pressure20_init(pressure20_t *ctx, pressure20_cfg_t *cfg)
Pressure 20 initialization function.
pressure20_cfg_t::i2c_address
uint8_t i2c_address
Definition: pressure20.h:387
pressure20_cfg_t::sda
pin_name_t sda
Definition: pressure20.h:379
pressure20_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pressure20.h:386
pressure20_cfg_t
Pressure 20 Click configuration object.
Definition: pressure20.h:377
pressure20_s::drv_sel
pressure20_drv_t drv_sel
Definition: pressure20.h:365
PRESSURE20_ERROR
@ PRESSURE20_ERROR
Definition: pressure20.h:404
pressure20_s::slave_address
uint8_t slave_address
Definition: pressure20.h:363
pressure20_drv_interface_selection
void pressure20_drv_interface_selection(pressure20_cfg_t *cfg, pressure20_drv_t drv_sel)
Pressure 20 driver interface setup function.
pressure20_s::spi
spi_master_t spi
Definition: pressure20.h:361
PRESSURE20_DRV_SEL_I2C
@ PRESSURE20_DRV_SEL_I2C
Definition: pressure20.h:342
PRESSURE20_OK
@ PRESSURE20_OK
Definition: pressure20.h:403
pressure20_cfg_t::scl
pin_name_t scl
Definition: pressure20.h:378
pressure20_t
struct pressure20_s pressure20_t
Pressure 20 Click context object.
pressure20_s::write_f
pressure20_master_io_t write_f
Definition: pressure20.h:367
pressure20_generic_read
err_t pressure20_generic_read(pressure20_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Pressure 20 data reading function.
pressure20_cfg_t::drv_sel
pressure20_drv_t drv_sel
Definition: pressure20.h:393
pressure20_s::i2c
i2c_master_t i2c
Definition: pressure20.h:360
pressure20_s::read_f
pressure20_master_io_t read_f
Definition: pressure20.h:368
pressure20_get_int_pin
uint8_t pressure20_get_int_pin(pressure20_t *ctx)
Pressure 20 get int pin function.
pressure20_write_mode_select
err_t pressure20_write_mode_select(pressure20_t *ctx, uint8_t mode_select)
Pressure 20 write mode select function.
pressure20_cfg_t::spi_speed
uint32_t spi_speed
Definition: pressure20.h:389
pressure20_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: pressure20.h:390
pressure20_cfg_t::miso
pin_name_t miso
Definition: pressure20.h:380
pressure20_cfg_t::cs
pin_name_t cs
Definition: pressure20.h:383
pressure20_cfg_t::mosi
pin_name_t mosi
Definition: pressure20.h:381
pressure20_s::chip_select
pin_name_t chip_select
Definition: pressure20.h:364
pressure20_read_register
err_t pressure20_read_register(pressure20_t *ctx, uint8_t reg, uint8_t *data_out)
Pressure 20 read register function.
pressure20_write_register
err_t pressure20_write_register(pressure20_t *ctx, uint8_t reg, uint8_t data_in)
Pressure 20 write register function.
pressure20_cfg_setup
void pressure20_cfg_setup(pressure20_cfg_t *cfg)
Pressure 20 configuration object setup function.
pressure20_return_value_t
pressure20_return_value_t
Pressure 20 Click return value data.
Definition: pressure20.h:402
pressure20_default_cfg
err_t pressure20_default_cfg(pressure20_t *ctx)
Pressure 20 default configuration function.