accel21  2.1.0.0
accel21.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 ACCEL21_H
29 #define ACCEL21_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 ACCEL21_REG_STATUS_AUX 0x07
72 #define ACCEL21_REG_OUT_TEMP_L 0x0C
73 #define ACCEL21_REG_OUT_TEMP_H 0x0D
74 #define ACCEL21_REG_INT_COUNTER 0x0E
75 #define ACCEL21_REG_WHO_AM_I 0x0F
76 #define ACCEL21_REG_TEMP_CFG 0x1F
77 #define ACCEL21_REG_CTRL_REG1 0x20
78 #define ACCEL21_REG_CTRL_REG2 0x21
79 #define ACCEL21_REG_CTRL_REG3 0x22
80 #define ACCEL21_REG_CTRL_REG4 0x23
81 #define ACCEL21_REG_CTRL_REG5 0x24
82 #define ACCEL21_REG_CTRL_REG6 0x25
83 #define ACCEL21_REG_REFERENCE_DATACAPTURE 0x26
84 #define ACCEL21_REG_STATUS 0x27
85 #define ACCEL21_REG_OUT_X_L 0x28
86 #define ACCEL21_REG_OUT_X_H 0x29
87 #define ACCEL21_REG_OUT_Y_L 0x2A
88 #define ACCEL21_REG_OUT_Y_H 0x2B
89 #define ACCEL21_REG_OUT_Z_L 0x2C
90 #define ACCEL21_REG_OUT_Z_H 0x2D
91 #define ACCEL21_REG_FIFO_CTRL 0x2E
92 #define ACCEL21_REG_FIFO_SRC 0x2F
93 #define ACCEL21_REG_INT1_CFG 0x30
94 #define ACCEL21_REG_INT1_SRC 0x31
95 #define ACCEL21_REG_INT1_THS 0x32
96 #define ACCEL21_REG_INT1_DURATION 0x33
97 #define ACCEL21_REG_INT2_CFG 0x34
98 #define ACCEL21_REG_INT2_SRC 0x35
99 #define ACCEL21_REG_INT2_THS 0x36
100 #define ACCEL21_REG_INT2_DURATION 0x37
101 #define ACCEL21_REG_CLICK_CFG 0x38
102 #define ACCEL21_REG_CLICK_SRC 0x39
103 #define ACCEL21_REG_CLICK_THS 0x3A
104 #define ACCEL21_REG_TIME_LIMIT 0x3B
105 #define ACCEL21_REG_TIME_LATENCY 0x3C
106 #define ACCEL21_REG_ACT_THS 0x3E
107 #define ACCEL21_REG_ACT_DUR 0x3F
108  // accel21_reg
110 
125 #define ACCEL21_STATUS_AUX_TDA_BIT_MASK 0x04
126 #define ACCEL21_STATUS_AUX_TOR_BIT_MASK 0x40
127 
128 #define ACCEL21_TEMP_CFG_TEMP_EN_BIT_MASK 0xC0
129 
130 #define ACCEL21_WHO_AM_I 0x33
131 
132 #define ACCEL21_OP_MODE_NORMAL 0x00
133 #define ACCEL21_OP_MODE_HIGH_RESOLUTION 0x01
134 #define ACCEL21_OP_MODE_LOW_POWER 0x02
135 #define ACCEL21_OP_MODE_NOT_ALLOWED 0x02
136 #define ACCEL21_CTRL_OP_MODE_BIT_MASK 0x08
137 
138 #define ACCEL21_STATUS_NEW_DATA_AVL_BIT_MASK 0x08
139 #define ACCEL21_STATUS_DATA_OVERRUN_BIT_MASK 0x80
140 
141 #define ACCEL21_CTRL_REG1_ODR_PWR_DOWN_MODE 0x00
142 #define ACCEL21_CTRL_REG1_ODR_1_Hz 0x01
143 #define ACCEL21_CTRL_REG1_ODR_10_Hz 0x02
144 #define ACCEL21_CTRL_REG1_ODR_25_Hz 0x03
145 #define ACCEL21_CTRL_REG1_ODR_50_Hz 0x04
146 #define ACCEL21_CTRL_REG1_ODR_100_Hz 0x05
147 #define ACCEL21_CTRL_REG1_ODR_200_Hz 0x06
148 #define ACCEL21_CTRL_REG1_ODR_400_Hz 0x07
149 #define ACCEL21_CTRL_REG1_ODR_1_62_kHz 0x08
150 #define ACCEL21_CTRL_REG1_ODR_1_344_kHz 0x09
151 #define ACCEL21_CTRL_REG1_ODR_BIT_MASK 0xF0
152 
153 #define ACCEL21_CTRL_REG1_LPEN_DISABLE 0x00
154 #define ACCEL21_CTRL_REG1_LPEN_ENABLE 0x01
155 #define ACCEL21_CTRL_REG1_LPEN_BIT_MASK 0x08
156 
157 #define ACCEL21_CTRL_REG1_XYZEN_DISABLE 0x00
158 #define ACCEL21_CTRL_REG1_XYZEN_ENABLE 0x01
159 #define ACCEL21_CTRL_REG1_ZEN_BIT_MASK 0x04
160 #define ACCEL21_CTRL_REG1_YEN_BIT_MASK 0x02
161 #define ACCEL21_CTRL_REG1_XEN_BIT_MASK 0x01
162 
163 #define ACCEL21_CTRL_REG4_BDU_CONTIN_UPDATE 0x00
164 #define ACCEL21_CTRL_REG4_BDU_NOT_UPDATE 0x01
165 #define ACCEL21_CTRL_REG4_BDU_BIT_MASK 0x80
166 
167 #define ACCEL21_CTRL_REG4_FS_2_g 0x00
168 #define ACCEL21_CTRL_REG4_FS_4_g 0x01
169 #define ACCEL21_CTRL_REG4_FS_10_g 0x02
170 #define ACCEL21_CTRL_REG4_FS_16_g 0x03
171 #define ACCEL21_CTRL_REG4_FS_BIT_MASK 0x30
172 
173 #define ACCEL21_CTRL_REG4_HR_DISABLE 0x00
174 #define ACCEL21_CTRL_REG4_HR_ENABLE 0x01
175 #define ACCEL21_CTRL_REG1_HR_BIT_MASK 0x08
176 
182 #define ACCEL21_DEVICE_ADDRESS_GND 0x18
183 #define ACCEL21_DEVICE_ADDRESS_VCC 0x19
184 
193 #define ACCEL21_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
194 #define ACCEL21_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
195  // accel21_set
197 
212 #define ACCEL21_MAP_MIKROBUS( cfg, mikrobus ) \
213  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
214  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
215  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
216  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
217  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
218  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
219  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
220  cfg.in1 = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
221  cfg.in2 = MIKROBUS( mikrobus, MIKROBUS_INT )
222  // accel21_map // accel21
225 
230 typedef enum
231 {
236 
241 typedef err_t ( *accel21_master_io_t )( struct accel21_s*, uint8_t, uint8_t*, uint8_t );
247 typedef struct accel21_s
248 {
249  digital_out_t rst;
251  digital_in_t in1;
252  digital_in_t in2;
254  i2c_master_t i2c;
255  spi_master_t spi;
257  uint8_t slave_address;
258  pin_name_t chip_select;
265 
270 typedef struct
271 {
272  pin_name_t scl;
273  pin_name_t sda;
274  pin_name_t miso;
275  pin_name_t mosi;
276  pin_name_t sck;
277  pin_name_t cs;
278  pin_name_t rst;
279  pin_name_t in1;
280  pin_name_t in2;
282  uint32_t i2c_speed;
283  uint8_t i2c_address;
285  uint32_t spi_speed;
286  spi_master_mode_t spi_mode;
287  spi_master_chip_select_polarity_t cs_polarity;
291 } accel21_cfg_t;
292 
297 typedef enum
298 {
300  ACCEL21_ERROR = -1
301 
303 
308 typedef struct
309 {
310  int16_t x;
311  int16_t y;
312  int16_t z;
313 
315 
320 typedef struct
321 {
322  uint8_t odr;
323  uint8_t lpen;
324  uint8_t zen;
325  uint8_t yen;
326  uint8_t xen;
327  uint8_t bdu;
328  uint8_t fs;
329  uint8_t hr;
330 
332 
349 
365 
379 err_t accel21_init ( accel21_t *ctx, accel21_cfg_t *cfg );
380 
394 
409 err_t accel21_generic_write ( accel21_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
410 
425 err_t accel21_generic_read ( accel21_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
426 
441 err_t accel21_get_temp_status ( accel21_t *ctx, uint8_t *temp_status );
442 
459 err_t accel21_check_temp_data_ready ( accel21_t *ctx, uint8_t *temp_data_ready );
460 
474 
491 err_t accel21_check_temp_data_ovr ( accel21_t *ctx, uint8_t *temp_data_ovr );
492 
510 err_t accel21_get_temp_data ( accel21_t *ctx, int16_t *temp_data );
511 
529 err_t accel21_get_temperature ( accel21_t *ctx, float *temperature );
530 
547 err_t accel21_set_op_mode ( accel21_t *ctx, uint8_t op_mode );
548 
565 err_t accel21_get_op_mode ( accel21_t *ctx, uint8_t *op_mode );
566 
580 err_t accel21_get_device_id ( accel21_t *ctx, uint8_t *device_id );
581 
595 
609 err_t accel21_get_status ( accel21_t *ctx, uint8_t *status );
610 
625 err_t accel21_check_data_overrun ( accel21_t *ctx, uint8_t *data_overrun );
626 
643 err_t accel21_check_new_data ( accel21_t *ctx, uint8_t *new_data_avl );
644 
660 
675 err_t accel21_get_axis ( accel21_t *ctx, accel21_axis_t *acc_axis );
676 
691 
706 
707 #ifdef __cplusplus
708 }
709 #endif
710 #endif // ACCEL21_H
711  // accel21
713 
714 // ------------------------------------------------------------------------ END
accel21_cfg_t::sda
pin_name_t sda
Definition: accel21.h:273
accel21_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: accel21.h:287
accel21_cfg_t::i2c_address
uint8_t i2c_address
Definition: accel21.h:283
accel21_config_t::fs
uint8_t fs
Definition: accel21.h:328
accel21_config_t::lpen
uint8_t lpen
Definition: accel21.h:323
accel21_cfg_t::rst
pin_name_t rst
Definition: accel21.h:278
accel21_s
Accel 21 Click context object.
Definition: accel21.h:248
accel21_s::drv_sel
accel21_drv_t drv_sel
Definition: accel21.h:259
spi_specifics.h
This file contains SPI specific macros, functions, etc.
accel21_get_axis
err_t accel21_get_axis(accel21_t *ctx, accel21_axis_t *acc_axis)
Accel 21 get accel data function.
ACCEL21_OK
@ ACCEL21_OK
Definition: accel21.h:299
accel21_s::slave_address
uint8_t slave_address
Definition: accel21.h:257
accel21_get_op_mode
err_t accel21_get_op_mode(accel21_t *ctx, uint8_t *op_mode)
Accel 21 get operating mode function.
accel21_set_config
err_t accel21_set_config(accel21_t *ctx, accel21_config_t config)
Accel 21 set config function.
accel21_get_status
err_t accel21_get_status(accel21_t *ctx, uint8_t *status)
Accel 21 get status function.
accel21_axis_t::y
int16_t y
Definition: accel21.h:311
accel21_cfg_t::drv_sel
accel21_drv_t drv_sel
Definition: accel21.h:289
accel21_get_temp_data
err_t accel21_get_temp_data(accel21_t *ctx, int16_t *temp_data)
Accel 21 get temperature data function.
accel21_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: accel21.h:286
accel21_check_new_data
err_t accel21_check_new_data(accel21_t *ctx, uint8_t *new_data_avl)
Accel 21 check accel data ready function.
accel21_return_value_t
accel21_return_value_t
Accel 21 Click return value data.
Definition: accel21.h:298
accel21_cfg_setup
void accel21_cfg_setup(accel21_cfg_t *cfg)
Accel 21 configuration object setup function.
accel21_cfg_t::mosi
pin_name_t mosi
Definition: accel21.h:275
accel21_config_t::xen
uint8_t xen
Definition: accel21.h:326
accel21_s::read_f
accel21_master_io_t read_f
Definition: accel21.h:262
accel21_cfg_t::cs
pin_name_t cs
Definition: accel21.h:277
accel21_s::in1
digital_in_t in1
Definition: accel21.h:251
accel21_s::in2
digital_in_t in2
Definition: accel21.h:252
accel21_init
err_t accel21_init(accel21_t *ctx, accel21_cfg_t *cfg)
Accel 21 initialization function.
accel21_check_id
err_t accel21_check_id(accel21_t *ctx)
Accel 21 check device ID function.
accel21_check_data_overrun
err_t accel21_check_data_overrun(accel21_t *ctx, uint8_t *data_overrun)
Accel 21 check accel overrun function.
accel21_check_temp_data_ovr
err_t accel21_check_temp_data_ovr(accel21_t *ctx, uint8_t *temp_data_ovr)
Accel 21 check temperature overrun function.
accel21_enable_temp_data
err_t accel21_enable_temp_data(accel21_t *ctx)
Accel 21 enable temperature data function.
accel21_cfg_t
Accel 21 Click configuration object.
Definition: accel21.h:271
accel21_s::rst
digital_out_t rst
Definition: accel21.h:249
accel21_drv_interface_selection
void accel21_drv_interface_selection(accel21_cfg_t *cfg, accel21_drv_t drv_sel)
Accel 21 driver interface setup function.
accel21_s::chip_select
pin_name_t chip_select
Definition: accel21.h:258
accel21_get_in1_pin
uint8_t accel21_get_in1_pin(accel21_t *ctx)
Accel 21 get interrupt 1 function.
accel21_s::spi
spi_master_t spi
Definition: accel21.h:255
accel21_s::i2c
i2c_master_t i2c
Definition: accel21.h:254
accel21_get_in2_pin
uint8_t accel21_get_in2_pin(accel21_t *ctx)
Accel 21 get interrupt 2 function.
accel21_cfg_t::scl
pin_name_t scl
Definition: accel21.h:272
accel21_cfg_t::spi_speed
uint32_t spi_speed
Definition: accel21.h:285
accel21_s::write_f
accel21_master_io_t write_f
Definition: accel21.h:261
accel21_config_t::odr
uint8_t odr
Definition: accel21.h:322
ACCEL21_DRV_SEL_I2C
@ ACCEL21_DRV_SEL_I2C
Definition: accel21.h:233
accel21_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: accel21.h:282
accel21_t
struct accel21_s accel21_t
Accel 21 Click context object.
accel21_default_cfg
err_t accel21_default_cfg(accel21_t *ctx)
Accel 21 default configuration function.
accel21_config_t::yen
uint8_t yen
Definition: accel21.h:325
ACCEL21_ERROR
@ ACCEL21_ERROR
Definition: accel21.h:300
accel21_axis_t::x
int16_t x
Definition: accel21.h:310
accel21_cfg_t::in1
pin_name_t in1
Definition: accel21.h:279
accel21_drv_t
accel21_drv_t
Accel 21 Click driver selector.
Definition: accel21.h:231
accel21_config_t
Accel 21 Click configuration structure object.
Definition: accel21.h:321
accel21_config_t::bdu
uint8_t bdu
Definition: accel21.h:327
accel21_config_t::zen
uint8_t zen
Definition: accel21.h:324
accel21_get_temperature
err_t accel21_get_temperature(accel21_t *ctx, float *temperature)
Accel 21 get temperature function.
accel21_generic_read
err_t accel21_generic_read(accel21_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Accel 21 data reading function.
accel21_axis_t::z
int16_t z
Definition: accel21.h:312
accel21_set_op_mode
err_t accel21_set_op_mode(accel21_t *ctx, uint8_t op_mode)
Accel 21 set operating mode function.
ACCEL21_DRV_SEL_SPI
@ ACCEL21_DRV_SEL_SPI
Definition: accel21.h:232
accel21_cfg_t::miso
pin_name_t miso
Definition: accel21.h:274
accel21_check_temp_data_ready
err_t accel21_check_temp_data_ready(accel21_t *ctx, uint8_t *temp_data_ready)
Accel 21 check temperature data ready function.
accel21_master_io_t
err_t(* accel21_master_io_t)(struct accel21_s *, uint8_t, uint8_t *, uint8_t)
Accel 21 Click driver interface.
Definition: accel21.h:241
accel21_cfg_t::sck
pin_name_t sck
Definition: accel21.h:276
accel21_get_device_id
err_t accel21_get_device_id(accel21_t *ctx, uint8_t *device_id)
Accel 21 get device ID function.
accel21_generic_write
err_t accel21_generic_write(accel21_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Accel 21 data writing function.
accel21_axis_t
Accel 21 Click Axis structure object.
Definition: accel21.h:309
accel21_config_t::hr
uint8_t hr
Definition: accel21.h:329
accel21_get_temp_status
err_t accel21_get_temp_status(accel21_t *ctx, uint8_t *temp_status)
Accel 21 get temperature status function.
accel21_cfg_t::in2
pin_name_t in2
Definition: accel21.h:280