Go to the documentation of this file.
42 #ifdef PREINIT_SUPPORTED
46 #ifdef MikroCCoreVersion
47 #if MikroCCoreVersion >= 1
52 #include "drv_digital_out.h"
53 #include "drv_digital_in.h"
54 #include "drv_i2c_master.h"
55 #include "drv_spi_master.h"
68 #define C9DOF3_MAP_MIKROBUS( cfg, mikrobus ) \
69 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
70 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
71 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
72 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
73 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
74 cfg.cs1 = MIKROBUS( mikrobus, MIKROBUS_CS ); \
75 cfg.cs2 = MIKROBUS( mikrobus, MIKROBUS_RST ); \
76 cfg.cs3 = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
77 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
84 #define C9DOF3_MASTER_I2C 0
85 #define C9DOF3_MASTER_SPI 1
92 #define C9DOF3_RETVAL uint8_t
99 #define C9DOF3_ACC_I2C_SLAVE_ADDRESS 0x18
100 #define C9DOF3_GYRO_I2C_SLAVE_ADDRESS 0x68
101 #define C9DOF3_MAG_I2C_SLAVE_ADDRESS 0x10
108 #define C9DOF3_ACC_DEVICE 0xFA
109 #define C9DOF3_GYRO_DEVICE 0x0F
110 #define C9DOF3_MAG_DEVICE 0x32
117 #define C9DOF3_INITIATED_SOFT_RESET 0xB6
124 #define C9DOF3_REG_ACC_WHO_AM_I 0x00
125 #define C9DOF3_REG_ACC_DATA_START 0x02
126 #define C9DOF3_REG_ACC_D_X_LSB 0x02
127 #define C9DOF3_REG_ACC_D_X_MSB 0x03
128 #define C9DOF3_REG_ACC_D_Y_LSB 0x04
129 #define C9DOF3_REG_ACC_D_Y_MSB 0x05
130 #define C9DOF3_REG_ACC_D_Z_LSB 0x06
131 #define C9DOF3_REG_ACC_D_Z_MSB 0x07
132 #define C9DOF3_REG_ACC_D_TEMP 0x08
133 #define C9DOF3_REG_ACC_INT_STATUS_0 0x09
134 #define C9DOF3_REG_ACC_INT_STATUS_1 0x0A
135 #define C9DOF3_REG_ACC_INT_STATUS_2 0x0B
136 #define C9DOF3_REG_ACC_INT_STATUS_3 0x0C
137 #define C9DOF3_REG_ACC_FIFO_STATUS 0x0E
138 #define C9DOF3_REG_ACC_PMU_RANGE 0x0F
139 #define C9DOF3_REG_ACC_PMU_BW 0x10
140 #define C9DOF3_REG_ACC_PMU_LPW 0x11
141 #define C9DOF3_REG_ACC_PMU_LOW_POWER 0x12
142 #define C9DOF3_REG_ACC_D_HBW 0x13
143 #define C9DOF3_REG_ACC_BGW_SOFTRESET 0x14
144 #define C9DOF3_REG_ACC_INT_EN_0 0x16
145 #define C9DOF3_REG_ACC_INT_EN_1 0x17
146 #define C9DOF3_REG_ACC_INT_EN_2 0x18
147 #define C9DOF3_REG_ACC_INT_MAP_0 0x19
148 #define C9DOF3_REG_ACC_INT_MAP_1 0x1A
149 #define C9DOF3_REG_ACC_INT_MAP_2 0x1B
150 #define C9DOF3_REG_ACC_INT_SRC 0x1E
151 #define C9DOF3_REG_ACC_INT_OUT_CTRL 0x20
152 #define C9DOF3_REG_ACC_INT_RST_LATCH 0x21
153 #define C9DOF3_REG_ACC_INT_0 0x22
154 #define C9DOF3_REG_ACC_INT_1 0x23
155 #define C9DOF3_REG_ACC_INT_2 0x24
156 #define C9DOF3_REG_ACC_INT_3 0x25
157 #define C9DOF3_REG_ACC_INT_4 0x26
158 #define C9DOF3_REG_ACC_INT_5 0x27
159 #define C9DOF3_REG_ACC_INT_6 0x28
160 #define C9DOF3_REG_ACC_INT_7 0x29
161 #define C9DOF3_REG_ACC_INT_8 0x2A
162 #define C9DOF3_REG_ACC_INT_9 0x2B
163 #define C9DOF3_REG_ACC_INT_A 0x2C
164 #define C9DOF3_REG_ACC_INT_B 0x2D
165 #define C9DOF3_REG_ACC_INT_C 0x2E
166 #define C9DOF3_REG_ACC_INT_D 0x2F
167 #define C9DOF3_REG_ACC_FIFO_CONFIG_0 0x30
168 #define C9DOF3_REG_ACC_PMU_SELF_TEST 0x32
169 #define C9DOF3_REG_ACC_TRIM_NVM_CTRL 0x33
170 #define C9DOF3_REG_ACC_BGW_SPI3_WDT 0x34
171 #define C9DOF3_REG_ACC_OFC_CTRL 0x36
172 #define C9DOF3_REG_ACC_OFC_SETTING 0x37
173 #define C9DOF3_REG_ACC_OFC_OFFSET_X 0x38
174 #define C9DOF3_REG_ACC_OFC_OFFSET_Y 0x39
175 #define C9DOF3_REG_ACC_OFC_OFFSET_Z 0x3A
176 #define C9DOF3_REG_ACC_TRIM_GPO 0x3B
177 #define C9DOF3_REG_ACC_TRIM_GP1 0x3C
178 #define C9DOF3_REG_ACC_FIFO_CONFIG_1 0x3E
179 #define C9DOF3_REG_ACC_FIFO_DATA 0x3F
186 #define C9DOF3_REG_GYRO_WHO_AM_I 0x00
187 #define C9DOF3_REG_GYRO_DATA_START 0x02
188 #define C9DOF3_REG_GYRO_RATE_X_LSB 0x02
189 #define C9DOF3_REG_GYRO_RATE_X_MSB 0x03
190 #define C9DOF3_REG_GYRO_RATE_Y_LSB 0x04
191 #define C9DOF3_REG_GYRO_RATE_Y_MSB 0x05
192 #define C9DOF3_REG_GYRO_RATE_Z_LSB 0x06
193 #define C9DOF3_REG_GYRO_RATE_Z_MSB 0x07
194 #define C9DOF3_REG_GYRO_INT_STATUS_0 0x09
195 #define C9DOF3_REG_GYRO_INT_STATUS_1 0x0A
196 #define C9DOF3_REG_GYRO_INT_STATUS_2 0x0B
197 #define C9DOF3_REG_GYRO_INT_STATUS_3 0x0C
198 #define C9DOF3_REG_GYRO_FIFO_STATUS 0x0E
199 #define C9DOF3_REG_GYRO_RANGE 0x0F
200 #define C9DOF3_REG_GYRO_BW 0x10
201 #define C9DOF3_REG_GYRO_LPM1 0x11
202 #define C9DOF3_REG_GYRO_LPM2 0x12
203 #define C9DOF3_REG_GYRO_RATE_HBW 0x13
204 #define C9DOF3_REG_GYRO_BGW_SOFTRESET 0x14
205 #define C9DOF3_REG_GYRO_INT_EN_0 0x15
206 #define C9DOF3_REG_GYRO_INT_EN_1 0x16
207 #define C9DOF3_REG_GYRO_INT_MAP_0 0x17
208 #define C9DOF3_REG_GYRO_INT_MAP_1 0x18
209 #define C9DOF3_REG_GYRO_INT_MAP_2 0x19
210 #define C9DOF3_REG_GYRO_INT_SRC_1 0x1A
211 #define C9DOF3_REG_GYRO_INT_SRC_2 0x1B
212 #define C9DOF3_REG_GYRO_INT_SRC_3 0x1C
213 #define C9DOF3_REG_GYRO_FIFO_EN 0x1E
214 #define C9DOF3_REG_GYRO_INT_RST_LATCH 0x21
215 #define C9DOF3_REG_GYRO_HIGH_TH_X 0x22
216 #define C9DOF3_REG_GYRO_HIGH_DUR_X 0x23
217 #define C9DOF3_REG_GYRO_HIGH_TH_Y 0x24
218 #define C9DOF3_REG_GYRO_HIGH_DUR_Y 0x25
219 #define C9DOF3_REG_GYRO_HIGH_TH_Z 0x26
220 #define C9DOF3_REG_GYRO_HIGH_DUR_Z 0x27
221 #define C9DOF3_REG_GYRO_SOC 0x31
222 #define C9DOF3_REG_GYRO_A_FOC 0x32
223 #define C9DOF3_REG_GYRO_TRIM_NVM_CTRL 0x33
224 #define C9DOF3_REG_GYRO_BGW_SPI3_WDT 0x34
225 #define C9DOF3_REG_GYRO_OFC1 0x36
226 #define C9DOF3_REG_GYRO_OFC2 0x37
227 #define C9DOF3_REG_GYRO_OFC3 0x38
228 #define C9DOF3_REG_GYRO_OFC4 0x39
229 #define C9DOF3_REG_GYRO_TRIM_GP0 0x3A
230 #define C9DOF3_REG_GYRO_TRIM_GP1 0x3B
231 #define C9DOF3_REG_GYRO_BIST 0x3C
232 #define C9DOF3_REG_GYRO_FIFO_CONFIG_0 0x3D
233 #define C9DOF3_REG_GYRO_FIFO_CONFIG_1 0x3E
240 #define C9DOF3_REG_MAG_WHO_AM_I 0x40
241 #define C9DOF3_REG_MAG_DATA_START 0x42
242 #define C9DOF3_REG_MAG_XOUT_LSB 0x42
243 #define C9DOF3_REG_MAG_XOUT_MSB 0x43
244 #define C9DOF3_REG_MAG_YOUT_LSB 0x44
245 #define C9DOF3_REG_MAG_YOUT_MSB 0x45
246 #define C9DOF3_REG_MAG_ZOUT_LSB 0x46
247 #define C9DOF3_REG_MAG_ZOUT_MSB 0x47
248 #define C9DOF3_REG_MAG_ROUT_LSB 0x48
249 #define C9DOF3_REG_MAG_ROUT_MSB 0x49
250 #define C9DOF3_REG_MAG_INT_STATUS 0x4A
251 #define C9DOF3_REG_MAG_PWR_CNTL1 0x4B
252 #define C9DOF3_REG_MAG_PWR_CNTL2 0x4C
253 #define C9DOF3_REG_MAG_INT_EN_1 0x4D
254 #define C9DOF3_REG_MAG_INT_EN_2 0x4E
255 #define C9DOF3_REG_MAG_LOW_THS 0x4F
256 #define C9DOF3_REG_MAG_HIGH_THS 0x50
257 #define C9DOF3_REG_MAG_REP_XY 0x51
258 #define C9DOF3_REG_MAG_REP_Z 0x52
265 #define C9DOF3_ACC_RANGE_2 0x03
266 #define C9DOF3_ACC_RANGE_4 0x05
267 #define C9DOF3_ACC_RANGE_8 0x08
268 #define C9DOF3_ACC_RANGE_16 0x0C
275 #define C9DOF3_ACC_PMU_BW_7_81 0x08
276 #define C9DOF3_ACC_PMU_BW_15_63 0x09
277 #define C9DOF3_ACC_PMU_BW_31_25 0x0A
278 #define C9DOF3_ACC_PMU_BW_62_5 0x0B
279 #define C9DOF3_ACC_PMU_BW_125 0x0C
280 #define C9DOF3_ACC_PMU_BW_250 0x0D
281 #define C9DOF3_ACC_PMU_BW_500 0x0E
282 #define C9DOF3_ACC_PMU_BW_1000 0x0F
289 #define C9DOF3_ACC_PMU_LPW_MODE_NOMAL 0x00
290 #define C9DOF3_ACC_PMU_LPW_MODE_DEEP_SUSPEND 0x20
291 #define C9DOF3_ACC_PMU_LPW_MODE_LOW_POWER 0x40
292 #define C9DOF3_ACC_PMU_LPW_MODE_SUSPEND 0x80
299 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_0_5MS 0x00
300 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_1MS 0x0C
301 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_2MS 0x0E
302 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_4MS 0x10
303 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_6MS 0x12
304 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_10MS 0x14
305 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_25MS 0x16
306 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_50MS 0x18
307 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_100MS 0x1A
308 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_500MS 0x1C
309 #define C9DOF3_ACC_PMU_LPW_SLEEP_DUR_1S 0x1E
316 #define C9DOF3_GYRO_LPM1_MODE_NOMAL 0x00
317 #define C9DOF3_GYRO_LPM1_MODE_DEEP_SUSPEND 0x01
318 #define C9DOF3_GYRO_LPM1_MODE_SUSPEND 0x10
325 #define C9DOF3_GYRO_RANGE_16_4 0x00
326 #define C9DOF3_GYRO_RANGE_32_8 0x01
327 #define C9DOF3_GYRO_RANGE_65_6 0x02
328 #define C9DOF3_GYRO_RANGE_131_2 0x03
329 #define C9DOF3_GYRO_RANGE_262_4 0x04
336 #define C9DOF3_GYRO_BW_32 0x07
337 #define C9DOF3_GYRO_BW_64 0x06
338 #define C9DOF3_GYRO_BW_12 0x05
339 #define C9DOF3_GYRO_BW_23 0x04
340 #define C9DOF3_GYRO_BW_47 0x03
341 #define C9DOF3_GYRO_BW_116 0x02
342 #define C9DOF3_GYRO_BW_230 0x01
343 #define C9DOF3_GYRO_BW_523 0x00
350 #define C9DOF3_GYRO_LPM1_SLEEP_DUR_2MS 0x00
351 #define C9DOF3_GYRO_LPM1_SLEEP_DUR_4MS 0x01
352 #define C9DOF3_GYRO_LPM1_SLEEP_DUR_5MS 0x02
353 #define C9DOF3_GYRO_LPM1_SLEEP_DUR_8MS 0x03
354 #define C9DOF3_GYRO_LPM1_SLEEP_DUR_10MS 0x04
355 #define C9DOF3_GYRO_LPM1_SLEEP_DUR_15MS 0x05
356 #define C9DOF3_GYRO_LPM1_SLEEP_DUR_18MS 0x06
357 #define C9DOF3_GYRO_LPM1_SLEEP_DUR_20MS 0x07
364 #define C9DOF3_MAG_POW_CTL_SOFT_RESET 0x82
365 #define C9DOF3_MAG_POW_CTL_SLEEP_MODE 0x01
366 #define C9DOF3_MAG_POW_CTL_SUSPEND_MODE 0x00
373 #define C9DOF3_MAG_DATA_RATE_10 0x00
374 #define C9DOF3_MAG_DATA_RATE_2 0x08
375 #define C9DOF3_MAG_DATA_RATE_6 0x10
376 #define C9DOF3_MAG_DATA_RATE_8 0x18
377 #define C9DOF3_MAG_DATA_RATE_15 0x20
378 #define C9DOF3_MAG_DATA_RATE_20 0x28
379 #define C9DOF3_MAG_DATA_RATE_25 0x30
380 #define C9DOF3_MAG_DATA_RATE_30 0x38
387 #define C9DOF3_MAG_XY_REPET_9 0x04
388 #define C9DOF3_MAG_Z_REPET_15 0x0F
395 #define C9DOF3_BIT_MASK_SPI_CMD_WRITE 0x7F
396 #define C9DOF3_BIT_MASK_SPI_CMD_READ 0x80
397 #define C9DOF3_SPI_COMMUNICATION_DUMMY 0x00
404 #define C9DOF3_ID_CHECK_ERROR 0x00
405 #define C9DOF3_ID_CHECK_SUCCESS 0x01
406 #define C9DOF3_ACC_COMM_ERROR 0x00
407 #define C9DOF3_ACC_COMM_SUCCESS 0x04
408 #define C9DOF3_GYRO_COMM_ERROR 0x00
409 #define C9DOF3_GYRO_COMM_SUCCESS 0x02
410 #define C9DOF3_MAG_COMM_ERROR 0x00
411 #define C9DOF3_MAG_COMM_SUCCESS 0x01
418 #define COMMUNICATION_MODE_ACCEL 0x01
419 #define COMMUNICATION_MODE_GYRO 0x02
420 #define COMMUNICATION_MODE_MAG 0x03
427 #define C9DOF3_PIN_STATE_LOW 0x00
428 #define C9DOF3_PIN_STATE_HIGH 0x01
void c9dof3_drv_interface_selection(c9dof3_cfg_t *cfg, c9dof3_drv_t drv_sel)
9DOF 3 driver interface setup function.
uint32_t i2c_speed
Definition: c9dof3.h:509
Click configuration structure definition.
Definition: c9dof3.h:491
@ C9DOF3_DRV_SEL_SPI
Definition: c9dof3.h:444
i2c_master_t i2c
Definition: c9dof3.h:471
pin_name_t sck
Definition: c9dof3.h:498
uint8_t i2c_address
Definition: c9dof3.h:510
void c9dof3_read_gyro_data(c9dof3_t *ctx, c9dof3_gyro_t *gyro_data)
Read Gyro data function.
void c9dof3_read_accel_data(c9dof3_t *ctx, c9dof3_accel_t *accel_data)
Read Accel data function.
@ C9DOF3_OK
Definition: c9dof3.h:550
int16_t x
Definition: c9dof3.h:530
c9dof3_master_io_t write_f
Definition: c9dof3.h:480
c9dof3_drv_t drv_sel
Definition: c9dof3.h:516
c9dof3_drv_t
9DOF 3 Click driver selector.
Definition: c9dof3.h:443
void c9dof3_get_data(c9dof3_t *ctx, c9dof3_accel_t *accel_data, c9dof3_gyro_t *gyro_data, c9dof3_mag_t *mag_data)
Read Accel, Gyro and Mag data function.
@ C9DOF3_ERROR
Definition: c9dof3.h:551
c9dof3_gyro_t gyro_data
Definition: main.c:39
spi_master_t spi
Definition: c9dof3.h:472
pin_name_t int_pin
Definition: c9dof3.h:505
uint8_t c9dof3_check_communication(c9dof3_t *ctx)
Check communication function.
int16_t y
Definition: c9dof3.h:539
void c9dof3_generic_read(c9dof3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
pin_name_t cs3
Definition: c9dof3.h:501
spi_master_mode_t spi_mode
Definition: c9dof3.h:513
int16_t z
Definition: c9dof3.h:540
@ C9DOF3_DRV_SEL_I2C
Definition: c9dof3.h:445
void c9dof3_default_cfg(c9dof3_t *ctx)
Click Default Configuration function.
int16_t z
Definition: c9dof3.h:532
c9dof3_return_value_t
9DOF 3 Click return value data.
Definition: c9dof3.h:549
struct c9dof3_s c9dof3_t
Click ctx object definition.
digital_out_t cs3
Definition: c9dof3.h:463
void(* c9dof3_master_io_t)(struct c9dof3_s *, uint8_t, uint8_t *, uint8_t)
9DOF 3 Click driver interface.
Definition: c9dof3.h:452
pin_name_t mosi
Definition: c9dof3.h:497
int16_t x
Definition: c9dof3.h:538
Click ctx object definition.
Definition: c9dof3.h:458
pin_name_t cs1
Definition: c9dof3.h:499
C9DOF3_RETVAL c9dof3_init(c9dof3_t *ctx, c9dof3_cfg_t *cfg)
Initialization function.
spi_master_chip_select_polarity_t cs_polarity
Definition: c9dof3.h:514
pin_name_t chip_select
Definition: c9dof3.h:477
digital_in_t int_pin
Definition: c9dof3.h:467
digital_out_t cs2
Definition: c9dof3.h:462
pin_name_t scl
Definition: c9dof3.h:494
void c9dof3_generic_write(c9dof3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
void c9dof3_cfg_setup(c9dof3_cfg_t *cfg)
Config Object Initialization function.
int16_t y
Definition: c9dof3.h:531
c9dof3_master_io_t read_f
Definition: c9dof3.h:481
uint32_t spi_speed
Definition: c9dof3.h:512
pin_name_t cs2
Definition: c9dof3.h:500
pin_name_t miso
Definition: c9dof3.h:496
uint8_t slave_address
Definition: c9dof3.h:476
c9dof3_drv_t drv_sel
Definition: c9dof3.h:478
int16_t z
Definition: c9dof3.h:524
void c9dof3_read_mag_data(c9dof3_t *ctx, c9dof3_mag_t *mag_data)
Read Mag data function.
digital_out_t cs1
Definition: c9dof3.h:461
uint8_t c9dof3_check_interrupt(c9dof3_t *ctx)
Check interrupt status function.
pin_name_t sda
Definition: c9dof3.h:495
int16_t x
Definition: c9dof3.h:522
uint8_t sel_mode
Definition: c9dof3.h:483
c9dof3_mag_t mag_data
Definition: main.c:40
#define C9DOF3_RETVAL
Definition: c9dof3.h:92
c9dof3_accel_t accel_data
Definition: main.c:38
int16_t y
Definition: c9dof3.h:523