piezoaccel225g  2.1.0.0
piezoaccel225g.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 PIEZOACCEL225G_H
29 #define PIEZOACCEL225G_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_spi_master.h"
52 #include "spi_specifics.h"
53 
74 #define PIEZOACCEL225G_FAST_CMD_ADC_START 0x0A
75 #define PIEZOACCEL225G_FAST_CMD_ADC_STANDBY 0x0B
76 #define PIEZOACCEL225G_FAST_CMD_ADC_SHUTDOWN 0x0C
77 #define PIEZOACCEL225G_FAST_CMD_FULL_SHUTDOWN 0x0D
78 #define PIEZOACCEL225G_FAST_CMD_FULL_RESET 0x0E
79  // piezoaccel225g_cmd
81 
96 #define PIEZOACCEL225G_REG_ADCDATA 0x00
97 #define PIEZOACCEL225G_REG_CONFIG0 0x01
98 #define PIEZOACCEL225G_REG_CONFIG1 0x02
99 #define PIEZOACCEL225G_REG_CONFIG2 0x03
100 #define PIEZOACCEL225G_REG_CONFIG3 0x04
101 #define PIEZOACCEL225G_REG_IRQ 0x05
102 #define PIEZOACCEL225G_REG_MUX 0x06
103 #define PIEZOACCEL225G_REG_SCAN 0x07
104 #define PIEZOACCEL225G_REG_TIMER 0x08
105 #define PIEZOACCEL225G_REG_OFFSETCAL 0x09
106 #define PIEZOACCEL225G_REG_GAINCAL 0x0A
107 #define PIEZOACCEL225G_REG_LOCK 0x0D
108 #define PIEZOACCEL225G_REG_CRCCFG 0x0F
109  // piezoaccel225g_reg
111 
126 #define PIEZOACCEL225G_CONFIG0_VREF_SEL_INT_2_4_V 0x80
127 #define PIEZOACCEL225G_CONFIG0_VREF_SEL_EXT 0x00
128 #define PIEZOACCEL225G_CONFIG0_VREF_SEL_MASK 0x80
129 #define PIEZOACCEL225G_CONFIG0_EXIT_PART_SHUTDOWN 0x40
130 #define PIEZOACCEL225G_CONFIG0_CLK_SEL_INT_CLKOUT 0x30
131 #define PIEZOACCEL225G_CONFIG0_CLK_SEL_INT 0x20
132 #define PIEZOACCEL225G_CONFIG0_CLK_SEL_EXT 0x00
133 #define PIEZOACCEL225G_CONFIG0_CLK_SEL_MASK 0x30
134 #define PIEZOACCEL225G_CONFIG0_CS_SEL_15_UA 0x0C
135 #define PIEZOACCEL225G_CONFIG0_CS_SEL_3_7_UA 0x08
136 #define PIEZOACCEL225G_CONFIG0_CS_SEL_0_9_UA 0x04
137 #define PIEZOACCEL225G_CONFIG0_CS_SEL_NO_IN_CURR 0x00
138 #define PIEZOACCEL225G_CONFIG0_CS_SEL_MASK 0x0C
139 #define PIEZOACCEL225G_CONFIG0_ADC_MODE_CONVERSION 0x03
140 #define PIEZOACCEL225G_CONFIG0_ADC_MODE_STANDBY 0x02
141 #define PIEZOACCEL225G_CONFIG0_ADC_MODE_SHUTDOWN 0x00
142 #define PIEZOACCEL225G_CONFIG0_ADC_MODE_MASK 0x03
143 
148 #define PIEZOACCEL225G_CONFIG1_PRE_DIV_8 0xC0
149 #define PIEZOACCEL225G_CONFIG1_PRE_DIV_4 0x80
150 #define PIEZOACCEL225G_CONFIG1_PRE_DIV_2 0x40
151 #define PIEZOACCEL225G_CONFIG1_PRE_DIV_1 0x00
152 #define PIEZOACCEL225G_CONFIG1_PRE_MASK 0xC0
153 #define PIEZOACCEL225G_CONFIG1_OSR_98304 0x3C
154 #define PIEZOACCEL225G_CONFIG1_OSR_81920 0x38
155 #define PIEZOACCEL225G_CONFIG1_OSR_49152 0x34
156 #define PIEZOACCEL225G_CONFIG1_OSR_40960 0x30
157 #define PIEZOACCEL225G_CONFIG1_OSR_24576 0x2C
158 #define PIEZOACCEL225G_CONFIG1_OSR_20480 0x28
159 #define PIEZOACCEL225G_CONFIG1_OSR_16384 0x24
160 #define PIEZOACCEL225G_CONFIG1_OSR_8192 0x20
161 #define PIEZOACCEL225G_CONFIG1_OSR_4096 0x1C
162 #define PIEZOACCEL225G_CONFIG1_OSR_2048 0x18
163 #define PIEZOACCEL225G_CONFIG1_OSR_1024 0x14
164 #define PIEZOACCEL225G_CONFIG1_OSR_512 0x10
165 #define PIEZOACCEL225G_CONFIG1_OSR_256 0x0C
166 #define PIEZOACCEL225G_CONFIG1_OSR_128 0x08
167 #define PIEZOACCEL225G_CONFIG1_OSR_64 0x04
168 #define PIEZOACCEL225G_CONFIG1_OSR_32 0x00
169 #define PIEZOACCEL225G_CONFIG1_OSR_MASK 0x3C
170 
175 #define PIEZOACCEL225G_CONFIG2_BOOST_X2 0xC0
176 #define PIEZOACCEL225G_CONFIG2_BOOST_X1 0x80
177 #define PIEZOACCEL225G_CONFIG2_BOOST_X0_66 0x40
178 #define PIEZOACCEL225G_CONFIG2_BOOST_X0_5 0x00
179 #define PIEZOACCEL225G_CONFIG2_BOOST_MASK 0xC0
180 #define PIEZOACCEL225G_CONFIG2_GAIN_X64 0x38
181 #define PIEZOACCEL225G_CONFIG2_GAIN_X32 0x30
182 #define PIEZOACCEL225G_CONFIG2_GAIN_X16 0x28
183 #define PIEZOACCEL225G_CONFIG2_GAIN_X8 0x20
184 #define PIEZOACCEL225G_CONFIG2_GAIN_X4 0x18
185 #define PIEZOACCEL225G_CONFIG2_GAIN_X2 0x10
186 #define PIEZOACCEL225G_CONFIG2_GAIN_X1 0x08
187 #define PIEZOACCEL225G_CONFIG2_GAIN_X1_PER_3 0x00
188 #define PIEZOACCEL225G_CONFIG2_GAIN_MASK 0x38
189 #define PIEZOACCEL225G_CONFIG2_AZ_MUX_EN 0x04
190 #define PIEZOACCEL225G_CONFIG2_AZ_REF_EN 0x02
191 #define PIEZOACCEL225G_CONFIG2_RESERVED 0x01
192 
197 #define PIEZOACCEL225G_CONFIG3_CONV_MODE_CONT 0xC0
198 #define PIEZOACCEL225G_CONFIG3_CONV_MODE_ONES_STB 0x80
199 #define PIEZOACCEL225G_CONFIG3_CONV_MODE_ONES_SHD 0x00
200 #define PIEZOACCEL225G_CONFIG3_CONV_MODE_MASK 0xC0
201 #define PIEZOACCEL225G_CONFIG3_DATA_FMT_32B_R_CHID 0x30
202 #define PIEZOACCEL225G_CONFIG3_DATA_FMT_32B_R 0x20
203 #define PIEZOACCEL225G_CONFIG3_DATA_FMT_32B_L 0x10
204 #define PIEZOACCEL225G_CONFIG3_DATA_FMT_24B 0x00
205 #define PIEZOACCEL225G_CONFIG3_DATA_FMT_MASK 0x30
206 #define PIEZOACCEL225G_CONFIG3_CRC_FMT_32B 0x08
207 #define PIEZOACCEL225G_CONFIG3_CRC_FMT_16B 0x00
208 #define PIEZOACCEL225G_CONFIG3_CRC_FMT_MASK 0x08
209 #define PIEZOACCEL225G_CONFIG3_EN_CRCCOM 0x04
210 #define PIEZOACCEL225G_CONFIG3_EN_OFFCAL 0x02
211 #define PIEZOACCEL225G_CONFIG3_EN_GAINCAL 0x01
212 
217 #define PIEZOACCEL225G_IRQ_DR_STATUS 0x40
218 #define PIEZOACCEL225G_IRQ_CRCCFG_STATUS 0x20
219 #define PIEZOACCEL225G_IRQ_POR_STATUS 0x10
220 #define PIEZOACCEL225G_IRQ_MODE1_MDAT 0x08
221 #define PIEZOACCEL225G_IRQ_MODE1_IRQOUT 0x00
222 #define PIEZOACCEL225G_IRQ_MODE1_MASK 0x08
223 #define PIEZOACCEL225G_IRQ_MODE0_INACT_HIGH 0x04
224 #define PIEZOACCEL225G_IRQ_MODE0_INACT_HIGH_Z 0x00
225 #define PIEZOACCEL225G_IRQ_MODE0_MASK 0x04
226 #define PIEZOACCEL225G_IRQ_EN_FAST_CMD 0x02
227 #define PIEZOACCEL225G_IRQ_EN_STP 0x01
228 
233 #define PIEZOACCEL225G_SCAN_DLY_512_DMCLK 0xE00000ul
234 #define PIEZOACCEL225G_SCAN_DLY_256_DMCLK 0xC00000ul
235 #define PIEZOACCEL225G_SCAN_DLY_128_DMCL 0xA00000ul
236 #define PIEZOACCEL225G_SCAN_DLY_64_DMCLK 0x800000ul
237 #define PIEZOACCEL225G_SCAN_DLY_32_DMCLK 0x600000ul
238 #define PIEZOACCEL225G_SCAN_DLY_16_DMCLK 0x400000ul
239 #define PIEZOACCEL225G_SCAN_DLY_8_DMCLK 0x200000ul
240 #define PIEZOACCEL225G_SCAN_DLY_NO_DELAY 0x000000ul
241 #define PIEZOACCEL225G_SCAN_DLY_MASK 0xE00000ul
242 #define PIEZOACCEL225G_SCAN_CH_OFFSET 0x008000ul
243 #define PIEZOACCEL225G_SCAN_CH_VCM 0x004000ul
244 #define PIEZOACCEL225G_SCAN_CH_AVDD 0x002000ul
245 #define PIEZOACCEL225G_SCAN_CH_TEMP 0x001000ul
246 #define PIEZOACCEL225G_SCAN_CH_DIFF_CH2_CH3 0x000200ul
247 #define PIEZOACCEL225G_SCAN_CH_DIFF_CH0_CH1 0x000100ul
248 #define PIEZOACCEL225G_SCAN_CH_SINGLE_ENDED_CH3 0x000008ul
249 #define PIEZOACCEL225G_SCAN_CH_SINGLE_ENDED_CH2 0x000004ul
250 #define PIEZOACCEL225G_SCAN_CH_SINGLE_ENDED_CH1 0x000002ul
251 #define PIEZOACCEL225G_SCAN_CH_SINGLE_ENDED_CH0 0x000001ul
252 
257 #define PIEZOACCEL225G_STATUS_DEV_ADDR_MASK 0x30
258 #define PIEZOACCEL225G_STATUS_DEV_ADDR_FLAG 0x08
259 #define PIEZOACCEL225G_STATUS_DR_FLAG 0x04
260 #define PIEZOACCEL225G_STATUS_CRCCFG_FLAG 0x02
261 #define PIEZOACCEL225G_STATUS_POR_FLAG 0x01
262 
267 #define PIEZOACCEL225G_CMD_TYPE_FAST_CMD 0x00
268 #define PIEZOACCEL225G_CMD_TYPE_STATIC_REG_READ 0x01
269 #define PIEZOACCEL225G_CMD_TYPE_INC_REG_WRITE 0x02
270 #define PIEZOACCEL225G_CMD_TYPE_INC_REG_READ 0x03
271 
276 #define PIEZOACCEL225G_CMD_DEV_ADDR 0x01
277 
282 #define PIEZOACCEL225G_LOCK_BYTE 0x00
283 #define PIEZOACCEL225G_UNLOCK_BYTE 0xA5
284 
289 #define PIEZOACCEL225G_DATA_READY_TIMEOUT_MS 1000
290 
299 #define PIEZOACCEL225G_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
300 #define PIEZOACCEL225G_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
301  // piezoaccel225g_set
303 
318 #define PIEZOACCEL225G_MAP_MIKROBUS( cfg, mikrobus ) \
319  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
320  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
321  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
322  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
323  cfg.clk = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
324  cfg.irq = MIKROBUS( mikrobus, MIKROBUS_INT )
325  // piezoaccel225g_map // piezoaccel225g
328 
333 typedef struct
334 {
335  uint32_t raw_x;
336  uint32_t raw_y;
337  uint32_t raw_z;
338  uint32_t raw_temp;
341 
346 typedef struct
347 {
348  // Input pins
349  digital_in_t clk;
350  digital_in_t irq;
352  // Modules
353  spi_master_t spi;
355  pin_name_t chip_select;
357  uint8_t status;
360 
365 typedef struct
366 {
367  // Communication gpio pins
368  pin_name_t miso;
369  pin_name_t mosi;
370  pin_name_t sck;
371  pin_name_t cs;
373  // Additional gpio pins
374  pin_name_t clk;
375  pin_name_t irq;
377  // static variable
378  uint32_t spi_speed;
379  spi_master_mode_t spi_mode;
380  spi_master_chip_select_polarity_t cs_polarity;
383 
388 typedef enum
389 {
392 
394 
411 
426 
440 
452 err_t piezoaccel225g_fast_cmd_write ( piezoaccel225g_t *ctx, uint8_t fast_cmd );
453 
468 err_t piezoaccel225g_reg_write_multi ( piezoaccel225g_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
469 
482 err_t piezoaccel225g_reg_write_8 ( piezoaccel225g_t *ctx, uint8_t reg, uint8_t data_in );
483 
496 err_t piezoaccel225g_reg_write_24 ( piezoaccel225g_t *ctx, uint8_t reg, uint32_t data_in );
497 
512 err_t piezoaccel225g_reg_read_multi ( piezoaccel225g_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
513 
526 err_t piezoaccel225g_reg_read_8 ( piezoaccel225g_t *ctx, uint8_t reg, uint8_t *data_out );
527 
540 err_t piezoaccel225g_reg_read_24 ( piezoaccel225g_t *ctx, uint8_t reg, uint32_t *data_out );
541 
554 err_t piezoaccel225g_reg_read_32 ( piezoaccel225g_t *ctx, uint8_t reg, uint32_t *data_out );
555 
567 
579 
589 
599 
611 err_t piezoaccel225g_wait_data_ready ( piezoaccel225g_t *ctx, uint16_t timeout_ms );
612 
627 
628 #ifdef __cplusplus
629 }
630 #endif
631 #endif // PIEZOACCEL225G_H
632  // piezoaccel225g
634 
635 // ------------------------------------------------------------------------ END
piezoaccel225g_get_clk_pin
uint8_t piezoaccel225g_get_clk_pin(piezoaccel225g_t *ctx)
Piezo Accel 2 25g get clk pin function.
piezoaccel225g_t::status
uint8_t status
Definition: piezoaccel225g.h:357
PIEZOACCEL225G_ERROR
@ PIEZOACCEL225G_ERROR
Definition: piezoaccel225g.h:391
piezoaccel225g_read_adc_data
err_t piezoaccel225g_read_adc_data(piezoaccel225g_t *ctx, piezoaccel225g_adc_data_t *data_out)
Piezo Accel 2 25g read adc data function.
piezoaccel225g_reg_read_8
err_t piezoaccel225g_reg_read_8(piezoaccel225g_t *ctx, uint8_t reg, uint8_t *data_out)
Piezo Accel 2 25g reg read 8 function.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
piezoaccel225g_cfg_t
Piezo Accel 2 25g Click configuration object.
Definition: piezoaccel225g.h:366
piezoaccel225g_cfg_t::irq
pin_name_t irq
Definition: piezoaccel225g.h:375
piezoaccel225g_adc_data_t::raw_x
uint32_t raw_x
Definition: piezoaccel225g.h:335
piezoaccel225g_adc_data_t::raw_y
uint32_t raw_y
Definition: piezoaccel225g.h:336
piezoaccel225g_wait_data_ready
err_t piezoaccel225g_wait_data_ready(piezoaccel225g_t *ctx, uint16_t timeout_ms)
Piezo Accel 2 25g wait data ready function.
piezoaccel225g_t::irq
digital_in_t irq
Definition: piezoaccel225g.h:350
piezoaccel225g_fast_cmd_write
err_t piezoaccel225g_fast_cmd_write(piezoaccel225g_t *ctx, uint8_t fast_cmd)
Piezo Accel 2 25g fast cmd write function.
piezoaccel225g_cfg_t::miso
pin_name_t miso
Definition: piezoaccel225g.h:368
piezoaccel225g_t
Piezo Accel 2 25g Click context object.
Definition: piezoaccel225g.h:347
piezoaccel225g_cfg_t::mosi
pin_name_t mosi
Definition: piezoaccel225g.h:369
piezoaccel225g_reg_write_24
err_t piezoaccel225g_reg_write_24(piezoaccel225g_t *ctx, uint8_t reg, uint32_t data_in)
Piezo Accel 2 25g reg write 24 function.
piezoaccel225g_cfg_t::spi_speed
uint32_t spi_speed
Definition: piezoaccel225g.h:378
piezoaccel225g_lock_reg_write
err_t piezoaccel225g_lock_reg_write(piezoaccel225g_t *ctx)
Piezo Accel 2 25g lock reg write function.
PIEZOACCEL225G_OK
@ PIEZOACCEL225G_OK
Definition: piezoaccel225g.h:390
piezoaccel225g_reg_read_24
err_t piezoaccel225g_reg_read_24(piezoaccel225g_t *ctx, uint8_t reg, uint32_t *data_out)
Piezo Accel 2 25g reg read 24 function.
piezoaccel225g_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: piezoaccel225g.h:380
piezoaccel225g_get_irq_pin
uint8_t piezoaccel225g_get_irq_pin(piezoaccel225g_t *ctx)
Piezo Accel 2 25g get irq pin function.
piezoaccel225g_return_value_t
piezoaccel225g_return_value_t
Piezo Accel 2 25g Click return value data.
Definition: piezoaccel225g.h:389
piezoaccel225g_cfg_t::cs
pin_name_t cs
Definition: piezoaccel225g.h:371
piezoaccel225g_reg_read_32
err_t piezoaccel225g_reg_read_32(piezoaccel225g_t *ctx, uint8_t reg, uint32_t *data_out)
Piezo Accel 2 25g reg read 32 function.
piezoaccel225g_reg_write_8
err_t piezoaccel225g_reg_write_8(piezoaccel225g_t *ctx, uint8_t reg, uint8_t data_in)
Piezo Accel 2 25g reg write 8 function.
piezoaccel225g_t::spi
spi_master_t spi
Definition: piezoaccel225g.h:353
piezoaccel225g_t::chip_select
pin_name_t chip_select
Definition: piezoaccel225g.h:355
piezoaccel225g_cfg_t::sck
pin_name_t sck
Definition: piezoaccel225g.h:370
piezoaccel225g_reg_read_multi
err_t piezoaccel225g_reg_read_multi(piezoaccel225g_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Piezo Accel 2 25g reg read multi function.
piezoaccel225g_unlock_reg_write
err_t piezoaccel225g_unlock_reg_write(piezoaccel225g_t *ctx)
Piezo Accel 2 25g unlock reg write function.
piezoaccel225g_reg_write_multi
err_t piezoaccel225g_reg_write_multi(piezoaccel225g_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Piezo Accel 2 25g reg write multi function.
piezoaccel225g_adc_data_t::raw_temp
uint32_t raw_temp
Definition: piezoaccel225g.h:338
piezoaccel225g_cfg_t::clk
pin_name_t clk
Definition: piezoaccel225g.h:374
piezoaccel225g_t::clk
digital_in_t clk
Definition: piezoaccel225g.h:349
piezoaccel225g_adc_data_t
Piezo Accel 2 25g Click adc data object.
Definition: piezoaccel225g.h:334
piezoaccel225g_default_cfg
err_t piezoaccel225g_default_cfg(piezoaccel225g_t *ctx)
Piezo Accel 2 25g default configuration function.
piezoaccel225g_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: piezoaccel225g.h:379
piezoaccel225g_init
err_t piezoaccel225g_init(piezoaccel225g_t *ctx, piezoaccel225g_cfg_t *cfg)
Piezo Accel 2 25g initialization function.
piezoaccel225g_cfg_setup
void piezoaccel225g_cfg_setup(piezoaccel225g_cfg_t *cfg)
Piezo Accel 2 25g configuration object setup function.
piezoaccel225g_adc_data_t::raw_z
uint32_t raw_z
Definition: piezoaccel225g.h:337