mpu6050.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. // Copyright 2021 IOsetting <iosetting(at)outlook.com>
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #ifndef __FW_MPU6050__
  15. #define __FW_MPU6050__
  16. #include "fw_hal.h"
  17. #define MPU6050_ADDR 0xD0 // MPU6050 address for write
  18. /**
  19. * Register Address
  20. */
  21. #define MPU6050_REG_SELF_TEST_X 0x0D // RW
  22. #define MPU6050_REG_SELF_TEST_Y 0x0E // RW
  23. #define MPU6050_REG_SELF_TEST_Z 0x0F // RW
  24. #define MPU6050_REG_SELF_TEST_A 0x10 // RW
  25. #define MPU6050_REG_SMPLRT_DIV 0x19 // RW, Sample Rate Divider
  26. #define MPU6050_REG_CONFIG 0x1A // RW, Configuration
  27. #define MPU6050_REG_GYRO_CONFIG 0x1B // RW, Gyroscope Configuration
  28. #define MPU6050_REG_ACCEL_CONFIG 0x1C // RW, Accelerometer Configuration
  29. #define MPU6050_REG_FIFO_EN 0x23 // RW
  30. #define MPU6050_REG_I2C_MST_CTRL 0x24 // RW
  31. #define MPU6050_REG_I2C_SLV0_ADDR 0x25 // RW
  32. #define MPU6050_REG_I2C_SLV0_REG 0x26 // RW
  33. #define MPU6050_REG_I2C_SLV0_CTRL 0x27 // RW
  34. #define MPU6050_REG_I2C_SLV1_ADDR 0x28 // RW
  35. #define MPU6050_REG_I2C_SLV1_REG 0x29 // RW
  36. #define MPU6050_REG_I2C_SLV1_CTRL 0x2A // RW
  37. #define MPU6050_REG_I2C_SLV2_ADDR 0x2B // RW
  38. #define MPU6050_REG_I2C_SLV2_REG 0x2C // RW
  39. #define MPU6050_REG_I2C_SLV2_CTRL 0x2D // RW
  40. #define MPU6050_REG_I2C_SLV3_ADDR 0x2E // RW
  41. #define MPU6050_REG_I2C_SLV3_REG 0x2F // RW
  42. #define MPU6050_REG_I2C_SLV3_CTRL 0x30 // RW
  43. #define MPU6050_REG_I2C_SLV4_ADDR 0x31 // RW
  44. #define MPU6050_REG_I2C_SLV4_REG 0x32 // RW
  45. #define MPU6050_REG_I2C_SLV4_DO 0x33 // RW
  46. #define MPU6050_REG_I2C_SLV4_CTRL 0x34 // RW
  47. #define MPU6050_REG_I2C_SLV4_DI 0x35 // R
  48. #define MPU6050_REG_I2C_MST_STATUS 0x36 // R
  49. #define MPU6050_REG_INT_PIN_CFG 0x37 // RW
  50. #define MPU6050_REG_INT_ENABLE 0x38 // RW
  51. #define MPU6050_REG_INT_STATUS 0x3A // R
  52. #define MPU6050_REG_ACCEL_XOUT_H 0x3B // R
  53. #define MPU6050_REG_ACCEL_XOUT_L 0x3C // R
  54. #define MPU6050_REG_ACCEL_YOUT_H 0x3D // R
  55. #define MPU6050_REG_ACCEL_YOUT_L 0x3E // R
  56. #define MPU6050_REG_ACCEL_ZOUT_H 0x3F // R
  57. #define MPU6050_REG_ACCEL_ZOUT_L 0x40 // R
  58. #define MPU6050_REG_TEMP_OUT_H 0x41 // R
  59. #define MPU6050_REG_TEMP_OUT_L 0x42 // R
  60. #define MPU6050_REG_GYRO_XOUT_H 0x43 // R
  61. #define MPU6050_REG_GYRO_XOUT_L 0x44 // R
  62. #define MPU6050_REG_GYRO_YOUT_H 0x45 // R
  63. #define MPU6050_REG_GYRO_YOUT_L 0x46 // R
  64. #define MPU6050_REG_GYRO_ZOUT_H 0x47 // R
  65. #define MPU6050_REG_GYRO_ZOUT_L 0x48 // R
  66. #define MPU6050_REG_EXT_SENS_DATA_00 0x49 // R
  67. #define MPU6050_REG_EXT_SENS_DATA_01 0x4A // R
  68. #define MPU6050_REG_EXT_SENS_DATA_02 0x4B // R
  69. #define MPU6050_REG_EXT_SENS_DATA_03 0x4C // R
  70. #define MPU6050_REG_EXT_SENS_DATA_04 0x4D // R
  71. #define MPU6050_REG_EXT_SENS_DATA_05 0x4E // R
  72. #define MPU6050_REG_EXT_SENS_DATA_06 0x4F // R
  73. #define MPU6050_REG_EXT_SENS_DATA_07 0x50 // R
  74. #define MPU6050_REG_EXT_SENS_DATA_08 0x51 // R
  75. #define MPU6050_REG_EXT_SENS_DATA_09 0x52 // R
  76. #define MPU6050_REG_EXT_SENS_DATA_10 0x53 // R
  77. #define MPU6050_REG_EXT_SENS_DATA_11 0x54 // R
  78. #define MPU6050_REG_EXT_SENS_DATA_12 0x55 // R
  79. #define MPU6050_REG_EXT_SENS_DATA_13 0x56 // R
  80. #define MPU6050_REG_EXT_SENS_DATA_14 0x57 // R
  81. #define MPU6050_REG_EXT_SENS_DATA_15 0x58 // R
  82. #define MPU6050_REG_EXT_SENS_DATA_16 0x59 // R
  83. #define MPU6050_REG_EXT_SENS_DATA_17 0x5A // R
  84. #define MPU6050_REG_EXT_SENS_DATA_18 0x5B // R
  85. #define MPU6050_REG_EXT_SENS_DATA_19 0x5C // R
  86. #define MPU6050_REG_EXT_SENS_DATA_20 0x5D // R
  87. #define MPU6050_REG_EXT_SENS_DATA_21 0x5E // R
  88. #define MPU6050_REG_EXT_SENS_DATA_22 0x5F // R
  89. #define MPU6050_REG_EXT_SENS_DATA_23 0x60 // R
  90. #define MPU6050_REG_I2C_SLV0_DO 0x63 // RW
  91. #define MPU6050_REG_I2C_SLV1_DO 0x64 // RW
  92. #define MPU6050_REG_I2C_SLV2_DO 0x65 // RW
  93. #define MPU6050_REG_I2C_SLV3_DO 0x66 // RW
  94. #define MPU6050_REG_I2C_MST_DELAY_CTRL 0x67 // RW
  95. #define MPU6050_REG_SIGNAL_PATH_RESET 0x68 // RW
  96. #define MPU6050_REG_USER_CTRL 0x6A // RW
  97. #define MPU6050_REG_PWR_MGMT_1 0x6B // RW
  98. #define MPU6050_REG_PWR_MGMT_2 0x6C // RW
  99. #define MPU6050_REG_FIFO_COUNTH 0x72 // RW
  100. #define MPU6050_REG_FIFO_COUNTL 0x73 // RW
  101. #define MPU6050_REG_FIFO_R_W 0x74 // RW
  102. #define MPU6050_REG_WHO_AM_I 0x75 // R #define
  103. typedef enum
  104. {
  105. MPU6050_Wakeup_Freq_1p25Hz = 0x00,
  106. MPU6050_Wakeup_Freq_5Hz = 0x01,
  107. MPU6050_Wakeup_Freq_20Hz = 0x02,
  108. MPU6050_Wakeup_Freq_40Hz = 0x03,
  109. } MPU6050_Wakeup_Freq_t;
  110. typedef enum
  111. {
  112. MPU6050_DLPF_Delay0ms = 0x00,
  113. MPU6050_DLPF_Delay2ms = 0x01,
  114. MPU6050_DLPF_Delay3ms = 0x02,
  115. MPU6050_DLPF_Delay5ms = 0x03,
  116. MPU6050_DLPF_Delay8ms = 0x04,
  117. MPU6050_DLPF_Delay13ms = 0x05,
  118. MPU6050_DLPF_Delay19ms = 0x06,
  119. } MPU6050_DLPF_t;
  120. typedef enum
  121. {
  122. MPU6050_Gyro_FullScaleRange_250dps = 0x00,
  123. MPU6050_Gyro_FullScaleRange_500dps = 0x01,
  124. MPU6050_Gyro_FullScaleRange_1000dps = 0x02,
  125. MPU6050_Gyro_FullScaleRange_2000dps = 0x03,
  126. } MPU6050_Gyro_FullScaleRange_t;
  127. typedef enum
  128. {
  129. MPU6050_Acc_FullScaleRange_2g = 0x00,
  130. MPU6050_Acc_FullScaleRange_4g = 0x01,
  131. MPU6050_Acc_FullScaleRange_8g = 0x02,
  132. MPU6050_Acc_FullScaleRange_16g = 0x03,
  133. } MPU6050_Acc_FullScaleRange_t;
  134. uint8_t MPU6050_Read(uint8_t addr);
  135. uint16_t MPU6050_ReadInt(uint8_t addr);
  136. void MPU6050_ReadAll(uint16_t *buf);
  137. void MPU6050_Init(void);
  138. void MPU6050_Reset(void);
  139. void MPU6050_EnterSleepMode(void);
  140. void MPU6050_DisableTemperature(HAL_State_t state);
  141. void MPU6050_EnableLowPowerMode(MPU6050_Wakeup_Freq_t freq);
  142. void MPU6050_DisableLowPowerMode(void);
  143. void MPU6050_SetSampleRateDiv(uint8_t div);
  144. void MPU6050_SetDLPF(MPU6050_DLPF_t filter);
  145. void MPU6050_SetGyroFullScaleRange(MPU6050_Gyro_FullScaleRange_t range);
  146. void MPU6050_SetAccFullScaleRange(MPU6050_Acc_FullScaleRange_t range);
  147. #endif // __FW_MPU6050__