accel27  2.1.0.0
accel27.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 ACCEL27_H
29 #define ACCEL27_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 ACCEL27_REG_DEVID_AD 0x00
76 #define ACCEL27_REG_DEVID_MST 0x01
77 #define ACCEL27_REG_PARTID 0x02
78 #define ACCEL27_REG_REVID 0x03
79 #define ACCEL27_REG_STATUS 0x04
80 #define ACCEL27_REG_STATUS2 0x05
81 #define ACCEL27_REG_FIFO_ENTRIES2 0x06
82 #define ACCEL27_REG_FIFO_ENTRIES 0x07
83 #define ACCEL27_REG_XDATA_H 0x08
84 #define ACCEL27_REG_XDATA_L 0x09
85 #define ACCEL27_REG_YDATA_H 0x0A
86 #define ACCEL27_REG_YDATA_L 0x0B
87 #define ACCEL27_REG_ZDATA_H 0x0C
88 #define ACCEL27_REG_ZDATA_L 0x0D
89 #define ACCEL27_REG_MAXPEAK_X_H 0x15
90 #define ACCEL27_REG_MAXPEAK_X_L 0x16
91 #define ACCEL27_REG_MAXPEAK_Y_H 0x17
92 #define ACCEL27_REG_MAXPEAK_Y_L 0x18
93 #define ACCEL27_REG_MAXPEAK_Z_H 0x19
94 #define ACCEL27_REG_MAXPEAK_Z_L 0x1A
95 #define ACCEL27_REG_OFFSET_X 0x20
96 #define ACCEL27_REG_OFFSET_Y 0x21
97 #define ACCEL27_REG_OFFSET_Z 0x22
98 #define ACCEL27_REG_THRESH_ACT_X_H 0x23
99 #define ACCEL27_REG_THRESH_ACT_X_L 0x24
100 #define ACCEL27_REG_THRESH_ACT_Y_H 0x25
101 #define ACCEL27_REG_THRESH_ACT_Y_L 0x26
102 #define ACCEL27_REG_THRESH_ACT_Z_H 0x27
103 #define ACCEL27_REG_THRESH_ACT_Z_L 0x28
104 #define ACCEL27_REG_TIME_ACT 0x29
105 #define ACCEL27_REG_THRESH_INACT_X_H 0x2A
106 #define ACCEL27_REG_THRESH_INACT_X_L 0x2B
107 #define ACCEL27_REG_THRESH_INACT_Y_H 0x2C
108 #define ACCEL27_REG_THRESH_INACT_Y_L 0x2D
109 #define ACCEL27_REG_THRESH_INACT_Z_H 0x2E
110 #define ACCEL27_REG_THRESH_INACT_Z_L 0x2F
111 #define ACCEL27_REG_TIME_INACT_H 0x30
112 #define ACCEL27_REG_TIME_INACT_L 0x31
113 #define ACCEL27_REG_THRESH_ACT2_X_H 0x32
114 #define ACCEL27_REG_THRESH_ACT2_X_L 0x33
115 #define ACCEL27_REG_THRESH_ACT2_Y_H 0x34
116 #define ACCEL27_REG_THRESH_ACT2_Y_L 0x35
117 #define ACCEL27_REG_THRESH_ACT2_Z_H 0x36
118 #define ACCEL27_REG_THRESH_ACT2_Z_L 0x37
119 #define ACCEL27_REG_HPF 0x38
120 #define ACCEL27_REG_FIFO_SAMPLES 0x39
121 #define ACCEL27_REG_FIFO_CTL 0x3A
122 #define ACCEL27_REG_INT1_MAP 0x3B
123 #define ACCEL27_REG_INT2_MAP 0x3C
124 #define ACCEL27_REG_TIMING 0x3D
125 #define ACCEL27_REG_MEASURE 0x3E
126 #define ACCEL27_REG_POWER_CTL 0x3F
127 #define ACCEL27_REG_SELF_TEST 0x40
128 #define ACCEL27_REG_RESET 0x41
129 #define ACCEL27_REG_FIFO_DATA 0x42
130  // accel27_reg
132 
147 #define ACCEL27_INT_MAP_INT_LOW 0x80
148 #define ACCEL27_INT_MAP_AWAKE 0x40
149 #define ACCEL27_INT_MAP_ACT 0x20
150 #define ACCEL27_INT_MAP_INACT 0x10
151 #define ACCEL27_INT_MAP_DATA_RDY 0x01
152 
157 #define ACCEL27_TIMING_ODR_320HZ 0x00
158 #define ACCEL27_TIMING_ODR_640HZ 0x20
159 #define ACCEL27_TIMING_ODR_1280HZ 0x40
160 #define ACCEL27_TIMING_ODR_25600HZ 0x60
161 #define ACCEL27_TIMING_ODR_5120HZ 0x80
162 #define ACCEL27_TIMING_ODR_MASK 0xE0
163 #define ACCEL27_TIMING_WAKEUP_RATE_65_MS 0x00
164 #define ACCEL27_TIMING_WAKEUP_RATE_130_MS 0x04
165 #define ACCEL27_TIMING_WAKEUP_RATE_260_MS 0x08
166 #define ACCEL27_TIMING_WAKEUP_RATE_640_MS 0x0C
167 #define ACCEL27_TIMING_WAKEUP_RATE_2560_MS 0x10
168 #define ACCEL27_TIMING_WAKEUP_RATE_5120_MS 0x14
169 #define ACCEL27_TIMING_WAKEUP_RATE_10240_MS 0x18
170 #define ACCEL27_TIMING_WAKEUP_RATE_30720_MS 0x1C
171 #define ACCEL27_TIMING_WAKEUP_RATE_MASK 0x1C
172 #define ACCEL27_TIMING_EXT_CLK 0x02
173 #define ACCEL27_TIMING_EXT_SYNC 0x01
174 
179 #define ACCEL27_POWER_CTL_I2C_HSM_EN 0x80
180 #define ACCEL27_POWER_CTL_INSTANT_ON_THRESH 0x20
181 #define ACCEL27_POWER_CTL_FLT_SETL_462_5_MS 0x00
182 #define ACCEL27_POWER_CTL_FLT_SETL_4_OF_ODR 0x10
183 #define ACCEL27_POWER_CTL_FLT_SETL_MASK 0x10
184 #define ACCEL27_POWER_CTL_LPF_DISABLE 0x08
185 #define ACCEL27_POWER_CTL_HPF_DISABLE 0x04
186 #define ACCEL27_POWER_CTL_MODE_STANDBY 0x00
187 #define ACCEL27_POWER_CTL_MODE_WAKE_UP 0x01
188 #define ACCEL27_POWER_CTL_MODE_INSTANT_ON 0x02
189 #define ACCEL27_POWER_CTL_MODE_MEASUREMENT 0x03
190 #define ACCEL27_POWER_CTL_MODE_MASK 0x03
191 
196 #define ACCEL27_RESET 0x52
197 
202 #define ACCEL27_DEVID_AD 0xAD
203 #define ACCEL27_DEVID_MST 0x1D
204 #define ACCEL27_DEVID_PRODUCT 0xFA
205 
210 #define ACCEL27_SCALE_FACTOR_LSB_PER_G 5.0f
211 
217 #define ACCEL27_DEVICE_ADDRESS_0 0x1D
218 #define ACCEL27_DEVICE_ADDRESS_1 0x53
219 
228 #define ACCEL27_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
229 #define ACCEL27_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
230  // accel27_set
232 
247 #define ACCEL27_MAP_MIKROBUS( cfg, mikrobus ) \
248  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
249  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
250  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
251  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
252  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
253  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
254  cfg.int2 = MIKROBUS( mikrobus, MIKROBUS_AN ); \
255  cfg.int1 = MIKROBUS( mikrobus, MIKROBUS_INT )
256  // accel27_map // accel27
259 
264 typedef enum
265 {
270 
275 typedef err_t ( *accel27_master_io_t )( struct accel27_s*, uint8_t, uint8_t*, uint8_t );
281 typedef struct accel27_s
282 {
283  digital_in_t int2;
284  digital_in_t int1;
286  i2c_master_t i2c;
287  spi_master_t spi;
289  uint8_t slave_address;
290  pin_name_t chip_select;
297 
302 typedef struct
303 {
304  pin_name_t scl;
305  pin_name_t sda;
306  pin_name_t miso;
307  pin_name_t mosi;
308  pin_name_t sck;
309  pin_name_t cs;
310  pin_name_t int2;
311  pin_name_t int1;
313  uint32_t i2c_speed;
314  uint8_t i2c_address;
316  uint32_t spi_speed;
317  spi_master_mode_t spi_mode;
318  spi_master_chip_select_polarity_t cs_polarity;
322 } accel27_cfg_t;
323 
328 typedef struct
329 {
330  float x;
331  float y;
332  float z;
335 
340 typedef enum
341 {
343  ACCEL27_ERROR = -1
344 
346 
363 
379 
393 err_t accel27_init ( accel27_t *ctx, accel27_cfg_t *cfg );
394 
408 
423 err_t accel27_generic_write ( accel27_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
424 
439 err_t accel27_generic_read ( accel27_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
440 
453 err_t accel27_write_register ( accel27_t *ctx, uint8_t reg, uint8_t data_in );
454 
467 err_t accel27_read_register ( accel27_t *ctx, uint8_t reg, uint8_t *data_out );
468 
480 
490 
500 
514 
526 
527 #ifdef __cplusplus
528 }
529 #endif
530 #endif // ACCEL27_H
531  // accel27
533 
534 // ------------------------------------------------------------------------ END
accel27_drv_interface_selection
void accel27_drv_interface_selection(accel27_cfg_t *cfg, accel27_drv_t drv_sel)
Accel 27 driver interface setup function.
accel27_cfg_t::miso
pin_name_t miso
Definition: accel27.h:306
accel27_default_cfg
err_t accel27_default_cfg(accel27_t *ctx)
Accel 27 default configuration function.
accel27_generic_write
err_t accel27_generic_write(accel27_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Accel 27 data writing function.
accel27_write_register
err_t accel27_write_register(accel27_t *ctx, uint8_t reg, uint8_t data_in)
Accel 27 write register function.
accel27_cfg_t::spi_speed
uint32_t spi_speed
Definition: accel27.h:316
ACCEL27_ERROR
@ ACCEL27_ERROR
Definition: accel27.h:343
accel27_s::slave_address
uint8_t slave_address
Definition: accel27.h:289
accel27_s::int2
digital_in_t int2
Definition: accel27.h:283
accel27_master_io_t
err_t(* accel27_master_io_t)(struct accel27_s *, uint8_t, uint8_t *, uint8_t)
Accel 27 Click driver interface.
Definition: accel27.h:275
accel27_s
Accel 27 Click context object.
Definition: accel27.h:282
accel27_t
struct accel27_s accel27_t
Accel 27 Click context object.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
accel27_get_int2_pin
uint8_t accel27_get_int2_pin(accel27_t *ctx)
Accel 27 get int2 pin function.
accel27_cfg_t::drv_sel
accel27_drv_t drv_sel
Definition: accel27.h:320
accel27_cfg_t::int2
pin_name_t int2
Definition: accel27.h:310
accel27_cfg_setup
void accel27_cfg_setup(accel27_cfg_t *cfg)
Accel 27 configuration object setup function.
accel27_s::spi
spi_master_t spi
Definition: accel27.h:287
accel27_axes_t
Accel 27 Click Axes data structure.
Definition: accel27.h:329
accel27_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: accel27.h:318
accel27_return_value_t
accel27_return_value_t
Accel 27 Click return value data.
Definition: accel27.h:341
accel27_get_axes
err_t accel27_get_axes(accel27_t *ctx, accel27_axes_t *axes)
Accel 27 get axes function.
accel27_axes_t::y
float y
Definition: accel27.h:331
accel27_reset_device
err_t accel27_reset_device(accel27_t *ctx)
Accel 27 reset device function.
accel27_check_communication
err_t accel27_check_communication(accel27_t *ctx)
Accel 27 check communication function.
accel27_cfg_t::cs
pin_name_t cs
Definition: accel27.h:309
accel27_s::write_f
accel27_master_io_t write_f
Definition: accel27.h:293
accel27_read_register
err_t accel27_read_register(accel27_t *ctx, uint8_t reg, uint8_t *data_out)
Accel 27 read register function.
accel27_cfg_t::i2c_address
uint8_t i2c_address
Definition: accel27.h:314
accel27_s::int1
digital_in_t int1
Definition: accel27.h:284
accel27_cfg_t::scl
pin_name_t scl
Definition: accel27.h:304
accel27_axes_t::x
float x
Definition: accel27.h:330
accel27_cfg_t
Accel 27 Click configuration object.
Definition: accel27.h:303
accel27_init
err_t accel27_init(accel27_t *ctx, accel27_cfg_t *cfg)
Accel 27 initialization function.
ACCEL27_OK
@ ACCEL27_OK
Definition: accel27.h:342
accel27_s::read_f
accel27_master_io_t read_f
Definition: accel27.h:294
accel27_get_int1_pin
uint8_t accel27_get_int1_pin(accel27_t *ctx)
Accel 27 get int1 pin function.
accel27_cfg_t::mosi
pin_name_t mosi
Definition: accel27.h:307
ACCEL27_DRV_SEL_I2C
@ ACCEL27_DRV_SEL_I2C
Definition: accel27.h:267
accel27_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: accel27.h:313
accel27_cfg_t::int1
pin_name_t int1
Definition: accel27.h:311
accel27_axes_t::z
float z
Definition: accel27.h:332
accel27_s::drv_sel
accel27_drv_t drv_sel
Definition: accel27.h:291
accel27_s::chip_select
pin_name_t chip_select
Definition: accel27.h:290
accel27_generic_read
err_t accel27_generic_read(accel27_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Accel 27 data reading function.
accel27_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: accel27.h:317
accel27_s::i2c
i2c_master_t i2c
Definition: accel27.h:286
accel27_cfg_t::sck
pin_name_t sck
Definition: accel27.h:308
ACCEL27_DRV_SEL_SPI
@ ACCEL27_DRV_SEL_SPI
Definition: accel27.h:266
accel27_drv_t
accel27_drv_t
Accel 27 Click driver selector.
Definition: accel27.h:265
accel27_cfg_t::sda
pin_name_t sda
Definition: accel27.h:305