accel14  2.0.0.0
accel14.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
32 // ----------------------------------------------------------------------------
33 
34 #ifndef ACCEL14_H
35 #define ACCEL14_H
36 
37 #include "drv_digital_out.h"
38 #include "drv_digital_in.h"
39 #include "drv_spi_master.h"
40 
41 // -------------------------------------------------------------- PUBLIC MACROS
52 #define ACCEL14_MAP_MIKROBUS( cfg, mikrobus ) \
53  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
54  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
55  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
56  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
57  cfg.i2 = MIKROBUS( mikrobus, MIKROBUS_RST ); \
58  cfg.i1 = MIKROBUS( mikrobus, MIKROBUS_INT )
59 
65 #define ACCEL14_RETVAL uint8_t
66 
67 #define ACCEL14_OK 0x00
68 #define ACCEL14_INIT_ERROR 0xFF
69 
75 #define ACCEL14_REG_PIN_CTRL 0x02
76 #define ACCEL14_REG_FIFO_CTRL1 0x07
77 #define ACCEL14_REG_FIFO_CTRL2 0x08
78 #define ACCEL14_REG_FIFO_CTRL3 0x09
79 #define ACCEL14_REG_FIFO_CTRL4 0x0A
80 #define ACCEL14_REG_COUNTER_BDR_REG1 0x0B
81 #define ACCEL14_REG_COUNTER_BDR_REG2 0x0C
82 #define ACCEL14_REG_INT1_CTRL 0x0D
83 #define ACCEL14_REG_INT2_CTRL 0x0E
84 #define ACCEL14_REG_WHO_AM_I 0x0F
85 #define ACCEL14_REG_CTRL1_XL 0x10
86 #define ACCEL14_REG_CTRL3_C 0x12
87 #define ACCEL14_REG_CTRL4_C 0x13
88 #define ACCEL14_REG_CTRL5_C 0x14
89 #define ACCEL14_REG_CTRL6_C 0x15
90 #define ACCEL14_REG_CTRL7_C 0x16
91 #define ACCEL14_REG_CTRL8_XL 0x17
92 #define ACCEL14_REG_CTRL10_C 0x19
93 #define ACCEL14_REG_ALL_INT_SRC 0x1A
94 #define ACCEL14_REG_WAKE_UP_SRC 0x1B
95 #define ACCEL14_REG_STATUS_REG 0x1E
96 #define ACCEL14_REG_OUT_TEMP_L 0x20
97 #define ACCEL14_REG_OUT_TEMP_H 0x21
98 #define ACCEL14_REG_OUTX_L_A 0x28
99 #define ACCEL14_REG_OUTX_H_A 0x29
100 #define ACCEL14_REG_OUTY_L_A 0x2A
101 #define ACCEL14_REG_OUTY_H_A 0x2B
102 #define ACCEL14_REG_OUTZ_L_A 0x2C
103 #define ACCEL14_REG_OUTZ_H_A 0x2D
104 #define ACCEL14_REG_FIFO_STATUS1 0x3A
105 #define ACCEL14_REG_FIFO_STATUS2 0x3B
106 #define ACCEL14_REG_TIMESTAMP0 0x40
107 #define ACCEL14_REG_TIMESTAMP1 0x41
108 #define ACCEL14_REG_TIMESTAMP2 0x42
109 #define ACCEL14_REG_TIMESTAMP3 0x43
110 #define ACCEL14_REG_SLOPE_EN 0x56
111 #define ACCEL14_REG_INTERRUPTS_EN 0x58
112 #define ACCEL14_REG_WAKE_UP_THS 0x5B
113 #define ACCEL14_REG_WAKE_UP_DUR 0x5C
114 #define ACCEL14_REG_MD1_CFG 0x5E
115 #define ACCEL14_REG_MD2_CFG 0x5F
116 #define ACCEL14_REG_INTERNAL_FREQ_FINE 0x63
117 #define ACCEL14_REG_X_OFS_USR 0x73
118 #define ACCEL14_REG_Y_OFS_USR 0x74
119 #define ACCEL14_REG_Z_OFS_USR 0x75
120 #define ACCEL14_REG_FIFO_DATA_OUT_TAG 0x78
121 #define ACCEL14_REG_FIFO_DATA_OUT_X_L 0x79
122 #define ACCEL14_REG_FIFO_DATA_OUT_X_H 0x7A
123 #define ACCEL14_REG_FIFO_DATA_OUT_Y_L 0x7B
124 #define ACCEL14_REG_FIFO_DATA_OUT_Y_H 0x7C
125 #define ACCEL14_REG_FIFO_DATA_OUT_Z_L 0x7D
126 #define ACCEL14_REG_FIFO_DATA_OUT_Z_H 0x7E
127 
133 #define ACCEL14_ID_VALUE 0x7B
134 
140 #define ACCEL14_CTRL1_XL_POWER_BIT_MASK 0xE0
141 #define ACCEL14_CTRL1_XL_POWER_DOWN 0x00
142 #define ACCEL14_CTRL1_XL_POWER_UP 0xA0
143 
144 #define ACCEL14_CTRL1_XL_HIGH_RES_BIT_MASK 0x02
145 #define ACCEL14_CTRL1_XL_HIGH_RES_FS 0x00
146 #define ACCEL14_CTRL1_XL_HIGH_RES_SS 0x02
147 
148 #define ACCEL14_CTRL1_XL_GSEL_BIT_MASK 0x0C
149 #define ACCEL14_CTRL1_XL_GSEL_2G 0x00
150 #define ACCEL14_CTRL1_XL_GSEL_16G 0x04
151 #define ACCEL14_CTRL1_XL_GSEL_4G 0x08
152 #define ACCEL14_CTRL1_XL_GSEL_8G 0x0C
153 
154 #define ACCEL14_COEF_RES_2G 0.061
155 #define ACCEL14_COEF_RES_4G 0.122
156 #define ACCEL14_COEF_RES_8G 0.244
157 #define ACCEL14_COEF_RES_16G 0.488
158 
164 #define ACCEL14_CTRL3_C_BOOT_NORMAL 0x00
165 #define ACCEL14_CTRL3_C_BOOT_REBOOT 0x80
166 #define ACCEL14_CTRL3_C_BDU_CONTINUOUS 0x00
167 #define ACCEL14_CTRL3_C_BDU_READ_UPDATE 0x40
168 #define ACCEL14_CTRL3_C_INT_ACTIVE_HIGH 0x00
169 #define ACCEL14_CTRL3_C_INT_ACTIVE_LOW 0x20
170 #define ACCEL14_CTRL3_C_PP_OD_PUSH_PULL 0x00
171 #define ACCEL14_CTRL3_C_PP_OD_OPEN_DRAIN 0x10
172 #define ACCEL14_CTRL3_C_SIM_SPI_4_WIRE 0x00
173 #define ACCEL14_CTRL3_C_SIM_SPI_3_WIRE 0x08
174 #define ACCEL14_CTRL3_C_IF_INC_DISABLE 0x00
175 #define ACCEL14_CTRL3_C_IF_INC_ENABLE 0x04
176 #define ACCEL14_CTRL3_C_SW_RESET_DIS 0x00
177 #define ACCEL14_CTRL3_C_SW_RESET_EN 0x01
178 
184 #define ACCEL14_CTRL4_C_INT1_2_DIV 0x00
185 #define ACCEL14_CTRL4_C_INT1_2_LOGIC_INT1 0x20
186 #define ACCEL14_CTRL4_C_DRDY_MASK_DIS 0x00
187 #define ACCEL14_CTRL4_C_DRDY_MASK_EN 0x10
188 #define ACCEL14_CTRL4_C_SPI_I2C_EN 0x00
189 #define ACCEL14_CTRL4_C_I2C_DISABLE 0x04
190 #define ACCEL14_CTRL4_C_3REGOUT_EN 0x00
191 #define ACCEL14_CTRL4_C_1AX_EN 0x01
192 
198 #define ACCEL14_CTRL5_C_ROUNDING_NO 0x00
199 #define ACCEL14_CTRL5_C_ROUNDING_EN 0x20
200 #define ACCEL14_CTRL5_C_ST_NORMAL 0x00
201 #define ACCEL14_CTRL5_C_ST_POSITIVE 0x01
202 #define ACCEL14_CTRL5_C_ST_NEGATIVE 0x02
203 
209 #define ACCEL14_CTRL6_C_USR_OFF_W_10 0x00
210 #define ACCEL14_CTRL6_C_USR_OFF_W_2 0x08
211 #define ACCEL14_CTRL6_C_SEL_3_AXES 0x00
212 #define ACCEL14_CTRL6_C_SEL_X_AXES 0x01
213 #define ACCEL14_CTRL6_C_SEL_Y_AXES 0x02
214 #define ACCEL14_CTRL6_C_SEL_Z_AXES 0x03
215 
221 #define ACCEL14_CTRL7_C_USR_OFF_OUT 0x00
222 #define ACCEL14_CTRL7_C_USR_ON_OUT 0x02
223 
229 #define ACCEL14_CTRL8_ODR_4 0x00
230 #define ACCEL14_CTRL8_ODR_10 0x20
231 #define ACCEL14_CTRL8_ODR_20 0x40
232 #define ACCEL14_CTRL8_ODR_45 0x60
233 #define ACCEL14_CTRL8_ODR_100 0x80
234 #define ACCEL14_CTRL8_ODR_200 0xA0
235 #define ACCEL14_CTRL8_ODR_400 0xC0
236 #define ACCEL14_CTRL8_ODR_800 0xE0
237 #define ACCEL14_CTRL8_HIGH_PASS_DIS 0x00
238 #define ACCEL14_CTRL8_HIGH_PASS_EN 0x10
239 #define ACCEL14_CTRL8_LPF2_HPF_DIS 0x00
240 #define ACCEL14_CTRL8_LPF2_HPF_EN 0x08
241 
247 #define ACCEL14_CTRL10_TIMESTAMP_DIS 0x00
248 #define ACCEL14_CTRL10_TIMESTAMP_EN 0x20
249 
255 #define ACCEL14_CHECK_ID_ERROR 0x00
256 #define ACCEL14_CHECK_ID_SUCCESS 0x01
257 
263 #define ACCEL14_STATUS_DATA_READY 0x05
264 #define ACCEL14_STATUS_TEMP_READY 0x04
265 #define ACCEL14_STATUS_ACCEL_READY 0x01
266 #define ACCEL14_NEW_DATA_NO_DATA 0x00
267 #define ACCEL14_NEW_DATA_AVAILABLE 0x01
268 
274 #define ACCEL14_SPI_WRITE 0x00
275 #define ACCEL14_SPI_READ 0x80
276 
282 #define ACCEL14_DUMMY 0x00
283  // End group macro
286 // --------------------------------------------------------------- PUBLIC TYPES
292 typedef struct
293 {
294  int16_t x;
295  int16_t y;
296  int16_t z;
297 
299 
300 typedef struct
301 {
302  float accel_x;
303  float accel_y;
304  float accel_z;
305 
307 
311 typedef struct
312 {
313  // Input pins
314 
315  digital_in_t i1;
316  digital_in_t i2;
317 
318  // Modules
319 
320  spi_master_t spi;
321  pin_name_t chip_select;
322 
323 } accel14_t;
324 
328 typedef struct
329 {
330  // Communication gpio pins
331 
332  pin_name_t miso;
333  pin_name_t mosi;
334  pin_name_t sck;
335  pin_name_t cs;
336 
337  // Additional gpio pins
338 
339  pin_name_t i2;
340  pin_name_t i1;
341 
342  // static variable
343 
344  uint32_t spi_speed;
345  spi_master_mode_t spi_mode;
346  spi_master_chip_select_polarity_t cs_polarity;
347 
348 } accel14_cfg_t;
349  // End types group
351 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
352 
357 #ifdef __cplusplus
358 extern "C"{
359 #endif
360 
369 void accel14_cfg_setup ( accel14_cfg_t *cfg );
370 
379 
387 void accel14_default_cfg ( accel14_t *ctx );
388 
401 (
402  accel14_t *ctx,
403  uint8_t *wr_buf,
404  uint16_t wr_len,
405  uint8_t *rd_buf,
406  uint16_t rd_len
407 );
408 
421 void accel14_generic_write ( accel14_t *ctx, uint8_t reg, uint8_t tx_data );
422 
437 uint8_t accel14_generic_read ( accel14_t *ctx, uint8_t reg );
438 
452 void accel14_multi_read ( accel14_t *ctx, uint8_t reg, uint8_t *p_rx_data, uint8_t n_bytes );
453 
467 uint8_t accel14_check_communication ( accel14_t *ctx );
468 
484 
500 
513 void accel14_get_data ( accel14_t *ctx, accel14_accel_t *accel_data );
514 
527 float accel14_get_temperature ( accel14_t *ctx );
528 
541 void accel14_read_accel ( accel14_t *ctx, accel14_accel_fs_xl_t *accel_fs );
542 
557 uint8_t accel14_check_int1 ( accel14_t *ctx );
558 
573 uint8_t accel14_check_int2 ( accel14_t *ctx );
574 
575 #ifdef __cplusplus
576 }
577 #endif
578 #endif // _ACCEL14_H_
579  // End public_function group
582 
583 // ------------------------------------------------------------------------- END
ACCEL14_RETVAL
#define ACCEL14_RETVAL
Definition: accel14.h:65
accel14_t::i2
digital_in_t i2
Definition: accel14.h:316
accel14_cfg_t::i1
pin_name_t i1
Definition: accel14.h:340
accel14_check_communication
uint8_t accel14_check_communication(accel14_t *ctx)
Check communication function.
accel14_cfg_t::miso
pin_name_t miso
Definition: accel14.h:332
accel14_cfg_t::cs
pin_name_t cs
Definition: accel14.h:335
accel14_check_accel_data_ready
uint8_t accel14_check_accel_data_ready(accel14_t *ctx)
Check accel data ready function.
accel14_cfg_t::sck
pin_name_t sck
Definition: accel14.h:334
accel14_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: accel14.h:346
accel14_get_data
void accel14_get_data(accel14_t *ctx, accel14_accel_t *accel_data)
Get Accel data function.
accel14_check_temp_data_ready
uint8_t accel14_check_temp_data_ready(accel14_t *ctx)
Check temperature data ready function.
accel14_t::spi
spi_master_t spi
Definition: accel14.h:320
accel14_cfg_t
Click configuration structure definition.
Definition: accel14.h:328
accel14_accel_t::z
int16_t z
Definition: accel14.h:296
accel14_generic_read
uint8_t accel14_generic_read(accel14_t *ctx, uint8_t reg)
Generic read function.
accel14_accel_fs_xl_t::accel_y
float accel_y
Definition: accel14.h:303
accel14_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: accel14.h:345
accel14_t
Click ctx object definition.
Definition: accel14.h:311
accel14_cfg_t::i2
pin_name_t i2
Definition: accel14.h:339
accel14_accel_t
Definition: accel14.h:292
accel14_get_temperature
float accel14_get_temperature(accel14_t *ctx)
Get temperature function.
accel14_read_accel
void accel14_read_accel(accel14_t *ctx, accel14_accel_fs_xl_t *accel_fs)
Read Accel data function.
accel14_multi_read
void accel14_multi_read(accel14_t *ctx, uint8_t reg, uint8_t *p_rx_data, uint8_t n_bytes)
Generic read sequence function.
accel14_default_cfg
void accel14_default_cfg(accel14_t *ctx)
Click Default Configuration function.
accel14_accel_t::x
int16_t x
Definition: accel14.h:294
accel14_accel_fs_xl_t::accel_z
float accel_z
Definition: accel14.h:304
accel14_accel_fs_xl_t::accel_x
float accel_x
Definition: accel14.h:302
accel14_accel_fs_xl_t
Definition: accel14.h:300
accel14_t::chip_select
pin_name_t chip_select
Definition: accel14.h:321
accel14_cfg_t::spi_speed
uint32_t spi_speed
Definition: accel14.h:344
accel14_check_int2
uint8_t accel14_check_int2(accel14_t *ctx)
Get interrupt 2 ststus function.
accel14_generic_write
void accel14_generic_write(accel14_t *ctx, uint8_t reg, uint8_t tx_data)
Generic write function.
accel14_check_int1
uint8_t accel14_check_int1(accel14_t *ctx)
Get interrupt 1 ststus function.
accel14_t::i1
digital_in_t i1
Definition: accel14.h:315
accel14_accel_t::y
int16_t y
Definition: accel14.h:295
accel14_cfg_setup
void accel14_cfg_setup(accel14_cfg_t *cfg)
Config Object Initialization function.
accel14_generic_transfer
void accel14_generic_transfer(accel14_t *ctx, uint8_t *wr_buf, uint16_t wr_len, uint8_t *rd_buf, uint16_t rd_len)
Generic transfer function.
accel14_cfg_t::mosi
pin_name_t mosi
Definition: accel14.h:333
accel14_init
ACCEL14_RETVAL accel14_init(accel14_t *ctx, accel14_cfg_t *cfg)
Initialization function.