amiro-lld / include / alld_mpu6050.h @ 3389f547
History | View | Annotate | Download (5.012 KB)
1 |
/*
|
---|---|
2 |
* sd_hal_mpu6050.h
|
3 |
*
|
4 |
* Created on: Feb 19, 2016
|
5 |
* Author: Sina Darvishi
|
6 |
*/
|
7 |
|
8 |
#ifndef DRIVERS_MYLIB_MPU6050_H_
|
9 |
#define DRIVERS_MYLIB_MPU6050_H_
|
10 |
|
11 |
/*
|
12 |
C++ detection
|
13 |
#ifdef __cplusplus
|
14 |
extern "C" {
|
15 |
#endif
|
16 |
*/
|
17 |
|
18 |
#include <amiro-lld.h> |
19 |
#include <periphAL.h> // should already be included by line above this |
20 |
|
21 |
#if defined(AMIROLLD_CFG_USE_MPU6050) || defined(__DOXYGEN__)
|
22 |
|
23 |
#include <stdint.h> |
24 |
|
25 |
/**
|
26 |
* @defgroup SD_MPU6050_Macros
|
27 |
* @brief Library defines
|
28 |
* @{
|
29 |
*/
|
30 |
|
31 |
|
32 |
/* Default I2C clock */
|
33 |
#ifndef MPU6050_I2C_CLOCK
|
34 |
#define MPU6050_I2C_CLOCK 400000 /*!< Default I2C clock speed */ |
35 |
#endif
|
36 |
|
37 |
/**
|
38 |
* @brief Data rates predefined constants
|
39 |
* @{
|
40 |
*/
|
41 |
#define SD_MPU6050_DataRate_8KHz 0 /*!< Sample rate set to 8 kHz */ |
42 |
#define SD_MPU6050_DataRate_4KHz 1 /*!< Sample rate set to 4 kHz */ |
43 |
#define SD_MPU6050_DataRate_2KHz 3 /*!< Sample rate set to 2 kHz */ |
44 |
#define SD_MPU6050_DataRate_1KHz 7 /*!< Sample rate set to 1 kHz */ |
45 |
#define SD_MPU6050_DataRate_500Hz 15 /*!< Sample rate set to 500 Hz */ |
46 |
#define SD_MPU6050_DataRate_250Hz 31 /*!< Sample rate set to 250 Hz */ |
47 |
#define SD_MPU6050_DataRate_125Hz 63 /*!< Sample rate set to 125 Hz */ |
48 |
#define SD_MPU6050_DataRate_100Hz 79 /*!< Sample rate set to 100 Hz */ |
49 |
/**
|
50 |
* @}
|
51 |
*/
|
52 |
|
53 |
/**
|
54 |
* @}
|
55 |
*/
|
56 |
|
57 |
/**
|
58 |
* @defgroup SD_MPU6050_Typedefs
|
59 |
* @brief Library Typedefs
|
60 |
* @{
|
61 |
*/
|
62 |
|
63 |
/**
|
64 |
* @brief I2C address masks. TODO: Set to MPU6050 adresses!
|
65 |
*/
|
66 |
enum {
|
67 |
MPU6050_LLD_I2C_ADDR_FIXED = 0x0040u,
|
68 |
MPU6050_LLD_I2C_ADDR_A0 = 0x0001u,
|
69 |
MPU6050_LLD_I2C_ADDR_A1 = 0x0004u,
|
70 |
}; |
71 |
|
72 |
/**
|
73 |
* @brief Registers. TODO: Adjust to MPU6050 registers
|
74 |
*/
|
75 |
typedef enum { |
76 |
MPU6050_LLD_REGISTER_CONFIGURATION = 0x00,
|
77 |
MPU6050_LLD_REGISTER_SHUNT_VOLTAGE = 0x01,
|
78 |
MPU6050_LLD_REGISTER_BUS_VOLTAGE = 0x02,
|
79 |
MPU6050_LLD_REGISTER_POWER = 0x03,
|
80 |
MPU6050_LLD_REGISTER_CURRENT = 0x04,
|
81 |
MPU6050_LLD_REGISTER_CALIBRATION = 0x05,
|
82 |
} mpu6050_lld_register_t; |
83 |
|
84 |
/**
|
85 |
* @brief MPU6050 can have 2 different slave addresses, depends on it's input AD0 pin
|
86 |
* This feature allows you to use 2 different sensors with this library at the same time
|
87 |
*/
|
88 |
typedef enum { |
89 |
SD_MPU6050_Device_0 = 0x00, /*!< AD0 pin is set to low */ |
90 |
SD_MPU6050_Device_1 = 0x02 /*!< AD0 pin is set to high */ |
91 |
} SD_MPU6050_Device; |
92 |
|
93 |
/**
|
94 |
* @brief MPU6050 result enumeration
|
95 |
*/
|
96 |
typedef enum { |
97 |
SD_MPU6050_Result_Ok = 0x00, /*!< Everything OK */ |
98 |
SD_MPU6050_Result_Error, /*!< Unknown error */
|
99 |
SD_MPU6050_Result_DeviceNotConnected, /*!< There is no device with valid slave address */
|
100 |
SD_MPU6050_Result_DeviceInvalid /*!< Connected device with address is not MPU6050 */
|
101 |
} SD_MPU6050_Result; |
102 |
|
103 |
/**
|
104 |
* @brief Parameters for accelerometer range
|
105 |
*/
|
106 |
typedef enum { |
107 |
SD_MPU6050_Accelerometer_2G = 0x00, /*!< Range is +- 2G */ |
108 |
SD_MPU6050_Accelerometer_4G = 0x01, /*!< Range is +- 4G */ |
109 |
SD_MPU6050_Accelerometer_8G = 0x02, /*!< Range is +- 8G */ |
110 |
SD_MPU6050_Accelerometer_16G = 0x03 /*!< Range is +- 16G */ |
111 |
} SD_MPU6050_Accelerometer; |
112 |
|
113 |
/**
|
114 |
* @brief Parameters for gyroscope range
|
115 |
*/
|
116 |
typedef enum { |
117 |
SD_MPU6050_Gyroscope_250s = 0x00, /*!< Range is +- 250 degrees/s */ |
118 |
SD_MPU6050_Gyroscope_500s = 0x01, /*!< Range is +- 500 degrees/s */ |
119 |
SD_MPU6050_Gyroscope_1000s = 0x02, /*!< Range is +- 1000 degrees/s */ |
120 |
SD_MPU6050_Gyroscope_2000s = 0x03 /*!< Range is +- 2000 degrees/s */ |
121 |
} SD_MPU6050_Gyroscope; |
122 |
|
123 |
|
124 |
/**
|
125 |
* @brief Interrupts union and structure
|
126 |
*/
|
127 |
typedef union { |
128 |
struct {
|
129 |
uint8_t DataReady:1; /*!< Data ready interrupt */ |
130 |
uint8_t reserved2:2; /*!< Reserved bits */ |
131 |
uint8_t Master:1; /*!< Master interrupt. Not enabled with library */ |
132 |
uint8_t FifoOverflow:1; /*!< FIFO overflow interrupt. Not enabled with library */ |
133 |
uint8_t reserved1:1; /*!< Reserved bit */ |
134 |
uint8_t MotionDetection:1; /*!< Motion detected interrupt */ |
135 |
uint8_t reserved0:1; /*!< Reserved bit */ |
136 |
} F; |
137 |
uint8_t Status; |
138 |
} SD_MPU6050_Interrupt; |
139 |
|
140 |
/**
|
141 |
* @brief Config register.
|
142 |
*/
|
143 |
typedef union { |
144 |
uint16_t data; |
145 |
struct {
|
146 |
/**
|
147 |
ina219_lld_mode_t mode : 3;
|
148 |
ina219_lld_adc_t sadc : 4;
|
149 |
ina219_lld_adc_t badc : 4;
|
150 |
ina219_lld_gain_t gain : 2;
|
151 |
ina219_lld_brng_t brng : 1;
|
152 |
*/
|
153 |
uint8_t zero : 1;
|
154 |
uint8_t reset : 1;
|
155 |
} options; |
156 |
} mpu6050_lld_cfg_t; |
157 |
|
158 |
|
159 |
/**
|
160 |
* @brief The MPU6050 struct.
|
161 |
*/
|
162 |
typedef struct { |
163 |
apalI2CDriver_t* i2cd; |
164 |
apalI2Caddr_t addr; /**<The address of the module for I2C communication */
|
165 |
uint16_t current_lsb_uA; |
166 |
mpu6050_lld_cfg_t *config; |
167 |
} MPU6050Driver; |
168 |
|
169 |
/**
|
170 |
* @}
|
171 |
*/
|
172 |
|
173 |
/**
|
174 |
* @defgroup SD_MPU6050_Functions
|
175 |
* @brief Library Functions
|
176 |
* @{
|
177 |
*/
|
178 |
|
179 |
//from alld_ina219.h
|
180 |
apalExitStatus_t mpu6050_lld_read_register(const MPU6050Driver* const mpu6050, const mpu6050_lld_register_t addr, uint16_t* const data, const uint8_t num, const apalTime_t timeout); |
181 |
|
182 |
apalExitStatus_t mpu6050_lld_write_register(const MPU6050Driver* const mpu6050, const mpu6050_lld_register_t addr, const uint16_t* const data, const uint8_t num, const apalTime_t timeout); |
183 |
|
184 |
#endif /* defined(AMIROLLD_CFG_USE_MPU6050) */ |
185 |
|
186 |
#endif /* DRIVERS_MYLIB_MPU6050_H_ */ |