JeVois
1.22
JeVois Smart Embedded Machine Vision Toolkit
Share this page:
Tweet
Loading...
Searching...
No Matches
ICM20948_regs.H
Go to the documentation of this file.
1
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
//
3
// JeVois Smart Embedded Machine Vision Toolkit - Copyright (C) 2018 by Laurent Itti, the University of Southern
4
// California (USC), and iLab at USC. See http://iLab.usc.edu and http://jevois.org for information about this project.
5
//
6
// This file is part of the JeVois Smart Embedded Machine Vision Toolkit. This program is free software; you can
7
// redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software
8
// Foundation, version 2. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
9
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
10
// License for more details. You should have received a copy of the GNU General Public License along with this program;
11
// if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
12
//
13
// Contact information: Laurent Itti - 3641 Watt Way, HNB-07A - Los Angeles, CA 90089-2520 - USA.
14
// Tel: +1 213 740 3527 - itti@pollux.usc.edu - http://iLab.usc.edu - http://jevois.org
15
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
16
/*! \file */
17
18
// Direction bit to be or'd with register address when using SPI:
19
#define ICM20948_SPI_READ 0x80
20
#define ICM20948_SPI_WRITE 0x00
21
22
// This code inspired by:
23
24
/* *****************************************************************************
25
* file ICM20648.cpp
26
* *****************************************************************************
27
* section License
28
* <b>(C) Copyright 2017 Silicon Labs, http://www.silabs.com</b>
29
* *****************************************************************************
30
*
31
* SPDX-License-Identifier: Apache-2.0
32
*
33
* Licensed under the Apache License, Version 2.0 (the "License"); you may
34
* not use this file except in compliance with the License.
35
* You may obtain a copy of the License at
36
*
37
* http://www.apache.org/licenses/LICENSE-2.0
38
*
39
* Unless required by applicable law or agreed to in writing, software
40
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
41
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
42
* See the License for the specific language governing permissions and
43
* limitations under the License.
44
*
45
* ****************************************************************************/
46
47
/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
48
49
/**************************************************************************/
/**
50
* @name Error Codes
51
* @{
52
******************************************************************************/
53
#define ICM20948_OK 0x0000
/**< No errors */
54
#define ICM20948_ERROR_INVALID_DEVICE_ID 0x0001
/**< Invalid device ID */
55
/**@}*/
56
57
/**************************************************************************/
/**
58
* @name ICM20948 register banks
59
* @{
60
******************************************************************************/
61
#define ICM20948_BANK_0 (0 << 7)
/**< Register bank 0 */
62
#define ICM20948_BANK_1 (1 << 7)
/**< Register bank 1 */
63
#define ICM20948_BANK_2 (2 << 7)
/**< Register bank 2 */
64
#define ICM20948_BANK_3 (3 << 7)
/**< Register bank 3 */
65
/**@}*/
66
67
/**************************************************************************/
/**
68
* @name Register and associated bit definitions
69
* @{
70
******************************************************************************/
71
/***********************/
72
/* Bank 0 register map */
73
/***********************/
74
#define ICM20948_REG_WHO_AM_I (ICM20948_BANK_0 | 0x00)
/**< Device ID register */
75
76
#define ICM20948_REG_USER_CTRL (ICM20948_BANK_0 | 0x03)
/**< User control register */
77
#define ICM20948_BIT_DMP_EN 0x80
/**< DMP enable bit */
78
#define ICM20948_BIT_FIFO_EN 0x40
/**< FIFO enable bit */
79
#define ICM20948_BIT_I2C_MST_EN 0x20
/**< I2C master I/F enable bit */
80
#define ICM20948_BIT_I2C_IF_DIS 0x10
/**< Disable I2C, enable SPI bit */
81
#define ICM20948_BIT_DMP_RST 0x08
/**< DMP module reset bit */
82
#define ICM20948_BIT_DIAMOND_DMP_RST 0x04
/**< SRAM module reset bit */
83
84
#define ICM20948_REG_LP_CONFIG (ICM20948_BANK_0 | 0x05)
/**< Low Power mode config register */
85
#define ICM20948_BIT_I2C_MST_CYCLE 0x40
/**< I2C master cycle mode enable */
86
#define ICM20948_BIT_ACCEL_CYCLE 0x20
/**< Accelerometer cycle mode enable */
87
#define ICM20948_BIT_GYRO_CYCLE 0x10
/**< Gyroscope cycle mode enable */
88
89
#define ICM20948_REG_PWR_MGMT_1 (ICM20948_BANK_0 | 0x06)
/**< Power Management 1 register */
90
#define ICM20948_BIT_H_RESET 0x80
/**< Device reset bit */
91
#define ICM20948_BIT_SLEEP 0x40
/**< Sleep mode enable bit */
92
#define ICM20948_BIT_LP_EN 0x20
/**< Low Power feature enable bit */
93
#define ICM20948_BIT_TEMP_DIS 0x08
/**< Temperature sensor disable bit */
94
#define ICM20948_BIT_CLK_PLL 0x01
/**< Auto clock source selection setting */
95
96
#define ICM20948_REG_PWR_MGMT_2 (ICM20948_BANK_0 | 0x07)
/**< Power Management 2 register */
97
#define ICM20948_BIT_PWR_ACCEL_STBY 0x38
/**< Disable accelerometer */
98
#define ICM20948_BIT_PWR_GYRO_STBY 0x07
/**< Disable gyroscope */
99
#define ICM20948_BIT_PWR_ALL_OFF 0x7F
/**< Disable both accel and gyro */
100
101
#define ICM20948_REG_INT_PIN_CFG (ICM20948_BANK_0 | 0x0F)
/**< Interrupt Pin Configuration register */
102
#define ICM20948_BIT_INT_ACTL 0x80
/**< Active low setting bit */
103
#define ICM20948_BIT_INT_OPEN 0x40
/**< Open collector onfiguration bit */
104
#define ICM20948_BIT_INT_LATCH_EN 0x20
/**< Latch enable bit */
105
#define ICM20948_BIT_INT_ACTL_FSYNC 0x08
106
#define ICM20948_BIT_INT_FSYNC_EN 0x04
107
108
#define ICM20948_REG_INT_ENABLE (ICM20948_BANK_0 | 0x10)
/**< Interrupt Enable register */
109
#define ICM20948_BIT_FSYNC_INT_EN 0x80
/**< FSYNC interrupt enable bit */
110
#define ICM20948_BIT_WOM_INT_EN 0x08
/**< Wake-up On Motion enable bit */
111
#define ICM20948_BIT_DMP_INT_EN 0x02
112
113
#define ICM20948_REG_INT_ENABLE_1 (ICM20948_BANK_0 | 0x11)
/**< Interrupt Enable 1 register */
114
#define ICM20948_BIT_RAW_DATA_0_RDY_EN 0x01
/**< Raw data ready interrupt enable bit */
115
#define ICM20948_BIT_RAW_DATA_1_RDY_EN 0x02
/**< Raw data ready interrupt enable bit */
116
#define ICM20948_BIT_RAW_DATA_2_RDY_EN 0x04
/**< Raw data ready interrupt enable bit */
117
#define ICM20948_BIT_RAW_DATA_3_RDY_EN 0x08
/**< Raw data ready interrupt enable bit */
118
119
#define ICM20948_REG_INT_ENABLE_2 (ICM20948_BANK_0 | 0x12)
/**< Interrupt Enable 2 register */
120
#define ICM20948_BIT_FIFO_OVERFLOW_EN_0 0x01
/**< FIFO overflow interrupt enable bit */
121
122
#define ICM20948_REG_INT_ENABLE_3 (ICM20948_BANK_0 | 0x13)
/**< Interrupt Enable 3 register */
123
124
#define ICM20948_REG_I2C_MST_STATUS (ICM20948_BANK_0 | 0x17)
/**< Status of I2C master */
125
#define ICM20948_BIT_PASS_THROUGH 0x80
126
#define ICM20948_BIT_SLV4_DONE 0x40
127
#define ICM20948_BIT_LOST_ARB 0x20
128
#define ICM20948_BIT_SLV4_NACK 0x10
129
#define ICM20948_BIT_SLV3_NACK 0x08
130
#define ICM20948_BIT_SLV2_NACK 0x04
131
#define ICM20948_BIT_SLV1_NACK 0x02
132
#define ICM20948_BIT_SLV0_NACK 0x01
133
134
#define ICM20948_REG_DMP_INT_STATUS (ICM20948_BANK_0 | 0x18)
135
#define ICM20948_BIT_WAKE_ON_MOTION_INT 0x08
136
#define ICM20948_BIT_MSG_DMP_INT 0x0002
137
#define ICM20948_BIT_MSG_DMP_INT_0 0x0100
// CI Command
138
#define ICM20948_BIT_MSG_DMP_INT_2 0x0200
// CIM Command - SMD
139
#define ICM20948_BIT_MSG_DMP_INT_3 0x0400
// CIM Command - Pedometer
140
#define ICM20948_BIT_MSG_DMP_INT_4 0x1000
// CIM Command - Pedometer binning
141
#define ICM20948_BIT_MSG_DMP_INT_5 0x2000
// CIM Command - Bring To See Gesture
142
#define ICM20948_BIT_MSG_DMP_INT_6 0x4000
// CIM Command - Look To See Gesture
143
144
#define ICM20948_REG_INT_STATUS (ICM20948_BANK_0 | 0x19)
/**< Interrupt Status register */
145
#define ICM20948_BIT_WOM_INT 0x08
/**< Wake-up on motion interrupt occured bit */
146
#define ICM20948_BIT_PLL_RDY 0x04
/**< PLL ready interrupt occured bit */
147
#define ICM20948_BIT_DMP_INT 0x02
148
149
#define ICM20948_REG_INT_STATUS_1 (ICM20948_BANK_0 | 0x1A)
/**< Interrupt Status 1 register */
150
#define ICM20948_BIT_RAW_DATA_0_RDY_INT 0x01
/**< Raw data ready interrupt occured bit */
151
152
#define ICM20948_REG_INT_STATUS_2 (ICM20948_BANK_0 | 0x1B)
/**< Interrupt Status 2 register */
153
154
#define ICM20948_REG_SINGLE_FIFO_PRIORITY_SEL (ICM20948_BANK_0 | 0x26)
155
156
#define ICM20948_REG_ACCEL_XOUT_H_SH (ICM20948_BANK_0 | 0x2D)
/**< Accelerometer X-axis data high byte */
157
#define ICM20948_REG_ACCEL_XOUT_L_SH (ICM20948_BANK_0 | 0x2E)
/**< Accelerometer X-axis data low byte */
158
#define ICM20948_REG_ACCEL_YOUT_H_SH (ICM20948_BANK_0 | 0x2F)
/**< Accelerometer Y-axis data high byte */
159
#define ICM20948_REG_ACCEL_YOUT_L_SH (ICM20948_BANK_0 | 0x30)
/**< Accelerometer Y-axis data low byte */
160
#define ICM20948_REG_ACCEL_ZOUT_H_SH (ICM20948_BANK_0 | 0x31)
/**< Accelerometer Z-axis data high byte */
161
#define ICM20948_REG_ACCEL_ZOUT_L_SH (ICM20948_BANK_0 | 0x32)
/**< Accelerometer Z-axis data low byte */
162
163
#define ICM20948_REG_GYRO_XOUT_H_SH (ICM20948_BANK_0 | 0x33)
/**< Gyroscope X-axis data high byte */
164
#define ICM20948_REG_GYRO_XOUT_L_SH (ICM20948_BANK_0 | 0x34)
/**< Gyroscope X-axis data low byte */
165
#define ICM20948_REG_GYRO_YOUT_H_SH (ICM20948_BANK_0 | 0x35)
/**< Gyroscope Y-axis data high byte */
166
#define ICM20948_REG_GYRO_YOUT_L_SH (ICM20948_BANK_0 | 0x36)
/**< Gyroscope Y-axis data low byte */
167
#define ICM20948_REG_GYRO_ZOUT_H_SH (ICM20948_BANK_0 | 0x37)
/**< Gyroscope Z-axis data high byte */
168
#define ICM20948_REG_GYRO_ZOUT_L_SH (ICM20948_BANK_0 | 0x38)
/**< Gyroscope Z-axis data low byte */
169
170
#define ICM20948_REG_TEMPERATURE_H (ICM20948_BANK_0 | 0x39)
/**< Temperature data high byte */
171
#define ICM20948_REG_TEMPERATURE_L (ICM20948_BANK_0 | 0x3A)
/**< Temperature data low byte */
172
#define ICM20948_REG_TEMP_CONFIG (ICM20948_BANK_0 | 0x53)
/**< Temperature Configuration register */
173
174
#define ICM20948_REG_FIFO_EN_1 (ICM20948_BANK_0 | 0x66)
/**< FIFO Enable 1 register */
175
#define ICM20948_BIT_SLV_0_FIFO_EN 0x01
176
177
#define ICM20948_REG_FIFO_EN_2 (ICM20948_BANK_0 | 0x67)
/**< FIFO Enable 2 register */
178
#define ICM20948_BIT_ACCEL_FIFO_EN 0x10
/**< Enable writing acceleration data to FIFO bit */
179
#define ICM20948_BITS_GYRO_FIFO_EN 0x0E
/**< Enable writing gyroscope data to FIFO bit */
180
181
#define ICM20948_REG_FIFO_RST (ICM20948_BANK_0 | 0x68)
/**< FIFO Reset register */
182
#define ICM20948_REG_FIFO_MODE (ICM20948_BANK_0 | 0x69)
/**< FIFO Mode register */
183
184
#define ICM20948_REG_FIFO_COUNT_H (ICM20948_BANK_0 | 0x70)
/**< FIFO data count high byte */
185
#define ICM20948_REG_FIFO_COUNT_L (ICM20948_BANK_0 | 0x71)
/**< FIFO data count low byte */
186
#define ICM20948_REG_FIFO_R_W (ICM20948_BANK_0 | 0x72)
/**< FIFO Read/Write register */
187
188
#define ICM20948_REG_DATA_RDY_STATUS (ICM20948_BANK_0 | 0x74)
/**< Data Ready Status register */
189
#define ICM20948_BIT_RAW_DATA_0_RDY 0x01
/**< Raw Data Ready bit */
190
191
#define ICM20948_REG_FIFO_CFG (ICM20948_BANK_0 | 0x76)
/**< FIFO Configuration register */
192
#define ICM20948_BIT_MULTI_FIFO_CFG 0x01
/**< Interrupt status for each sensor is required */
193
#define ICM20948_BIT_SINGLE_FIFO_CFG 0x00
/**< Interrupt status for only a single sensor is required */
194
195
#define ICM20948_REG_MEM_START_ADDR (ICM20948_BANK_0 | 0x7c)
/**< MEMs start address */
196
#define ICM20948_REG_MEM_R_W (ICM20948_BANK_0 | 0x7d)
/**< MEMs data read/write */
197
#define ICM20948_REG_MEM_BANK_SEL (ICM20948_BANK_0 | 0x7e)
/**< MEMs bank select */
198
199
/***********************/
200
/* Bank 1 register map */
201
/***********************/
202
#define ICM20948_REG_XA_OFFSET_H (ICM20948_BANK_1 | 0x14)
/**< Acceleration sensor X-axis offset cancellation high byte */
203
#define ICM20948_REG_XA_OFFSET_L (ICM20948_BANK_1 | 0x15)
/**< Acceleration sensor X-axis offset cancellation low byte */
204
#define ICM20948_REG_YA_OFFSET_H (ICM20948_BANK_1 | 0x17)
/**< Acceleration sensor Y-axis offset cancellation high byte */
205
#define ICM20948_REG_YA_OFFSET_L (ICM20948_BANK_1 | 0x18)
/**< Acceleration sensor Y-axis offset cancellation low byte */
206
#define ICM20948_REG_ZA_OFFSET_H (ICM20948_BANK_1 | 0x1A)
/**< Acceleration sensor Z-axis offset cancellation high byte */
207
#define ICM20948_REG_ZA_OFFSET_L (ICM20948_BANK_1 | 0x1B)
/**< Acceleration sensor Z-axis offset cancellation low byte */
208
209
#define ICM20948_REG_TIMEBASE_CORR_PLL (ICM20948_BANK_1 | 0x28)
/**< PLL Timebase Correction register */
210
211
/***********************/
212
/* Bank 2 register map */
213
/***********************/
214
#define ICM20948_REG_GYRO_SMPLRT_DIV (ICM20948_BANK_2 | 0x00)
/**< Gyroscope Sample Rate Divider regiser */
215
216
#define ICM20948_REG_GYRO_CONFIG_1 (ICM20948_BANK_2 | 0x01)
/**< Gyroscope Configuration 1 register */
217
#define ICM20948_BIT_GYRO_FCHOICE 0x01
/**< Gyro Digital Low-Pass Filter enable bit */
218
#define ICM20948_SHIFT_GYRO_FS_SEL 1
/**< Gyro Full Scale Select bit shift */
219
#define ICM20948_SHIFT_GYRO_DLPCFG 3
/**< Gyro DLPF Config bit shift */
220
#define ICM20948_MASK_GYRO_FULLSCALE 0x06
/**< Gyro Full Scale Select bitmask */
221
#define ICM20948_MASK_GYRO_BW 0x39
/**< Gyro Bandwidth Select bitmask */
222
#define ICM20948_GYRO_FULLSCALE_250DPS (0x00 << ICM20948_SHIFT_GYRO_FS_SEL)
/**< Gyro Full Scale = 250 deg/sec */
223
#define ICM20948_GYRO_FULLSCALE_500DPS (0x01 << ICM20948_SHIFT_GYRO_FS_SEL)
/**< Gyro Full Scale = 500 deg/sec */
224
#define ICM20948_GYRO_FULLSCALE_1000DPS (0x02 << ICM20948_SHIFT_GYRO_FS_SEL)
/**< Gyro Full Scale = 1000 deg/sec */
225
#define ICM20948_GYRO_FULLSCALE_2000DPS (0x03 << ICM20948_SHIFT_GYRO_FS_SEL)
/**< Gyro Full Scale = 2000 deg/sec */
226
#define ICM20948_GYRO_BW_12100HZ (0x00 << ICM20948_SHIFT_GYRO_DLPCFG)
/**< Gyro Bandwidth = 12100 Hz */
227
#define ICM20948_GYRO_BW_360HZ ( (0x07 << ICM20948_SHIFT_GYRO_DLPCFG) | ICM20948_BIT_GYRO_FCHOICE)
/**< Gyro Bandwidth = 360 Hz */
228
#define ICM20948_GYRO_BW_200HZ ( (0x00 << ICM20948_SHIFT_GYRO_DLPCFG) | ICM20948_BIT_GYRO_FCHOICE)
/**< Gyro Bandwidth = 200 Hz */
229
#define ICM20948_GYRO_BW_150HZ ( (0x01 << ICM20948_SHIFT_GYRO_DLPCFG) | ICM20948_BIT_GYRO_FCHOICE)
/**< Gyro Bandwidth = 150 Hz */
230
#define ICM20948_GYRO_BW_120HZ ( (0x02 << ICM20948_SHIFT_GYRO_DLPCFG) | ICM20948_BIT_GYRO_FCHOICE)
/**< Gyro Bandwidth = 120 Hz */
231
#define ICM20948_GYRO_BW_51HZ ( (0x03 << ICM20948_SHIFT_GYRO_DLPCFG) | ICM20948_BIT_GYRO_FCHOICE)
/**< Gyro Bandwidth = 51 Hz */
232
#define ICM20948_GYRO_BW_24HZ ( (0x04 << ICM20948_SHIFT_GYRO_DLPCFG) | ICM20948_BIT_GYRO_FCHOICE)
/**< Gyro Bandwidth = 24 Hz */
233
#define ICM20948_GYRO_BW_12HZ ( (0x05 << ICM20948_SHIFT_GYRO_DLPCFG) | ICM20948_BIT_GYRO_FCHOICE)
/**< Gyro Bandwidth = 12 Hz */
234
#define ICM20948_GYRO_BW_6HZ ( (0x06 << ICM20948_SHIFT_GYRO_DLPCFG) | ICM20948_BIT_GYRO_FCHOICE)
/**< Gyro Bandwidth = 6 Hz */
235
236
#define ICM20948_REG_GYRO_CONFIG_2 (ICM20948_BANK_2 | 0x02)
/**< Gyroscope Configuration 2 register */
237
#define ICM20948_BIT_GYRO_CTEN 0x38
/**< Gyroscope Self-Test Enable bits */
238
239
#define ICM20948_REG_XG_OFFS_USRH (ICM20948_BANK_2 | 0x03)
/**< Gyroscope sensor X-axis offset cancellation high byte */
240
#define ICM20948_REG_XG_OFFS_USRL (ICM20948_BANK_2 | 0x04)
/**< Gyroscope sensor X-axis offset cancellation low byte */
241
#define ICM20948_REG_YG_OFFS_USRH (ICM20948_BANK_2 | 0x05)
/**< Gyroscope sensor Y-axis offset cancellation high byte */
242
#define ICM20948_REG_YG_OFFS_USRL (ICM20948_BANK_2 | 0x06)
/**< Gyroscope sensor Y-axis offset cancellation low byte */
243
#define ICM20948_REG_ZG_OFFS_USRH (ICM20948_BANK_2 | 0x07)
/**< Gyroscope sensor Z-axis offset cancellation high byte */
244
#define ICM20948_REG_ZG_OFFS_USRL (ICM20948_BANK_2 | 0x08)
/**< Gyroscope sensor Z-axis offset cancellation low byte */
245
246
#define ICM20948_REG_ODR_ALIGN_EN (ICM20948_BANK_2 | 0x09)
/**< Output Data Rate start time alignment */
247
248
#define ICM20948_REG_ACCEL_SMPLRT_DIV_1 (ICM20948_BANK_2 | 0x10)
/**< Acceleration Sensor Sample Rate Divider 1 register */
249
#define ICM20948_REG_ACCEL_SMPLRT_DIV_2 (ICM20948_BANK_2 | 0x11)
/**< Acceleration Sensor Sample Rate Divider 2 register */
250
251
#define ICM20948_REG_ACCEL_INTEL_CTRL (ICM20948_BANK_2 | 0x12)
/**< Accelerometer Hardware Intelligence Control register */
252
#define ICM20948_BIT_ACCEL_INTEL_EN 0x02
/**< Wake-up On Motion enable bit */
253
#define ICM20948_BIT_ACCEL_INTEL_MODE 0x01
/**< WOM algorithm selection bit */
254
255
#define ICM20948_REG_ACCEL_WOM_THR (ICM20948_BANK_2 | 0x13)
/**< Wake-up On Motion Threshold register */
256
257
#define ICM20948_REG_ACCEL_CONFIG (ICM20948_BANK_2 | 0x14)
/**< Accelerometer Configuration register */
258
#define ICM20948_BIT_ACCEL_FCHOICE 0x01
/**< Accel Digital Low-Pass Filter enable bit */
259
#define ICM20948_SHIFT_ACCEL_FS 1
/**< Accel Full Scale Select bit shift */
260
#define ICM20948_SHIFT_ACCEL_DLPCFG 3
/**< Accel DLPF Config bit shift */
261
#define ICM20948_MASK_ACCEL_FULLSCALE 0x06
/**< Accel Full Scale Select bitmask */
262
#define ICM20948_MASK_ACCEL_BW 0x39
/**< Accel Bandwidth Select bitmask */
263
#define ICM20948_ACCEL_FULLSCALE_2G (0x00 << ICM20948_SHIFT_ACCEL_FS)
/**< Accel Full Scale = 2 g */
264
#define ICM20948_ACCEL_FULLSCALE_4G (0x01 << ICM20948_SHIFT_ACCEL_FS)
/**< Accel Full Scale = 4 g */
265
#define ICM20948_ACCEL_FULLSCALE_8G (0x02 << ICM20948_SHIFT_ACCEL_FS)
/**< Accel Full Scale = 8 g */
266
#define ICM20948_ACCEL_FULLSCALE_16G (0x03 << ICM20948_SHIFT_ACCEL_FS)
/**< Accel Full Scale = 16 g */
267
#define ICM20948_ACCEL_BW_1210HZ (0x00 << ICM20948_SHIFT_ACCEL_DLPCFG)
/**< Accel Bandwidth = 1210 Hz */
268
#define ICM20948_ACCEL_BW_470HZ ( (0x07 << ICM20948_SHIFT_ACCEL_DLPCFG) | ICM20948_BIT_ACCEL_FCHOICE)
/**< Accel Bandwidth = 470 Hz */
269
#define ICM20948_ACCEL_BW_246HZ ( (0x00 << ICM20948_SHIFT_ACCEL_DLPCFG) | ICM20948_BIT_ACCEL_FCHOICE)
/**< Accel Bandwidth = 246 Hz */
270
#define ICM20948_ACCEL_BW_111HZ ( (0x02 << ICM20948_SHIFT_ACCEL_DLPCFG) | ICM20948_BIT_ACCEL_FCHOICE)
/**< Accel Bandwidth = 111 Hz */
271
#define ICM20948_ACCEL_BW_50HZ ( (0x03 << ICM20948_SHIFT_ACCEL_DLPCFG) | ICM20948_BIT_ACCEL_FCHOICE)
/**< Accel Bandwidth = 50 Hz */
272
#define ICM20948_ACCEL_BW_24HZ ( (0x04 << ICM20948_SHIFT_ACCEL_DLPCFG) | ICM20948_BIT_ACCEL_FCHOICE)
/**< Accel Bandwidth = 24 Hz */
273
#define ICM20948_ACCEL_BW_12HZ ( (0x05 << ICM20948_SHIFT_ACCEL_DLPCFG) | ICM20948_BIT_ACCEL_FCHOICE)
/**< Accel Bandwidth = 12 Hz */
274
#define ICM20948_ACCEL_BW_6HZ ( (0x06 << ICM20948_SHIFT_ACCEL_DLPCFG) | ICM20948_BIT_ACCEL_FCHOICE)
/**< Accel Bandwidth = 6 Hz */
275
276
#define ICM20948_REG_ACCEL_CONFIG_2 (ICM20948_BANK_2 | 0x15)
/**< Accelerometer Configuration 2 register */
277
#define ICM20948_BIT_ACCEL_CTEN 0x1C
/**< Accelerometer Self-Test Enable bits */
278
279
#define ICM20948_REG_PRGM_START_ADDRH (ICM20948_BANK_2 | 0x50)
/**< DMP program start address */
280
281
282
#define ICM20948_REG_FSYNC_CONFIG (ICM20948_BANK_2 | 0x52)
/**< FSYNC Configuration register */
283
#define ICM20948_BIT_FSYNC_TIME_EN 0x80
284
#define ICM20948_BIT_FSYNC_DEGLITCH_EN 0x20
285
#define ICM20948_BIT_FSYNC_EDGE_EN 0x10
286
#define ICM20948_BITS_FSYNC_SET_NONE 0x00
287
#define ICM20948_BITS_FSYNC_SET_TEMP 0x01
288
#define ICM20948_BITS_FSYNC_SET_GX 0x02
289
#define ICM20948_BITS_FSYNC_SET_GY 0x03
290
#define ICM20948_BITS_FSYNC_SET_GZ 0x04
291
#define ICM20948_BITS_FSYNC_SET_AX 0x05
292
#define ICM20948_BITS_FSYNC_SET_AY 0x06
293
#define ICM20948_BITS_FSYNC_SET_AZ 0x07
294
295
/***********************/
296
/* Bank 3 register map */
297
/***********************/
298
#define ICM20948_REG_I2C_MST_ODR_CONFIG (ICM20948_BANK_3 | 0x00)
/**< I2C Master Output Data Rate Configuration register */
299
300
#define ICM20948_REG_I2C_MST_CTRL (ICM20948_BANK_3 | 0x01)
/**< I2C Master Control register */
301
#define ICM20948_BIT_I2C_MST_P_NSR 0x10
/**< Stop between reads enabling bit */
302
303
#define ICM20948_REG_I2C_MST_DELAY_CTRL (ICM20948_BANK_3 | 0x02)
/**< I2C Master Delay Control register */
304
#define ICM20948_BIT_SLV0_DLY_EN 0x01
/**< I2C Slave0 Delay Enable bit */
305
#define ICM20948_BIT_SLV1_DLY_EN 0x02
/**< I2C Slave1 Delay Enable bit */
306
#define ICM20948_BIT_SLV2_DLY_EN 0x04
/**< I2C Slave2 Delay Enable bit */
307
#define ICM20948_BIT_SLV3_DLY_EN 0x08
/**< I2C Slave3 Delay Enable bit */
308
309
#define ICM20948_REG_I2C_SLV0_ADDR (ICM20948_BANK_3 | 0x03)
/**< I2C Slave0 Physical Address register */
310
#define ICM20948_REG_I2C_SLV0_REG (ICM20948_BANK_3 | 0x04)
/**< I2C Slave0 Register Address register */
311
#define ICM20948_REG_I2C_SLV0_CTRL (ICM20948_BANK_3 | 0x05)
/**< I2C Slave0 Control register */
312
#define ICM20948_REG_I2C_SLV0_DO (ICM20948_BANK_3 | 0x06)
/**< I2C Slave0 Data Out register */
313
314
#define ICM20948_REG_I2C_SLV1_ADDR (ICM20948_BANK_3 | 0x07)
/**< I2C Slave1 Physical Address register */
315
#define ICM20948_REG_I2C_SLV1_REG (ICM20948_BANK_3 | 0x08)
/**< I2C Slave1 Register Address register */
316
#define ICM20948_REG_I2C_SLV1_CTRL (ICM20948_BANK_3 | 0x09)
/**< I2C Slave1 Control register */
317
#define ICM20948_REG_I2C_SLV1_DO (ICM20948_BANK_3 | 0x0A)
/**< I2C Slave1 Data Out register */
318
319
#define ICM20948_REG_I2C_SLV2_ADDR (ICM20948_BANK_3 | 0x0B)
/**< I2C Slave2 Physical Address register */
320
#define ICM20948_REG_I2C_SLV2_REG (ICM20948_BANK_3 | 0x0C)
/**< I2C Slave2 Register Address register */
321
#define ICM20948_REG_I2C_SLV2_CTRL (ICM20948_BANK_3 | 0x0D)
/**< I2C Slave2 Control register */
322
#define ICM20948_REG_I2C_SLV2_DO (ICM20948_BANK_3 | 0x0E)
/**< I2C Slave2 Data Out register */
323
324
#define ICM20948_REG_I2C_SLV3_ADDR (ICM20948_BANK_3 | 0x0F)
/**< I2C Slave3 Physical Address register */
325
#define ICM20948_REG_I2C_SLV3_REG (ICM20948_BANK_3 | 0x10)
/**< I2C Slave3 Register Address register */
326
#define ICM20948_REG_I2C_SLV3_CTRL (ICM20948_BANK_3 | 0x11)
/**< I2C Slave3 Control register */
327
#define ICM20948_REG_I2C_SLV3_DO (ICM20948_BANK_3 | 0x12)
/**< I2C Slave3 Data Out register */
328
329
#define ICM20948_REG_I2C_SLV4_ADDR (ICM20948_BANK_3 | 0x13)
/**< I2C Slave4 Physical Address register */
330
#define ICM20948_REG_I2C_SLV4_REG (ICM20948_BANK_3 | 0x14)
/**< I2C Slave4 Register Address register */
331
#define ICM20948_REG_I2C_SLV4_CTRL (ICM20948_BANK_3 | 0x15)
/**< I2C Slave4 Control register */
332
#define ICM20948_REG_I2C_SLV4_DO (ICM20948_BANK_3 | 0x16)
/**< I2C Slave4 Data Out register */
333
#define ICM20948_REG_I2C_SLV4_DI (ICM20948_BANK_3 | 0x17)
/**< I2C Slave4 Data In register */
334
335
#define ICM20948_BIT_I2C_SLV4_INT_EN 0x40
/**< I2C Slave 4 interrupt enable */
336
#define ICM20948_BIT_I2C_SLV4_REG_DIS 0x20
/**< I2C Slave 4 no register address */
337
338
#define ICM20948_BIT_I2C_SLV_EN 0x80
/**< I2C Slave Enable bit */
339
#define ICM20948_BIT_I2C_BYTE_SW 0x40
/**< I2C Slave Byte Swap enable bit */
340
#define ICM20948_BIT_I2C_REG_DIS 0x20
/**< I2C Slave Do Not Write Register Value bit */
341
#define ICM20948_BIT_I2C_GRP 0x10
/**< I2C Slave Group bit */
342
#define ICM20948_BIT_I2C_READ 0x80
/**< I2C Slave R/W bit */
343
344
/* Register common for all banks */
345
#define ICM20948_REG_BANK_SEL 0x7F
/**< Bank Select register */
346
347
#define ICM20648_DEVICE_ID 0xE0
/**< ICM20948 Device ID value */
348
#define ICM20948_DEVICE_ID 0xEA
/**< ICM20948 Device ID value */
349
350
351
// ####################################################################################################
352
/* AK09916 definitions */
353
354
/* AK09916 register definition */
355
#define REG_AK09916_WIA 0x01
356
#define VAL_AK09916_WIA 0x09
357
358
#define REG_AK09916_STATUS1 0x10
359
#define BIT_AK09916_STATUS1_DOR 0x02
/*!< Data overrun */
360
#define BIT_AK09916_STATUS1_DRDY 0x01
/*!< Data ready */
361
362
#define REG_AK09916_HXL 0x11
363
#define REG_AK09916_HXH 0x12
364
#define REG_AK09916_HYL 0x13
365
#define REG_AK09916_HYH 0x14
366
#define REG_AK09916_HZL 0x15
367
#define REG_AK09916_HZH 0x16
368
369
370
#define REG_AK09916_STATUS2 0x18
371
#define BIT_AK09916_STATUS2_HOFL 0x08
/*!< Magnetic sensor overflow */
372
373
#define REG_AK09916_CNTL2 0x31
374
#define VAL_AK09916_CNTL2_PD 0x00
/*!< AK power down */
375
#define VAL_AK09916_CNTL2_SNGL 0x01
/*!< AK single measurement */
376
#define VAL_AK09916_CNTL2_MOD1 0x02
/*!< AK continuous measurement mode 1 (10Hz) */
377
#define VAL_AK09916_CNTL2_MOD2 0x04
/*!< AK continuous measurement mode 1 (20Hz) */
378
#define VAL_AK09916_CNTL2_MOD3 0x06
/*!< AK continuous measurement mode 1 (50Hz) */
379
#define VAL_AK09916_CNTL2_MOD4 0x08
/*!< AK continuous measurement mode 1 (100Hz) */
380
381
#define REG_AK09916_CNTL3 0x32
382
#define BIT_AK09916_CNTL3_SRST 0x01
/*!< Soft reset */
383
384
#define REG_AK09916_TST1 0x33
385
#define REG_AK09916_TST2 0x34
386
387
#define DATA_AK09916_SCALE 161061273
388
389
#define COMPASS_SLAVEADDR 0x0C
/*!< I2C address of the AK09916 */
390
391
392
/**@}*/
393
394
/** @endcond */
395
396
// ####################################################################################################
397
/* DMP definitions for dmp3a.20x48-0.4.1 */
398
399
#define DMP_CFG_FIFO_SIZE (4222)
400
401
// data output control
402
#define DMP_DATA_OUT_CTL1 (4 * 16)
403
#define DMP_DATA_OUT_CTL2 (4 * 16 + 2)
404
#define DMP_DATA_INTR_CTL (4 * 16 + 12)
405
#define DMP_FIFO_WATERMARK (31 * 16 + 14)
406
407
// motion event control
408
#define DMP_MOTION_EVENT_CTL (4 * 16 + 14)
409
410
// indicates to DMP which sensors are available
411
/* 1: gyro samples available
412
2: accel samples available
413
8: secondary samples available */
414
#define DMP_DATA_RDY_STATUS (8 * 16 + 10)
415
416
// batch mode
417
#define DMP_BM_BATCH_CNTR (27 * 16)
418
#define DMP_BM_BATCH_THLD (19 * 16 + 12)
419
#define DMP_BM_BATCH_MASK (21 * 16 + 14)
420
421
// sensor output data rate
422
#define DMP_ODR_ACCEL (11 * 16 + 14)
423
#define DMP_ODR_GYRO (11 * 16 + 10)
424
#define DMP_ODR_CPASS (11 * 16 + 6)
425
#define DMP_ODR_ALS (11 * 16 + 2)
426
#define DMP_ODR_QUAT6 (10 * 16 + 12)
427
#define DMP_ODR_QUAT9 (10 * 16 + 8)
428
#define DMP_ODR_PQUAT6 (10 * 16 + 4)
429
#define DMP_ODR_GEOMAG (10 * 16 + 0)
430
#define DMP_ODR_PRESSURE (11 * 16 + 12)
431
#define DMP_ODR_GYRO_CALIBR (11 * 16 + 8)
432
#define DMP_ODR_CPASS_CALIBR (11 * 16 + 4)
433
434
// sensor output data rate counter
435
#define DMP_ODR_CNTR_ACCEL (9 * 16 + 14)
436
#define DMP_ODR_CNTR_GYRO (9 * 16 + 10)
437
#define DMP_ODR_CNTR_CPASS (9 * 16 + 6)
438
#define DMP_ODR_CNTR_ALS (9 * 16 + 2)
439
#define DMP_ODR_CNTR_QUAT6 (8 * 16 + 12)
440
#define DMP_ODR_CNTR_QUAT9 (8 * 16 + 8)
441
#define DMP_ODR_CNTR_PQUAT6 (8 * 16 + 4)
442
#define DMP_ODR_CNTR_GEOMAG (8 * 16 + 0)
443
#define DMP_ODR_CNTR_PRESSURE (9 * 16 + 12)
444
#define DMP_ODR_CNTR_GYRO_CALIBR (9 * 16 + 8)
445
#define DMP_ODR_CNTR_CPASS_CALIBR (9 * 16 + 4)
446
447
// mounting matrix
448
#define DMP_CPASS_MTX_00 (23 * 16)
449
#define DMP_CPASS_MTX_01 (23 * 16 + 4)
450
#define DMP_CPASS_MTX_02 (23 * 16 + 8)
451
#define DMP_CPASS_MTX_10 (23 * 16 + 12)
452
#define DMP_CPASS_MTX_11 (24 * 16)
453
#define DMP_CPASS_MTX_12 (24 * 16 + 4)
454
#define DMP_CPASS_MTX_20 (24 * 16 + 8)
455
#define DMP_CPASS_MTX_21 (24 * 16 + 12)
456
#define DMP_CPASS_MTX_22 (25 * 16)
457
458
#define DMP_GYRO_SF (19 * 16)
459
#define DMP_ACCEL_FB_GAIN (34 * 16)
460
#define DMP_ACCEL_ONLY_GAIN (16 * 16 + 12)
461
462
// bias calibration
463
#define DMP_GYRO_BIAS_X (139 * 16 + 4)
464
#define DMP_GYRO_BIAS_Y (139 * 16 + 8)
465
#define DMP_GYRO_BIAS_Z (139 * 16 + 12)
466
#define DMP_GYRO_ACCURACY (138 * 16 + 2)
467
#define DMP_GYRO_BIAS_SET (138 * 16 + 6)
468
#define DMP_GYRO_LAST_TEMPR (134 * 16)
469
#define DMP_GYRO_SLOPE_X ( 78 * 16 + 4)
470
#define DMP_GYRO_SLOPE_Y ( 78 * 16 + 8)
471
#define DMP_GYRO_SLOPE_Z ( 78 * 16 + 12)
472
473
#define DMP_ACCEL_BIAS_X (110 * 16 + 4)
474
#define DMP_ACCEL_BIAS_Y (110 * 16 + 8)
475
#define DMP_ACCEL_BIAS_Z (110 * 16 + 12)
476
#define DMP_ACCEL_ACCURACY (97 * 16)
477
#define DMP_ACCEL_CAL_RESET (77 * 16)
478
#define DMP_ACCEL_VARIANCE_THRESH (93 * 16)
479
#define DMP_ACCEL_CAL_RATE (94 * 16 + 4)
480
#define DMP_ACCEL_PRE_SENSOR_DATA (97 * 16 + 4)
481
#define DMP_ACCEL_COVARIANCE (101 * 16 + 8)
482
#define DMP_ACCEL_ALPHA_VAR (91 * 16)
483
#define DMP_ACCEL_A_VAR (92 * 16)
484
#define DMP_ACCEL_CAL_INIT (94 * 16 + 2)
485
#define DMP_ACCEL_CAL_SCALE_COVQ_IN_RANGE (194 * 16)
486
#define DMP_ACCEL_CAL_SCALE_COVQ_OUT_RANGE (195 * 16)
487
#define DMP_ACCEL_CAL_TEMPERATURE_SENSITIVITY (194 * 16 + 4)
488
#define DMP_ACCEL_CAL_TEMPERATURE_OFFSET_TRIM (194 * 16 + 12)
489
490
#define DMP_CPASS_BIAS_X (126 * 16 + 4)
491
#define DMP_CPASS_BIAS_Y (126 * 16 + 8)
492
#define DMP_CPASS_BIAS_Z (126 * 16 + 12)
493
#define DMP_CPASS_ACCURACY (37 * 16)
494
#define DMP_CPASS_BIAS_SET (34 * 16 + 14)
495
#define DMP_MAR_MODE (37 * 16 + 2)
496
#define DMP_CPASS_COVARIANCE (115 * 16)
497
#define DMP_CPASS_COVARIANCE_CUR (118 * 16 + 8)
498
#define DMP_CPASS_REF_MAG_3D (122 * 16)
499
#define DMP_CPASS_CAL_INIT (114 * 16)
500
#define DMP_CPASS_EST_FIRST_BIAS (113 * 16)
501
#define DMP_MAG_DISTURB_STATE (113 * 16 + 2)
502
#define DMP_CPASS_VAR_COUNT (112 * 16 + 6)
503
#define DMP_CPASS_COUNT_7 ( 87 * 16 + 2)
504
#define DMP_CPASS_MAX_INNO (124 * 16)
505
#define DMP_CPASS_BIAS_OFFSET (113 * 16 + 4)
506
#define DMP_CPASS_CUR_BIAS_OFFSET (114 * 16 + 4)
507
#define DMP_CPASS_PRE_SENSOR_DATA ( 87 * 16 + 4)
508
509
// Compass Cal params to be adjusted according to sampling rate
510
#define DMP_CPASS_TIME_BUFFER (112 * 16 + 14)
511
#define DMP_CPASS_RADIUS_3D_THRESH_ANOMALY (112 * 16 + 8)
512
513
#define DMP_CPASS_STATUS_CHK (25 * 16 + 12)
514
515
// 9-axis
516
#define DMP_MAGN_THR_9X (80 * 16)
517
#define DMP_MAGN_LPF_THR_9X (80 * 16 + 8)
518
#define DMP_QFB_THR_9X (80 * 16 + 12)
519
520
// DMP running counter
521
#define DMP_DMPRATE_CNTR (18 * 16 + 4)
522
523
// pedometer
524
#define DMP_PEDSTD_BP_B (49 * 16 + 12)
525
#define DMP_PEDSTD_BP_A4 (52 * 16)
526
#define DMP_PEDSTD_BP_A3 (52 * 16 + 4)
527
#define DMP_PEDSTD_BP_A2 (52 * 16 + 8)
528
#define DMP_PEDSTD_BP_A1 (52 * 16 + 12)
529
#define DMP_PEDSTD_SB (50 * 16 + 8)
530
#define DMP_PEDSTD_SB_TIME (50 * 16 + 12)
531
#define DMP_PEDSTD_PEAKTHRSH (57 * 16 + 8)
532
#define DMP_PEDSTD_TIML (50 * 16 + 10)
533
#define DMP_PEDSTD_TIMH (50 * 16 + 14)
534
#define DMP_PEDSTD_PEAK (57 * 16 + 4)
535
#define DMP_PEDSTD_STEPCTR (54 * 16)
536
#define DMP_PEDSTD_STEPCTR2 (58 * 16 + 8)
537
#define DMP_PEDSTD_TIMECTR (60 * 16 + 4)
538
#define DMP_PEDSTD_DECI (58 * 16)
539
#define DMP_PEDSTD_SB2 (60 * 16 + 14)
540
#define DMP_STPDET_TIMESTAMP (18 * 16 + 8)
541
#define DMP_PEDSTEP_IND (19 * 16 + 4)
542
#define DMP_PED_Y_RATIO (17 * 16 + 0)
543
544
// SMD
545
#define DMP_SMD_VAR_TH (141 * 16 + 12)
546
#define DMP_SMD_VAR_TH_DRIVE (143 * 16 + 12)
547
#define DMP_SMD_DRIVE_TIMER_TH (143 * 16 + 8)
548
#define DMP_SMD_TILT_ANGLE_TH (179 * 16 + 12)
549
#define DMP_BAC_SMD_ST_TH (179 * 16 + 8)
550
#define DMP_BAC_ST_ALPHA4 (180 * 16 + 12)
551
#define DMP_BAC_ST_ALPHA4A (176 * 16 + 12)
552
553
// Wake on Motion
554
#define DMP_WOM_ENABLE (64 * 16 + 14)
555
#define DMP_WOM_STATUS (64 * 16 + 6)
556
#define DMP_WOM_THRESHOLD (64 * 16)
557
#define DMP_WOM_CNTR_TH (64 * 16 + 12)
558
559
// Activity Recognition
560
#define DMP_BAC_RATE (48 * 16 + 10)
561
#define DMP_BAC_STATE (179 * 16 + 0)
562
#define DMP_BAC_STATE_PREV (179 * 16 + 4)
563
#define DMP_BAC_ACT_ON (182 * 16 + 0)
564
#define DMP_BAC_ACT_OFF (183 * 16 + 0)
565
#define DMP_BAC_STILL_S_F (177 * 16 + 0)
566
#define DMP_BAC_RUN_S_F (177 * 16 + 4)
567
#define DMP_BAC_DRIVE_S_F (178 * 16 + 0)
568
#define DMP_BAC_WALK_S_F (178 * 16 + 4)
569
#define DMP_BAC_SMD_S_F (178 * 16 + 8)
570
#define DMP_BAC_BIKE_S_F (178 * 16 + 12)
571
#define DMP_BAC_E1_SHORT (146 * 16 + 0)
572
#define DMP_BAC_E2_SHORT (146 * 16 + 4)
573
#define DMP_BAC_E3_SHORT (146 * 16 + 8)
574
#define DMP_BAC_VAR_RUN (148 * 16 + 12)
575
#define DMP_BAC_TILT_INIT (181 * 16 + 0)
576
#define DMP_BAC_MAG_ON (225 * 16 + 0)
577
#define DMP_BAC_PS_ON (74 * 16 + 0)
578
#define DMP_BAC_BIKE_PREFERENCE (173 * 16 + 8)
579
#define DMP_BAC_MAG_I2C_ADDR (229 * 16 + 8)
580
#define DMP_BAC_PS_I2C_ADDR (75 * 16 + 4)
581
#define DMP_BAC_DRIVE_CONFIDENCE (144 * 16 + 0)
582
#define DMP_BAC_WALK_CONFIDENCE (144 * 16 + 4)
583
#define DMP_BAC_SMD_CONFIDENCE (144 * 16 + 8)
584
#define DMP_BAC_BIKE_CONFIDENCE (144 * 16 + 12)
585
#define DMP_BAC_STILL_CONFIDENCE (145 * 16 + 0)
586
#define DMP_BAC_RUN_CONFIDENCE (145 * 16 + 4)
587
#define DMP_BAC_MODE_CNTR (150 * 16)
588
#define DMP_BAC_STATE_T_PREV (185 * 16 + 4)
589
#define DMP_BAC_ACT_T_ON (184 * 16 + 0)
590
#define DMP_BAC_ACT_T_OFF (184 * 16 + 4)
591
#define DMP_BAC_STATE_WRDBS_PREV (185 * 16 + 8)
592
#define DMP_BAC_ACT_WRDBS_ON (184 * 16 + 8)
593
#define DMP_BAC_ACT_WRDBS_OFF (184 * 16 + 12)
594
#define DMP_BAC_ACT_ON_OFF (190 * 16 + 2)
595
#define DMP_PREV_BAC_ACT_ON_OFF (188 * 16 + 2)
596
#define DMP_BAC_CNTR (48 * 16 + 2)
597
598
// Flip/Pick-up
599
#define DMP_FP_VAR_ALPHA (245 * 16 + 8)
600
#define DMP_FP_STILL_TH (246 * 16 + 4)
601
#define DMP_FP_MID_STILL_TH (244 * 16 + 8)
602
#define DMP_FP_NOT_STILL_TH (246 * 16 + 8)
603
#define DMP_FP_VIB_REJ_TH (241 * 16 + 8)
604
#define DMP_FP_MAX_PICKUP_T_TH (244 * 16 + 12)
605
#define DMP_FP_PICKUP_TIMEOUT_TH (248 * 16 + 8)
606
#define DMP_FP_STILL_CONST_TH (246 * 16 + 12)
607
#define DMP_FP_MOTION_CONST_TH (240 * 16 + 8)
608
#define DMP_FP_VIB_COUNT_TH (242 * 16 + 8)
609
#define DMP_FP_STEADY_TILT_TH (247 * 16 + 8)
610
#define DMP_FP_STEADY_TILT_UP_TH (242 * 16 + 12)
611
#define DMP_FP_Z_FLAT_TH_MINUS (243 * 16 + 8)
612
#define DMP_FP_Z_FLAT_TH_PLUS (243 * 16 + 12)
613
#define DMP_FP_DEV_IN_POCKET_TH (76 * 16 + 12)
614
#define DMP_FP_PICKUP_CNTR (247 * 16 + 4)
615
#define DMP_FP_RATE (240 * 16 + 12)
616
617
// Gyro FSR
618
#define DMP_GYRO_FULLSCALE (72 * 16 + 12)
619
620
// Accel FSR
621
#define DMP_ACC_SCALE (30 * 16 + 0)
622
#define DMP_ACC_SCALE2 (79 * 16 + 4)
623
624
// EIS authentication
625
#define DMP_EIS_AUTH_INPUT (160 * 16 + 4)
626
#define DMP_EIS_AUTH_OUTPUT (160 * 16 + 0)
627
628
// B2S
629
#define DMP_B2S_RATE (48 * 16 + 8)
630
// mounting matrix
631
#define DMP_B2S_MTX_00 (208 * 16)
632
#define DMP_B2S_MTX_01 (208 * 16 + 4)
633
#define DMP_B2S_MTX_02 (208 * 16 + 8)
634
#define DMP_B2S_MTX_10 (208 * 16 + 12)
635
#define DMP_B2S_MTX_11 (209 * 16)
636
#define DMP_B2S_MTX_12 (209 * 16 + 4)
637
#define DMP_B2S_MTX_20 (209 * 16 + 8)
638
#define DMP_B2S_MTX_21 (209 * 16 + 12)
639
#define DMP_B2S_MTX_22 (210 * 16)
640
641
#define DMP_START_ADDRESS ((unsigned short)0x1000)
642
#define DMP_MEM_BANK_SIZE 256
643
#define DMP_LOAD_START 0x90
644
645
#define DMP_CODE_SIZE 14301
646
647
// BAC states
648
#define DMP_BAC_DRIVE 0x01
649
#define DMP_BAC_WALK 0x02
650
#define DMP_BAC_RUN 0x04
651
#define DMP_BAC_BIKE 0x08
652
#define DMP_BAC_TILT 0x10
653
#define DMP_BAC_STILL 0x20
include
jevois
Core
ICM20948_regs.H
Please help us improve this page: Edit it on
GitHub
or
email us your edits and suggestions.
Generated by
1.9.8