Statistics
| Branch: | Tag: | Revision:

amiro-lld / drivers / MPU6050 / v1 / alld_MPU6050.h @ ed9a1bf5

History | View | Annotate | Download (7.839 KB)

1
/*
2
AMiRo-LLD is a compilation of low-level hardware drivers for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2020  Thomas Schöpping et al.
4

5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU Lesser General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9

10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU Lesser General Public License for more details.
14

15
You should have received a copy of the GNU Lesser General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18

    
19
/**
20
 * @file    alld_MPU6050.h
21
 * @brief   Gyro & Accelerometer macros and structures.
22
 *
23
 * @addtogroup lld_mems
24
 * @{
25
 */
26

    
27
#ifndef AMIROLLD_MPU6050_H
28
#define AMIROLLD_MPU6050_H
29

    
30
#include <amiro-lld.h>
31

    
32
/******************************************************************************/
33
/* CONSTANTS                                                                  */
34
/******************************************************************************/
35

    
36
/**
37
 * @brief   Maximum I2C frequency.
38
 */
39
#define MPU6050_LLD_I2C_MAXFREQUENCY            400000
40

    
41
/**
42
 * @brief   Default I2C address
43
 */
44
#define MPU6050_LLD_I2C_ADDR_FIXED              0x68
45

    
46
/**
47
 * @brief   Optional I2C address mask, if AD0 is high.
48
 */
49
#define MPU6050_LLD_I2C_ADDR_AD0                0x01
50

    
51
/**
52
 * @brief   Constant value of the WHO_AM_I register.
53
 */
54
#define MPU6050_LLD_WHO_AM_I                    0x68
55

    
56
/******************************************************************************/
57
/* SETTINGS                                                                   */
58
/******************************************************************************/
59

    
60
/******************************************************************************/
61
/* CHECKS                                                                     */
62
/******************************************************************************/
63

    
64
/******************************************************************************/
65
/* DATA STRUCTURES AND TYPES                                                  */
66
/******************************************************************************/
67

    
68
/**
69
 * @brief   Register map.
70
 */
