accel20  2.0.0.0
accel20.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 ACCEL20_H
29 #define ACCEL20_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_i2c_master.h"
38 #include "drv_spi_master.h"
39 #include "spi_specifics.h"
40 
61 #define ACCEL20_REG_MAN_ID 0x00
62 #define ACCEL20_REG_PART_ID 0x01
63 #define ACCEL20_REG_XADP_L 0x02
64 #define ACCEL20_REG_XADP_H 0x03
65 #define ACCEL20_REG_YADP_L 0x04
66 #define ACCEL20_REG_YADP_H 0x05
67 #define ACCEL20_REG_ZADP_L 0x06
68 #define ACCEL20_REG_ZADP_H 0x07
69 #define ACCEL20_REG_XOUT_L 0x08
70 #define ACCEL20_REG_XOUT_H 0x09
71 #define ACCEL20_REG_YOUT_L 0x0A
72 #define ACCEL20_REG_YOUT_H 0x0B
73 #define ACCEL20_REG_ZOUT_L 0x0C
74 #define ACCEL20_REG_ZOUT_H 0x0D
75 #define ACCEL20_REG_COTR 0x12
76 #define ACCEL20_REG_WHO_AM_I 0x13
77 #define ACCEL20_REG_TSCP 0x14
78 #define ACCEL20_REG_TSPP 0x15
79 #define ACCEL20_REG_INS1 0x16
80 #define ACCEL20_REG_INS2 0x17
81 #define ACCEL20_REG_INS3 0x18
82 #define ACCEL20_REG_STATUS_REG 0x19
83 #define ACCEL20_REG_INT_REL 0x1A
84 #define ACCEL20_REG_CNTL1 0x1B
85 #define ACCEL20_REG_CNTL2 0x1C
86 #define ACCEL20_REG_CNTL3 0x1D
87 #define ACCEL20_REG_CNTL4 0x1E
88 #define ACCEL20_REG_CNTL5 0x1F
89 #define ACCEL20_REG_CNTL6 0x20
90 #define ACCEL20_REG_ODCNTL 0x21
91 #define ACCEL20_REG_INC1 0x22
92 #define ACCEL20_REG_INC2 0x23
93 #define ACCEL20_REG_INC3 0x24
94 #define ACCEL20_REG_INC4 0x25
95 #define ACCEL20_REG_INC5 0x26
96 #define ACCEL20_REG_INC6 0x27
97 #define ACCEL20_REG_TILT_TIMER 0x29
98 #define ACCEL20_REG_TDTRC 0x2A
99 #define ACCEL20_REG_TDTC 0x2B
100 #define ACCEL20_REG_TTH 0x2C
101 #define ACCEL20_REG_TTL 0x2D
102 #define ACCEL20_REG_FTD 0x2E
103 #define ACCEL20_REG_STD 0x2F
104 #define ACCEL20_REG_TLT 0x30
105 #define ACCEL20_REG_TWS 0x31
106 #define ACCEL20_REG_FFTH 0x32
107 #define ACCEL20_REG_FFC 0x33
108 #define ACCEL20_REG_FFCNTL 0x34
109 #define ACCEL20_REG_TILT_ANGLE_LL 0x37
110 #define ACCEL20_REG_TILT_ANGLE_HL 0x38
111 #define ACCEL20_REG_HYST_SET 0x39
112 #define ACCEL20_REG_LP_CNTL1 0x3A
113 #define ACCEL20_REG_LP_CNTL2 0x3B
114 #define ACCEL20_REG_WUFTH 0x49
115 #define ACCEL20_REG_BTSWUFTH 0x4A
116 #define ACCEL20_REG_BTSTH 0x4B
117 #define ACCEL20_REG_BTSC 0x4C
118 #define ACCEL20_REG_WUFC 0x4D
119 #define ACCEL20_REG_SELF_TEST 0x5D
120 #define ACCEL20_REG_BUF_CNTL1 0x5E
121 #define ACCEL20_REG_BUF_CNTL2 0x5F
122 #define ACCEL20_REG_BUF_STATUS_1 0x60
123 #define ACCEL20_REG_BUF_STATUS_2 0x61
124 #define ACCEL20_REG_BUF_CLEAR 0x62
125 #define ACCEL20_REG_BUF_READ 0x63
126 #define ACCEL20_REG_ADP_CNTL1 0x64
127 #define ACCEL20_REG_ADP_CNTL2 0x65
128 #define ACCEL20_REG_ADP_CNTL3 0x66
129 #define ACCEL20_REG_ADP_CNTL4 0x67
130 #define ACCEL20_REG_ADP_CNTL5 0x68
131 #define ACCEL20_REG_ADP_CNTL6 0x69
132 #define ACCEL20_REG_ADP_CNTL7 0x6A
133 #define ACCEL20_REG_ADP_CNTL8 0x6B
134 #define ACCEL20_REG_ADP_CNTL9 0x6C
135 #define ACCEL20_REG_ADP_CNTL10 0x6D
136 #define ACCEL20_REG_ADP_CNTL11 0x6E
137 #define ACCEL20_REG_ADP_CNTL12 0x6F
138 #define ACCEL20_REG_ADP_CNTL13 0x70
139 #define ACCEL20_REG_ADP_CNTL14 0x71
140 #define ACCEL20_REG_ADP_CNTL15 0x72
141 #define ACCEL20_REG_ADP_CNTL16 0x73
142 #define ACCEL20_REG_ADP_CNTL17 0x74
143 #define ACCEL20_REG_ADP_CNTL18 0x75
144 #define ACCEL20_REG_ADP_CNTL19 0x76
145 #define ACCEL20_REG_INTERNAL 0x7F
146  // accel20_reg
148 
163 #define ACCEL20_INTERNAL_SOFT_RESET 0x00
164 #define ACCEL20_SOFT_RESET_PWR_CYC 0x00
165 #define ACCEL20_SOFT_RESET_REBOOT 0x80
166 
167 #define ACCEL20_CNTL1_RANGE_8g 0x00
168 #define ACCEL20_CNTL1_RANGE_16g 0x01
169 #define ACCEL20_CNTL1_RANGE_32g 0x02
170 #define ACCEL20_CNTL1_RANGE_64g 0x03
171 #define ACCEL20_RANGE_BIT_MASK 0xE7
172 
173 #define ACCEL20_ODCNTL_ODR_0_781_Hz 0x00
174 #define ACCEL20_ODCNTL_ODR_1_563_Hz 0x01
175 #define ACCEL20_ODCNTL_ODR_3_125_Hz 0x02
176 #define ACCEL20_ODCNTL_ODR_6_25_Hz 0x03
177 #define ACCEL20_ODCNTL_ODR_12_5_Hz 0x04
178 #define ACCEL20_ODCNTL_ODR_25_Hz 0x05
179 #define ACCEL20_ODCNTL_ODR_50_Hz 0x06
180 #define ACCEL20_ODCNTL_ODR_100_Hz 0x07
181 #define ACCEL20_ODCNTL_ODR_200_Hz 0x08
182 #define ACCEL20_ODCNTL_ODR_400_Hz 0x09
183 #define ACCEL20_ODCNTL_ODR_800_Hz 0x0A
184 #define ACCEL20_ODCNTL_ODR_1600_Hz 0x0B
185 #define ACCEL20_ODCNTL_ODR_3200_Hz 0x0C
186 #define ACCEL20_ODCNTL_ODR_6400_Hz 0x0D
187 #define ACCEL20_ODCNTL_ODR_12800_Hz 0x0E
188 #define ACCEL20_ODCNTL_ODR_25600_Hz 0x0F
189 #define ACCEL20_ODR_BIT_MASK 0x0F
190 
191 #define ACCEL20_CNTL1_OP_MODE_STB 0x00
192 #define ACCEL20_CNTL1_OP_MODE_L_PWR 0x02
193 #define ACCEL20_CNTL1_OP_MODE_HP 0x03
194 #define ACCEL20_OP_MODE_BIT_MASK 0xC0
195 
196 #define ACCEL20_ENABLE_INT_1 0x30
197 #define ACCEL20_ENABLE_DATA_READY 0x10
198 
199 #define ACCEL20_DATA_READY_BIT_MASK 0x10
200 
201 #define ACCEL20_INT1_DATA_READY 0x00
202 
203 #define ACCEL20_CHIP_ID 0x46
204 
205 #define ACCEL20_TRIGGER_DISABLE 0x00
206 #define ACCEL20_TRIGGER_ENABLE 0x01
207 
213 #define ACCEL20_SET_DEV_ADDR_GND 0x1E
214 #define ACCEL20_SET_DEV_ADDR_VCC 0x1F
215 
224 #define ACCEL20_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
225 #define ACCEL20_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
226  // accel20_set
228 
243 #define ACCEL20_MAP_MIKROBUS( cfg, mikrobus ) \
244  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
245  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
246  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
247  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
248  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
249  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
250  cfg.i2 = MIKROBUS( mikrobus, MIKROBUS_AN ); \
251  cfg.trg = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
252  cfg.i1 = MIKROBUS( mikrobus, MIKROBUS_INT )
253  // accel20_map // accel20
256 
261 typedef enum
262 {
267 
272 typedef err_t ( *accel20_master_io_t )( struct accel20_s*, uint8_t, uint8_t*, uint8_t );
278 typedef struct accel20_s
279 {
280  digital_out_t trg;
282  digital_in_t i2;
283  digital_in_t i1;
285  i2c_master_t i2c;
286  spi_master_t spi;
288  uint8_t slave_address;
289  pin_name_t chip_select;
296 
301 typedef struct
302 {
303  pin_name_t scl;
304  pin_name_t sda;
305  pin_name_t miso;
306  pin_name_t mosi;
307  pin_name_t sck;
308  pin_name_t cs;
309  pin_name_t i2;
310  pin_name_t trg;
311  pin_name_t i1;
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 } accel20_cfg_t;
323 
328 typedef struct
329 {
330  int16_t x;
331  int16_t y;
332  int16_t z;
333 
335 
340 typedef enum
341 {
343  ACCEL20_ERROR = -1
344 
346 
363 
379 
394 err_t accel20_init ( accel20_t *ctx, accel20_cfg_t *cfg );
395 
410 
426 err_t accel20_generic_write ( accel20_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
427 
443 err_t accel20_generic_read ( accel20_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
444 
459 
474 
489 
507 err_t accel20_set_operating_mode ( accel20_t *ctx, uint8_t op_mode );
508 
523 
538 
557 err_t accel20_set_accel_range ( accel20_t *ctx, uint8_t range );
558 
589 err_t accel20_set_output_data_rate ( accel20_t *ctx, uint8_t odr );
590 
606 
623 err_t accel20_set_trigger ( accel20_t *ctx, uint8_t en_trg );
624 
638 uint8_t accel20_get_int_1 ( accel20_t *ctx );
639 
653 uint8_t accel20_get_int_2 ( accel20_t *ctx );
654 
655 #ifdef __cplusplus
656 }
657 #endif
658 #endif // ACCEL20_H
659  // accel20
661 
662 // ------------------------------------------------------------------------ END
accel20_cfg_t::i2
pin_name_t i2
Definition: accel20.h:309
accel20_s
Accel 20 Click context object.
Definition: accel20.h:279
accel20_axis_t::z
int16_t z
Definition: accel20.h:332
accel20_set_accel_range
err_t accel20_set_accel_range(accel20_t *ctx, uint8_t range)
Accel 20 set accel range function.
accel20_default_cfg
err_t accel20_default_cfg(accel20_t *ctx)
Accel 20 default configuration function.
accel20_generic_write
err_t accel20_generic_write(accel20_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Accel 20 data writing function.
accel20_soft_reset
err_t accel20_soft_reset(accel20_t *ctx)
Accel 20 soft reset function.
accel20_s::trg
digital_out_t trg
Definition: accel20.h:280
accel20_enable_int_2_pin
err_t accel20_enable_int_2_pin(accel20_t *ctx)
Accel 20 enable INT 2 pin function.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
accel20_generic_read
err_t accel20_generic_read(accel20_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Accel 20 data reading function.
accel20_s::chip_select
pin_name_t chip_select
Definition: accel20.h:289
accel20_cfg_t::drv_sel
accel20_drv_t drv_sel
Definition: accel20.h:320
accel20_s::i2c
i2c_master_t i2c
Definition: accel20.h:285
accel20_return_value_t
accel20_return_value_t
Accel 20 Click return value data.
Definition: accel20.h:341
accel20_get_int_1
uint8_t accel20_get_int_1(accel20_t *ctx)
Accel 20 get Interrupt 1 function.
accel20_s::read_f
accel20_master_io_t read_f
Definition: accel20.h:293
accel20_t
struct accel20_s accel20_t
Accel 20 Click context object.
ACCEL20_DRV_SEL_I2C
@ ACCEL20_DRV_SEL_I2C
Definition: accel20.h:264
accel20_master_io_t
err_t(* accel20_master_io_t)(struct accel20_s *, uint8_t, uint8_t *, uint8_t)
Accel 20 Click driver interface.
Definition: accel20.h:272
accel20_axis_t::y
int16_t y
Definition: accel20.h:331
accel20_s::drv_sel
accel20_drv_t drv_sel
Definition: accel20.h:290
accel20_cfg_t::sda
pin_name_t sda
Definition: accel20.h:304
accel20_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: accel20.h:317
accel20_cfg_t::i1
pin_name_t i1
Definition: accel20.h:311
accel20_set_operating_mode
err_t accel20_set_operating_mode(accel20_t *ctx, uint8_t op_mode)
Accel 20 set operating mode function.
accel20_cfg_t::trg
pin_name_t trg
Definition: accel20.h:310
accel20_s::write_f
accel20_master_io_t write_f
Definition: accel20.h:292
accel20_data_ready
uint8_t accel20_data_ready(accel20_t *ctx)
Accel 20 check data ready function.
accel20_cfg_t
Accel 20 Click configuration object.
Definition: accel20.h:302
accel20_cfg_t::miso
pin_name_t miso
Definition: accel20.h:305
accel20_cfg_t::scl
pin_name_t scl
Definition: accel20.h:303
accel20_set_output_data_rate
err_t accel20_set_output_data_rate(accel20_t *ctx, uint8_t odr)
Accel 20 set output data rate function.
accel20_get_int_2
uint8_t accel20_get_int_2(accel20_t *ctx)
Accel 20 get Interrupt 2 function.
accel20_cfg_setup
void accel20_cfg_setup(accel20_cfg_t *cfg)
Accel 20 configuration object setup function.
accel20_enable_int_1_pin
err_t accel20_enable_int_1_pin(accel20_t *ctx)
Accel 20 enable INT 1 pin function.
ACCEL20_OK
@ ACCEL20_OK
Definition: accel20.h:342
accel20_axis_t::x
int16_t x
Definition: accel20.h:330
accel20_cfg_t::mosi
pin_name_t mosi
Definition: accel20.h:306
accel20_set_trigger
err_t accel20_set_trigger(accel20_t *ctx, uint8_t en_trg)
Accel 20 set trigger function.
accel20_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: accel20.h:313
accel20_axis_t
Accel 20 axis data structure.
Definition: accel20.h:329
accel20_cfg_t::cs
pin_name_t cs
Definition: accel20.h:308
accel20_init
err_t accel20_init(accel20_t *ctx, accel20_cfg_t *cfg)
Accel 20 initialization function.
accel20_cfg_t::sck
pin_name_t sck
Definition: accel20.h:307
ACCEL20_ERROR
@ ACCEL20_ERROR
Definition: accel20.h:343
accel20_check_id
err_t accel20_check_id(accel20_t *ctx)
Accel 20 check ID function.
accel20_s::slave_address
uint8_t slave_address
Definition: accel20.h:288
accel20_drv_interface_selection
void accel20_drv_interface_selection(accel20_cfg_t *cfg, accel20_drv_t drv_sel)
Accel 20 driver interface setup function.
accel20_drv_t
accel20_drv_t
Accel 20 Click driver selector.
Definition: accel20.h:262
accel20_s::i1
digital_in_t i1
Definition: accel20.h:283
accel20_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: accel20.h:318
accel20_s::spi
spi_master_t spi
Definition: accel20.h:286
accel20_cfg_t::i2c_address
uint8_t i2c_address
Definition: accel20.h:314
accel20_get_axis_data
err_t accel20_get_axis_data(accel20_t *ctx, accel20_axis_t *axis)
Accel 20 get accelerometer axis function.
ACCEL20_DRV_SEL_SPI
@ ACCEL20_DRV_SEL_SPI
Definition: accel20.h:263
accel20_cfg_t::spi_speed
uint32_t spi_speed
Definition: accel20.h:316
accel20_s::i2
digital_in_t i2
Definition: accel20.h:282