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 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 #include "drv_spi_master.h"
49 #include "spi_specifics.h"
50 
71 #define PRESSURE20_REG_TRIM1_MSB 0x05
72 #define PRESSURE20_REG_TRIM2_LSB 0x06
73 #define PRESSURE20_REG_TRIM2_MSB 0x07
74 #define PRESSURE20_REG_DEVICE_ID 0x0C
75 #define PRESSURE20_REG_IO_DRIVE_STRENGTH 0x0D
76 #define PRESSURE20_REG_OTP_CONFIG1 0xAC
77 #define PRESSURE20_REG_OTP_MR_LSB 0xAD
78 #define PRESSURE20_REG_OTP_MR_MSB 0xAE
79 #define PRESSURE20_REG_OTP_MRA_LSB 0xAF
80 #define PRESSURE20_REG_OTP_MRA_MSB 0xB0
81 #define PRESSURE20_REG_OTP_MRB_LSB 0xB1
82 #define PRESSURE20_REG_OTP_MRB_MSB 0xB2
83 #define PRESSURE20_REG_OTP_ADDRESS_REG 0xB5
84 #define PRESSURE20_REG_OTP_COMMAND_REG 0xB6
85 #define PRESSURE20_REG_OTP_RDATA 0xB8
86 #define PRESSURE20_REG_OTP_STATUS 0xB9
87 #define PRESSURE20_REG_OTP_DBG2 0xBC
88 #define PRESSURE20_REG_MASTER_LOCK 0xBE
89 #define PRESSURE20_REG_OTP_STATUS2 0xBF
90 #define PRESSURE20_REG_MODE_SELECT 0xC0
91 #define PRESSURE20_REG_INTERRUPT_STATUS 0xC1
92 #define PRESSURE20_REG_INTERRUPT_MASK 0xC2
93 #define PRESSURE20_REG_FIFO_CONFIG 0xC3
94 #define PRESSURE20_REG_FIFO_FILL 0xC4
95 #define PRESSURE20_REG_SPI_MODE 0xC5
96 #define PRESSURE20_REG_PRESS_ABS_LSB 0xC7
97 #define PRESSURE20_REG_PRESS_ABS_MSB 0xC8
98 #define PRESSURE20_REG_PRESS_DELTA_LSB 0xC9
99 #define PRESSURE20_REG_PRESS_DELTA_MSB 0xCA
100 #define PRESSURE20_REG_DEVICE_STATUS 0xCD
101 #define PRESSURE20_REG_I3C_INFO 0xCE
102 #define PRESSURE20_REG_VERSION 0xD3
103 #define PRESSURE20_REG_DUMMY 0xEE
104 #define PRESSURE20_REG_PRESS_DATA_0 0xFA
105 #define PRESSURE20_REG_PRESS_DATA_1 0xFB
106 #define PRESSURE20_REG_PRESS_DATA_2 0xFC
107 #define PRESSURE20_REG_TEMP_DATA_0 0xFD
108 #define PRESSURE20_REG_TEMP_DATA_1 0xFE
109 #define PRESSURE20_REG_TEMP_DATA_2 0xFF
110  // pressure20_reg
112 
127 #define PRESSURE20_TRIM1_MSB_PEFE_OFFSET_MASK 0x3F
128 #define PRESSURE20_TRIM2_LSB_HFOSC_MASK 0x7F
129 #define PRESSURE20_TRIM2_MSB_PEFE_GAIN_MASK 0x70
130 #define PRESSURE20_TRIM2_MSB_BG_PTAT_MASK 0x0F
131 
136 #define PRESSURE20_OTP_ADDRESS_OFFSET 0xF8
137 #define PRESSURE20_OTP_ADDRESS_GAIN 0xF9
138 #define PRESSURE20_OTP_ADDRESS_HFOSC 0xFA
139 #define PRESSURE20_OTP_COMMAND_READ_ACTION 0x10
140 
145 #define PRESSURE20_OTP_MRA_LSB 0x04
146 #define PRESSURE20_OTP_MRA_MSB 0x04
147 #define PRESSURE20_OTP_MRB_LSB 0x21
148 #define PRESSURE20_OTP_MRB_MSB 0x20
149 #define PRESSURE20_OTP_MR_LSB 0x10
150 #define PRESSURE20_OTP_MR_MSB 0x80
151 
156 #define PRESSURE20_OTP_WRITE_SWITCH 0x02
157 #define PRESSURE20_OTP_ENABLE 0x01
158 #define PRESSURE20_OTP_DISABLE 0x00
159 
164 #define PRESSURE20_OTP_RESET_SET 0x80
165 #define PRESSURE20_OTP_RESET_CLEAR 0x00
166 
171 #define PRESSURE20_BUSY 0x01
172 
177 #define PRESSURE20_BOOT_UP_STATUS 0x01
178 
183 #define PRESSURE20_MASTER_LOCK 0x00
184 #define PRESSURE20_MASTER_UNLOCK 0x1F
185 
190 #define PRESSURE20_MEAS_CONFIG_MODE0_ODR_25HZ 0x00
191 #define PRESSURE20_MEAS_CONFIG_MODE1_ODR_120HZ 0x20
192 #define PRESSURE20_MEAS_CONFIG_MODE2_ODR_40HZ 0x40
193 #define PRESSURE20_MEAS_CONFIG_MODE3_ODR_2HZ 0x60
194 #define PRESSURE20_MEAS_CONFIG_MODE4 0x80
195 #define PRESSURE20_FORCED_MEAS_TRIGGER 0x10
196 #define PRESSURE20_MEAS_MODE_TRIGGER 0x00
197 #define PRESSURE20_MEAS_MODE_CONTINUOUS 0x08
198 #define PRESSURE20_POWER_MODE_NORMAL 0x00
199 #define PRESSURE20_POWER_MODE_ACTIVE 0x04
200 #define PRESSURE20_FIFO_READOUT_MODE_PRESS_1ST 0x00
201 #define PRESSURE20_FIFO_READOUT_MODE_TEMP_ONLY 0x01
202 #define PRESSURE20_FIFO_READOUT_MODE_TEMP_1ST 0x02
203 #define PRESSURE20_FIFO_READOUT_MODE_PRESS_ONLY 0x03
204 
209 #define PRESSURE20_MODE_SYNC_STATUS 0x01
210 
215 #define PRESSURE20_FIFO_FLUSH 0x80
216 #define PRESSURE20_FIFO_EMPTY 0x40
217 #define PRESSURE20_FIFO_FULL 0x20
218 #define PRESSURE20_FIFO_LEVEL_EMPTY 0x00
219 #define PRESSURE20_FIFO_LEVEL_1 0x01
220 #define PRESSURE20_FIFO_LEVEL_2 0x02
221 #define PRESSURE20_FIFO_LEVEL_3 0x03
222 #define PRESSURE20_FIFO_LEVEL_4 0x04
223 #define PRESSURE20_FIFO_LEVEL_5 0x05
224 #define PRESSURE20_FIFO_LEVEL_6 0x06
225 #define PRESSURE20_FIFO_LEVEL_7 0x07
226 #define PRESSURE20_FIFO_LEVEL_8 0x08
227 #define PRESSURE20_FIFO_LEVEL_9 0x09
228 #define PRESSURE20_FIFO_LEVEL_10 0x0A
229 #define PRESSURE20_FIFO_LEVEL_11 0x0B
230 #define PRESSURE20_FIFO_LEVEL_12 0x0C
231 #define PRESSURE20_FIFO_LEVEL_13 0x0D
232 #define PRESSURE20_FIFO_LEVEL_14 0x0E
233 #define PRESSURE20_FIFO_LEVEL_15 0x0F
234 #define PRESSURE20_FIFO_LEVEL_FULL 0x10
235 
240 #define PRESSURE20_INT_STAT_PRESS_DELTA 0x40
241 #define PRESSURE20_INT_STAT_PRESS_ABS 0x20
242 #define PRESSURE20_INT_STAT_FIFO_WMK_LOW 0x08
243 #define PRESSURE20_INT_STAT_FIFO_WMK_HIGH 0x04
244 #define PRESSURE20_INT_STAT_FIFO_UNDERFLOW 0x02
245 #define PRESSURE20_INT_STAT_FIFO_OVERFLOW 0x01
246 
251 #define PRESSURE20_INT_MASK_RESERVED 0x80
252 #define PRESSURE20_INT_MASK_PRESS_DELTA 0x40
253 #define PRESSURE20_INT_MASK_PRESS_ABS 0x20
254 #define PRESSURE20_INT_MASK_FIFO_WMK_LOW 0x08
255 #define PRESSURE20_INT_MASK_FIFO_WMK_HIGH 0x04
256 #define PRESSURE20_INT_MASK_FIFO_UNDERFLOW 0x02
257 #define PRESSURE20_INT_MASK_FIFO_OVERFLOW 0x01
258 #define PRESSURE20_INT_MASK_ALL 0xFF
259 
264 #define PRESSURE20_DEVICE_ID 0x63
265 
270 #define PRESSURE20_PRESSURE_RES_RAW 0x020000ul
271 #define PRESSURE20_PRESSURE_RES_MBAR 400
272 #define PRESSURE20_PRESSURE_OFFSET_MBAR 700
273 #define PRESSURE20_TEMPERATURE_RES_RAW 0x040000ul
274 #define PRESSURE20_TEMPERATURE_RES_C 65
275 #define PRESSURE20_TEMPERATURE_OFFSET_C 25
276 
281 #define PRESSURE20_SPI_READ_REG 0x3C
282 #define PRESSURE20_SPI_WRITE_REG 0x33
283 
289 #define PRESSURE20_DEVICE_ADDRESS_0 0x63
290 #define PRESSURE20_DEVICE_ADDRESS_1 0x64
291 
300 #define PRESSURE20_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
301 #define PRESSURE20_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
302  // pressure20_set
304 
319 #define PRESSURE20_MAP_MIKROBUS( cfg, mikrobus ) \
320  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
321  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
322  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
323  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
324  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
325  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
326  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
327  // pressure20_map // pressure20
330 
335 typedef enum
336 {
341 
346 typedef err_t ( *pressure20_master_io_t )( struct pressure20_s*, uint8_t, uint8_t*, uint8_t );
352 typedef struct pressure20_s
353 {
354  digital_in_t int_pin;
356  i2c_master_t i2c;
357  spi_master_t spi;
359  uint8_t slave_address;
360  pin_name_t chip_select;
367 
372 typedef struct
373 {
374  pin_name_t scl;
375  pin_name_t sda;
376  pin_name_t miso;
377  pin_name_t mosi;
378  pin_name_t sck;
379  pin_name_t cs;
380  pin_name_t int_pin;
382  uint32_t i2c_speed;
383  uint8_t i2c_address;
385  uint32_t spi_speed;
386  spi_master_mode_t spi_mode;
387  spi_master_chip_select_polarity_t cs_polarity;
392 
397 typedef enum
398 {
400  PRESSURE20_ERROR = -1
401 
403 
420 
436 
451 
465 
480 err_t pressure20_generic_write ( pressure20_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
481 
496 err_t pressure20_generic_read ( pressure20_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
497 
510 err_t pressure20_write_register ( pressure20_t *ctx, uint8_t reg, uint8_t data_in );
511 
524 err_t pressure20_read_register ( pressure20_t *ctx, uint8_t reg, uint8_t *data_out );
525 
537 
549 err_t pressure20_write_mode_select ( pressure20_t *ctx, uint8_t mode_select );
550 
563 err_t pressure20_read_otp_data ( pressure20_t *ctx, uint8_t otp_address, uint8_t *data_out );
564 
577 err_t pressure20_read_data ( pressure20_t *ctx, float *pressure, float *temperature );
578 
588 
600 
601 #ifdef __cplusplus
602 }
603 #endif
604 #endif // PRESSURE20_H
605  // pressure20
607 
608 // ------------------------------------------------------------------------ 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:346
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:378
pressure20_s::int_pin
digital_in_t int_pin
Definition: pressure20.h:354
pressure20_drv_t
pressure20_drv_t
Pressure 20 Click driver selector.
Definition: pressure20.h:336
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:387
pressure20_s
Pressure 20 Click context object.
Definition: pressure20.h:353
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:337
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:380
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:383
pressure20_cfg_t::sda
pin_name_t sda
Definition: pressure20.h:375
pressure20_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pressure20.h:382
pressure20_cfg_t
Pressure 20 Click configuration object.
Definition: pressure20.h:373
pressure20_s::drv_sel
pressure20_drv_t drv_sel
Definition: pressure20.h:361
PRESSURE20_ERROR
@ PRESSURE20_ERROR
Definition: pressure20.h:400
pressure20_s::slave_address
uint8_t slave_address
Definition: pressure20.h:359
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:357
PRESSURE20_DRV_SEL_I2C
@ PRESSURE20_DRV_SEL_I2C
Definition: pressure20.h:338
PRESSURE20_OK
@ PRESSURE20_OK
Definition: pressure20.h:399
pressure20_cfg_t::scl
pin_name_t scl
Definition: pressure20.h:374
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:363
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:389
pressure20_s::i2c
i2c_master_t i2c
Definition: pressure20.h:356
pressure20_s::read_f
pressure20_master_io_t read_f
Definition: pressure20.h:364
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:385
pressure20_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: pressure20.h:386
pressure20_cfg_t::miso
pin_name_t miso
Definition: pressure20.h:376
pressure20_cfg_t::cs
pin_name_t cs
Definition: pressure20.h:379
pressure20_cfg_t::mosi
pin_name_t mosi
Definition: pressure20.h:377
pressure20_s::chip_select
pin_name_t chip_select
Definition: pressure20.h:360
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:398
pressure20_default_cfg
err_t pressure20_default_cfg(pressure20_t *ctx)
Pressure 20 default configuration function.