71
typedef enum {
72
  MPU6050_LLD_REGISTER_SELF_TEST_X        = 0x0D,
73
  MPU6050_LLD_REGISTER_SELF_TEST_Y        = 0x0E,
74
  MPU6050_LLD_REGISTER_SELF_TEST_Z        = 0x0F,
75
  MPU6050_LLD_REGISTER_SELF_TEST_A        = 0x10,
76
  MPU6050_LLD_REGISTER_SMPLRT_DIV         = 0x19,
77
  MPU6050_LLD_REGISTER_CONFIG             = 0x1A,
78
  MPU6050_LLD_REGISTER_GYRO_CONFIG        = 0x1B,
79
  MPU6050_LLD_REGISTER_ACCEL_CONFIG       = 0x1C,
80
  MPU6050_LLD_REGISTER_FIFO_EN            = 0x23,
81
  MPU6050_LLD_REGISTER_I2C_MST_CTRL       = 0x24,
82
  MPU6050_LLD_REGISTER_I2C_SLV0_ADDR      = 0x25,
83
  MPU6050_LLD_REGISTER_I2C_SLV0_REG       = 0x26,
84
  MPU6050_LLD_REGISTER_I2C_SLV0_CTRL      = 0x27,
85
  MPU6050_LLD_REGISTER_I2C_SLV1_ADDR      = 0x28,
86
  MPU6050_LLD_REGISTER_I2C_SLV1_REG       = 0x29,
87
  MPU6050_LLD_REGISTER_I2C_SLV1_CTRL      = 0x2A,
88
  MPU6050_LLD_REGISTER_I2C_SLV2_ADDR      = 0x2B,
89
  MPU6050_LLD_REGISTER_I2C_SLV2_REG       = 0x2C,
90
  MPU6050_LLD_REGISTER_I2C_SLV2_CTRL      = 0x2D,
91
  MPU6050_LLD_REGISTER_I2C_SLV3_ADDR      = 0x2E,
92
  MPU6050_LLD_REGISTER_I2C_SLV3_REG       = 0x2F,
93
  MPU6050_LLD_REGISTER_I2C_SLV3_CTRL      = 0x30,
94
  MPU6050_LLD_REGISTER_I2C_SLV4_ADDR      = 0x31,
95
  MPU6050_LLD_REGISTER_I2C_SLV4_REG       = 0x32,
96
  MPU6050_LLD_REGISTER_I2C_SLV4_DO        = 0x33,
97
  MPU6050_LLD_REGISTER_I2C_SLV4_CTRL      = 0x34,
98
  MPU6050_LLD_REGISTER_I2C_SLV4_DI        = 0x35,
99
  MPU6050_LLD_REGISTER_I2C_MST_STATUS     = 0x36,
100
  MPU6050_LLD_REGISTER_INT_PIN_CFG        = 0x37,
101
  MPU6050_LLD_REGISTER_INT_ENABLE         = 0x38,
102
  MPU6050_LLD_REGISTER_INT_STATUS         = 0x3A,
103
  MPU6050_LLD_REGISTER_ACCEL_XOUT_H       = 0x3B,
104
  MPU6050_LLD_REGISTER_ACCEL_XOUT_L       = 0x3C,
105
  MPU6050_LLD_REGISTER_ACCEL_YOUT_H       = 0x3D,
106
  MPU6050_LLD_REGISTER_ACCEL_YOUT_L       = 0x3E,
107
  MPU6050_LLD_REGISTER_ACCEL_ZOUT_H       = 0x3F,
108
  MPU6050_LLD_REGISTER_ACCEL_ZOUT_L       = 0x40,
109
  MPU6050_LLD_REGISTER_TEMP_OUT_H         = 0x41,
110
  MPU6050_LLD_REGISTER_TEMP_OUT_L         = 0x42,
111
  MPU6050_LLD_REGISTER_GYRO_XOUT_H        = 0x43,
112
  MPU6050_LLD_REGISTER_GYRO_XOUT_L        = 0x44,
113
  MPU6050_LLD_REGISTER_GYRO_YOUT_H        = 0x45,
114
  MPU6050_LLD_REGISTER_GYRO_YOUT_L        = 0x46,
115
  MPU6050_LLD_REGISTER_GYRO_ZOUT_H        = 0x47,
116
  MPU6050_LLD_REGISTER_GYRO_ZOUT_L        = 0x48,
117
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_00   = 0x49,
118
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_01   = 0x4A,
119
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_02   = 0x4B,
120
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_03   = 0x4C,
121
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_04   = 0x4D,
122
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_05   = 0x4E,
123
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_06   = 0x4F,
124
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_07   = 0x50,
125
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_08   = 0x51,
126
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_09   = 0x52,
127
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_10   = 0x53,
128
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_11   = 0x54,
129
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_12   = 0x55,
130
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_13   = 0x56,
131
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_14   = 0x57,
132
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_15   = 0x58,
133
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_16   = 0x59,
134
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_17   = 0x5A,
135
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_18   = 0x5B,
136
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_19   = 0x5C,
137
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_20   = 0x5D,
138
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_21   = 0x5E,
139
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_22   = 0x5F,
140
  MPU6050_LLD_REGISTER_EXT_SENS_DATA_23   = 0x60,
141
  MPU6050_LLD_REGISTER_I2C_SLV0_DO        = 0x63,
142
  MPU6050_LLD_REGISTER_I2C_SLV1_DO        = 0x64,
143
  MPU6050_LLD_REGISTER_I2C_SLV2_DO        = 0x65,
144
  MPU6050_LLD_REGISTER_I2C_SLV3_DO        = 0x66,
145
  MPU6050_LLD_REGISTER_I2C_MST_DELAY_CTRL = 0x67,
146
  MPU6050_LLD_REGISTER_SIGNAL_PATH_RESET  = 0x68,
147
  MPU6050_LLD_REGISTER_USER_CTRL          = 0x6A,
148
  MPU6050_LLD_REGISTER_PWR_MGMT_1         = 0x6B,
149
  MPU6050_LLD_REGISTER_PWR_MGMT_2         = 0x6C,
150
  MPU6050_LLD_REGISTER_FIFO_COUNTH        = 0x72,
151
  MPU6050_LLD_REGISTER_FIFO_COUNTL        = 0x73,
152
  MPU6050_LLD_REGISTER_FIFO_R_W           = 0x74,
153
  MPU6050_LLD_REGISTER_WHO_AM_I           = 0x75,
154
} mpu6050_lld_register_t;
155

    
156
/**
157
 * @brief The MPU6050Driver struct.
158
 */
159
typedef struct {
160
  apalI2CDriver_t* i2cd;  /**< Pointer to the connected I2C driver. */
161
  apalI2Caddr_t addr;     /**< The address of the module for I2C communication. */
162
} MPU6050Driver;
163

    
164
/******************************************************************************/
165
/* MACROS                                                                     */
166
/******************************************************************************/
167

    
168
/******************************************************************************/
169
/* EXTERN DECLARATIONS                                                        */
170
/******************************************************************************/
171

    
172
#ifdef __cplusplus
173
extern "C" {
174
#endif
175
  apalExitStatus_t mpu6050_lld_read_register(const MPU6050Driver* const mpu6050, const mpu6050_lld_register_t addr, uint8_t* const data, const uint8_t num, const apalTime_t timeout);
176
  apalExitStatus_t mpu6050_lld_write_register(const MPU6050Driver* const mpu6050, const mpu6050_lld_register_t addr, const uint8_t* const data, const uint8_t num, const apalTime_t timeout);
177
#ifdef __cplusplus
178
}
179
#endif
180

    
181
/******************************************************************************/
182
/* INLINE FUNCTIONS                                                           */
183
/******************************************************************************/
184

    
185
#endif /* AMIROLLD_MPU6050_H */
186

    
187
/** @} */