mpu6050.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. #ifndef _MPU6050_H
  2. #define _MPU6050_H
  3. #include <ioCC2530.h>
  4. #include "OSAL.h"
  5. #include "OnBoard.h"
  6. #include "public.h"
  7. //#if 1
  8. //#define SCL P1_5 //定义模拟IIC的时钟线
  9. //#define SDA P1_6 //定义模拟IIC的数据线
  10. //#else
  11. //#define SCL P0_7 //定义
  12. //#define SDA P0_6 //定义
  13. //#endif
  14. #define MPU6050_SCL_PIN P1_5 //数据引脚
  15. #define MPU6050_SCL_PORT P1DIR
  16. #define MPU6050_SCL_NUM GPIO_5
  17. //引脚配置为输出;
  18. #define MPU6050_SCL_PIN_OUT() { MPU6050_SCL_PORT |= MPU6050_SCL_NUM; asm("NOP"); }
  19. //引脚配置为输入;
  20. #define MPU6050_SCL_PIN_IN() { MPU6050_SCL_PORT &= ~MPU6050_SCL_NUM; asm("NOP"); }
  21. #define MPU6050_SDA_PIN P1_6 //数据引脚
  22. #define MPU6050_SDA_PORT P1DIR
  23. #define MPU6050_SDA_NUM GPIO_6
  24. //引脚配置为输出;
  25. #define MPU6050_SDA_PIN_OUT() { MPU6050_SDA_PORT |= MPU6050_SDA_NUM; asm("NOP"); }
  26. //引脚配置为输入;
  27. #define MPU6050_SDA_PIN_IN() { MPU6050_SDA_PORT &= ~MPU6050_SDA_NUM; asm("NOP"); }
  28. #define PORT_USED 0
  29. #define MPU6050_ADDRESS_AD0_LOW 0x68 // address pin low (GND), default for InvenSense evaluation board
  30. #define MPU6050_ADDRESS_AD0_HIGH 0x69 // address pin high (VCC)
  31. #define MPU6050_DEFAULT_ADDRESS (MPU6050_ADDRESS_AD0_LOW<<1)
  32. #define MPU6050_RA_XG_OFFS_TC 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD
  33. #define MPU6050_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
  34. #define MPU6050_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
  35. #define MPU6050_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN
  36. #define MPU6050_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN
  37. #define MPU6050_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN
  38. #define MPU6050_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS
  39. #define MPU6050_RA_XA_OFFS_L_TC 0x07
  40. #define MPU6050_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS
  41. #define MPU6050_RA_YA_OFFS_L_TC 0x09
  42. #define MPU6050_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS
  43. #define MPU6050_RA_ZA_OFFS_L_TC 0x0B
  44. #define MPU6050_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR
  45. #define MPU6050_RA_XG_OFFS_USRL 0x14
  46. #define MPU6050_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR
  47. #define MPU6050_RA_YG_OFFS_USRL 0x16
  48. #define MPU6050_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR
  49. #define MPU6050_RA_ZG_OFFS_USRL 0x18
  50. #define MPU6050_RA_SMPLRT_DIV 0x19
  51. #define MPU6050_RA_CONFIG 0x1A
  52. #define MPU6050_RA_GYRO_CONFIG 0x1B
  53. #define MPU6050_RA_ACCEL_CONFIG 0x1C
  54. #define MPU6050_RA_FF_THR 0x1D
  55. #define MPU6050_RA_FF_DUR 0x1E
  56. #define MPU6050_RA_MOT_THR 0x1F
  57. #define MPU6050_RA_MOT_DUR 0x20
  58. #define MPU6050_RA_ZRMOT_THR 0x21
  59. #define MPU6050_RA_ZRMOT_DUR 0x22
  60. #define MPU6050_RA_FIFO_EN 0x23
  61. #define MPU6050_RA_I2C_MST_CTRL 0x24
  62. #define MPU6050_RA_I2C_SLV0_ADDR 0x25
  63. #define MPU6050_RA_I2C_SLV0_REG 0x26
  64. #define MPU6050_RA_I2C_SLV0_CTRL 0x27
  65. #define MPU6050_RA_I2C_SLV1_ADDR 0x28
  66. #define MPU6050_RA_I2C_SLV1_REG 0x29
  67. #define MPU6050_RA_I2C_SLV1_CTRL 0x2A
  68. #define MPU6050_RA_I2C_SLV2_ADDR 0x2B
  69. #define MPU6050_RA_I2C_SLV2_REG 0x2C
  70. #define MPU6050_RA_I2C_SLV2_CTRL 0x2D
  71. #define MPU6050_RA_I2C_SLV3_ADDR 0x2E
  72. #define MPU6050_RA_I2C_SLV3_REG 0x2F
  73. #define MPU6050_RA_I2C_SLV3_CTRL 0x30
  74. #define MPU6050_RA_I2C_SLV4_ADDR 0x31
  75. #define MPU6050_RA_I2C_SLV4_REG 0x32
  76. #define MPU6050_RA_I2C_SLV4_DO 0x33
  77. #define MPU6050_RA_I2C_SLV4_CTRL 0x34
  78. #define MPU6050_RA_I2C_SLV4_DI 0x35
  79. #define MPU6050_RA_I2C_MST_STATUS 0x36
  80. #define MPU6050_RA_INT_PIN_CFG 0x37
  81. #define MPU6050_RA_INT_ENABLE 0x38
  82. #define MPU6050_RA_DMP_INT_STATUS 0x39
  83. #define MPU6050_RA_INT_STATUS 0x3A
  84. #define MPU6050_RA_ACCEL_XOUT_H 0x3B
  85. #define MPU6050_RA_ACCEL_XOUT_L 0x3C
  86. #define MPU6050_RA_ACCEL_YOUT_H 0x3D
  87. #define MPU6050_RA_ACCEL_YOUT_L 0x3E
  88. #define MPU6050_RA_ACCEL_ZOUT_H 0x3F
  89. #define MPU6050_RA_ACCEL_ZOUT_L 0x40
  90. #define MPU6050_RA_TEMP_OUT_H 0x41
  91. #define MPU6050_RA_TEMP_OUT_L 0x42
  92. #define MPU6050_RA_GYRO_XOUT_H 0x43
  93. #define MPU6050_RA_GYRO_XOUT_L 0x44
  94. #define MPU6050_RA_GYRO_YOUT_H 0x45
  95. #define MPU6050_RA_GYRO_YOUT_L 0x46
  96. #define MPU6050_RA_GYRO_ZOUT_H 0x47
  97. #define MPU6050_RA_GYRO_ZOUT_L 0x48
  98. #define MPU6050_RA_EXT_SENS_DATA_00 0x49
  99. #define MPU6050_RA_EXT_SENS_DATA_01 0x4A
  100. #define MPU6050_RA_EXT_SENS_DATA_02 0x4B
  101. #define MPU6050_RA_EXT_SENS_DATA_03 0x4C
  102. #define MPU6050_RA_EXT_SENS_DATA_04 0x4D
  103. #define MPU6050_RA_EXT_SENS_DATA_05 0x4E
  104. #define MPU6050_RA_EXT_SENS_DATA_06 0x4F
  105. #define MPU6050_RA_EXT_SENS_DATA_07 0x50
  106. #define MPU6050_RA_EXT_SENS_DATA_08 0x51
  107. #define MPU6050_RA_EXT_SENS_DATA_09 0x52
  108. #define MPU6050_RA_EXT_SENS_DATA_10 0x53
  109. #define MPU6050_RA_EXT_SENS_DATA_11 0x54
  110. #define MPU6050_RA_EXT_SENS_DATA_12 0x55
  111. #define MPU6050_RA_EXT_SENS_DATA_13 0x56
  112. #define MPU6050_RA_EXT_SENS_DATA_14 0x57
  113. #define MPU6050_RA_EXT_SENS_DATA_15 0x58
  114. #define MPU6050_RA_EXT_SENS_DATA_16 0x59
  115. #define MPU6050_RA_EXT_SENS_DATA_17 0x5A
  116. #define MPU6050_RA_EXT_SENS_DATA_18 0x5B
  117. #define MPU6050_RA_EXT_SENS_DATA_19 0x5C
  118. #define MPU6050_RA_EXT_SENS_DATA_20 0x5D
  119. #define MPU6050_RA_EXT_SENS_DATA_21 0x5E
  120. #define MPU6050_RA_EXT_SENS_DATA_22 0x5F
  121. #define MPU6050_RA_EXT_SENS_DATA_23 0x60
  122. #define MPU6050_RA_MOT_DETECT_STATUS 0x61
  123. #define MPU6050_RA_I2C_SLV0_DO 0x63
  124. #define MPU6050_RA_I2C_SLV1_DO 0x64
  125. #define MPU6050_RA_I2C_SLV2_DO 0x65
  126. #define MPU6050_RA_I2C_SLV3_DO 0x66
  127. #define MPU6050_RA_I2C_MST_DELAY_CTRL 0x67
  128. #define MPU6050_RA_SIGNAL_PATH_RESET 0x68
  129. #define MPU6050_RA_MOT_DETECT_CTRL 0x69
  130. #define MPU6050_RA_USER_CTRL 0x6A
  131. #define MPU6050_RA_PWR_MGMT_1 0x6B
  132. #define MPU6050_RA_PWR_MGMT_2 0x6C
  133. #define MPU6050_RA_BANK_SEL 0x6D
  134. #define MPU6050_RA_MEM_START_ADDR 0x6E
  135. #define MPU6050_RA_MEM_R_W 0x6F
  136. #define MPU6050_RA_DMP_CFG_1 0x70
  137. #define MPU6050_RA_DMP_CFG_2 0x71
  138. #define MPU6050_RA_FIFO_COUNTH 0x72
  139. #define MPU6050_RA_FIFO_COUNTL 0x73
  140. #define MPU6050_RA_FIFO_R_W 0x74
  141. #define MPU6050_RA_WHO_AM_I 0x75
  142. #define MPU6050_TC_PWR_MODE_BIT 7
  143. #define MPU6050_TC_OFFSET_BIT 6
  144. #define MPU6050_TC_OFFSET_LENGTH 6
  145. #define MPU6050_TC_OTP_BNK_VLD_BIT 0
  146. #define MPU6050_VDDIO_LEVEL_VLOGIC 0
  147. #define MPU6050_VDDIO_LEVEL_VDD 1
  148. #define MPU6050_CFG_EXT_SYNC_SET_BIT 5
  149. #define MPU6050_CFG_EXT_SYNC_SET_LENGTH 3
  150. #define MPU6050_CFG_DLPF_CFG_BIT 2
  151. #define MPU6050_CFG_DLPF_CFG_LENGTH 3
  152. #define MPU6050_EXT_SYNC_DISABLED 0x0
  153. #define MPU6050_EXT_SYNC_TEMP_OUT_L 0x1
  154. #define MPU6050_EXT_SYNC_GYRO_XOUT_L 0x2
  155. #define MPU6050_EXT_SYNC_GYRO_YOUT_L 0x3
  156. #define MPU6050_EXT_SYNC_GYRO_ZOUT_L 0x4
  157. #define MPU6050_EXT_SYNC_ACCEL_XOUT_L 0x5
  158. #define MPU6050_EXT_SYNC_ACCEL_YOUT_L 0x6
  159. #define MPU6050_EXT_SYNC_ACCEL_ZOUT_L 0x7
  160. #define MPU6050_DLPF_BW_256 0x00
  161. #define MPU6050_DLPF_BW_188 0x01
  162. #define MPU6050_DLPF_BW_98 0x02
  163. #define MPU6050_DLPF_BW_42 0x03
  164. #define MPU6050_DLPF_BW_20 0x04
  165. #define MPU6050_DLPF_BW_10 0x05
  166. #define MPU6050_DLPF_BW_5 0x06
  167. #define MPU6050_GCONFIG_FS_SEL_BIT 4
  168. #define MPU6050_GCONFIG_FS_SEL_LENGTH 2
  169. #define MPU6050_GYRO_FS_250 0x00
  170. #define MPU6050_GYRO_FS_500 0x01
  171. #define MPU6050_GYRO_FS_1000 0x02
  172. #define MPU6050_GYRO_FS_2000 0x03
  173. #define MPU6050_ACONFIG_XA_ST_BIT 7
  174. #define MPU6050_ACONFIG_YA_ST_BIT 6
  175. #define MPU6050_ACONFIG_ZA_ST_BIT 5
  176. #define MPU6050_ACONFIG_AFS_SEL_BIT 4
  177. #define MPU6050_ACONFIG_AFS_SEL_LENGTH 2
  178. #define MPU6050_ACONFIG_ACCEL_HPF_BIT 2
  179. #define MPU6050_ACONFIG_ACCEL_HPF_LENGTH 3
  180. #define MPU6050_ACCEL_FS_2 0x00
  181. #define MPU6050_ACCEL_FS_4 0x01
  182. #define MPU6050_ACCEL_FS_8 0x02
  183. #define MPU6050_ACCEL_FS_16 0x03
  184. #define MPU6050_DHPF_RESET 0x00
  185. #define MPU6050_DHPF_5 0x01
  186. #define MPU6050_DHPF_2P5 0x02
  187. #define MPU6050_DHPF_1P25 0x03
  188. #define MPU6050_DHPF_0P63 0x04
  189. #define MPU6050_DHPF_HOLD 0x07
  190. #define MPU6050_TEMP_FIFO_EN_BIT 7
  191. #define MPU6050_XG_FIFO_EN_BIT 6
  192. #define MPU6050_YG_FIFO_EN_BIT 5
  193. #define MPU6050_ZG_FIFO_EN_BIT 4
  194. #define MPU6050_ACCEL_FIFO_EN_BIT 3
  195. #define MPU6050_SLV2_FIFO_EN_BIT 2
  196. #define MPU6050_SLV1_FIFO_EN_BIT 1
  197. #define MPU6050_SLV0_FIFO_EN_BIT 0
  198. #define MPU6050_MULT_MST_EN_BIT 7
  199. #define MPU6050_WAIT_FOR_ES_BIT 6
  200. #define MPU6050_SLV_3_FIFO_EN_BIT 5
  201. #define MPU6050_I2C_MST_P_NSR_BIT 4
  202. #define MPU6050_I2C_MST_CLK_BIT 3
  203. #define MPU6050_I2C_MST_CLK_LENGTH 4
  204. #define MPU6050_CLOCK_DIV_348 0x0
  205. #define MPU6050_CLOCK_DIV_333 0x1
  206. #define MPU6050_CLOCK_DIV_320 0x2
  207. #define MPU6050_CLOCK_DIV_308 0x3
  208. #define MPU6050_CLOCK_DIV_296 0x4
  209. #define MPU6050_CLOCK_DIV_286 0x5
  210. #define MPU6050_CLOCK_DIV_276 0x6
  211. #define MPU6050_CLOCK_DIV_267 0x7
  212. #define MPU6050_CLOCK_DIV_258 0x8
  213. #define MPU6050_CLOCK_DIV_500 0x9
  214. #define MPU6050_CLOCK_DIV_471 0xA
  215. #define MPU6050_CLOCK_DIV_444 0xB
  216. #define MPU6050_CLOCK_DIV_421 0xC
  217. #define MPU6050_CLOCK_DIV_400 0xD
  218. #define MPU6050_CLOCK_DIV_381 0xE
  219. #define MPU6050_CLOCK_DIV_364 0xF
  220. #define MPU6050_I2C_SLV_RW_BIT 7
  221. #define MPU6050_I2C_SLV_ADDR_BIT 6
  222. #define MPU6050_I2C_SLV_ADDR_LENGTH 7
  223. #define MPU6050_I2C_SLV_EN_BIT 7
  224. #define MPU6050_I2C_SLV_BYTE_SW_BIT 6
  225. #define MPU6050_I2C_SLV_REG_DIS_BIT 5
  226. #define MPU6050_I2C_SLV_GRP_BIT 4
  227. #define MPU6050_I2C_SLV_LEN_BIT 3
  228. #define MPU6050_I2C_SLV_LEN_LENGTH 4
  229. #define MPU6050_I2C_SLV4_RW_BIT 7
  230. #define MPU6050_I2C_SLV4_ADDR_BIT 6
  231. #define MPU6050_I2C_SLV4_ADDR_LENGTH 7
  232. #define MPU6050_I2C_SLV4_EN_BIT 7
  233. #define MPU6050_I2C_SLV4_INT_EN_BIT 6
  234. #define MPU6050_I2C_SLV4_REG_DIS_BIT 5
  235. #define MPU6050_I2C_SLV4_MST_DLY_BIT 4
  236. #define MPU6050_I2C_SLV4_MST_DLY_LENGTH 5
  237. #define MPU6050_MST_PASS_THROUGH_BIT 7
  238. #define MPU6050_MST_I2C_SLV4_DONE_BIT 6
  239. #define MPU6050_MST_I2C_LOST_ARB_BIT 5
  240. #define MPU6050_MST_I2C_SLV4_NACK_BIT 4
  241. #define MPU6050_MST_I2C_SLV3_NACK_BIT 3
  242. #define MPU6050_MST_I2C_SLV2_NACK_BIT 2
  243. #define MPU6050_MST_I2C_SLV1_NACK_BIT 1
  244. #define MPU6050_MST_I2C_SLV0_NACK_BIT 0
  245. #define MPU6050_INTCFG_INT_LEVEL_BIT 7
  246. #define MPU6050_INTCFG_INT_OPEN_BIT 6
  247. #define MPU6050_INTCFG_LATCH_INT_EN_BIT 5
  248. #define MPU6050_INTCFG_INT_RD_CLEAR_BIT 4
  249. #define MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT 3
  250. #define MPU6050_INTCFG_FSYNC_INT_EN_BIT 2
  251. #define MPU6050_INTCFG_I2C_BYPASS_EN_BIT 1
  252. #define MPU6050_INTCFG_CLKOUT_EN_BIT 0
  253. #define MPU6050_INTMODE_ACTIVEHIGH 0x00
  254. #define MPU6050_INTMODE_ACTIVELOW 0x01
  255. #define MPU6050_INTDRV_PUSHPULL 0x00
  256. #define MPU6050_INTDRV_OPENDRAIN 0x01
  257. #define MPU6050_INTLATCH_50USPULSE 0x00
  258. #define MPU6050_INTLATCH_WAITCLEAR 0x01
  259. #define MPU6050_INTCLEAR_STATUSREAD 0x00
  260. #define MPU6050_INTCLEAR_ANYREAD 0x01
  261. #define MPU6050_INTERRUPT_FF_BIT 7
  262. #define MPU6050_INTERRUPT_MOT_BIT 6
  263. #define MPU6050_INTERRUPT_ZMOT_BIT 5
  264. #define MPU6050_INTERRUPT_FIFO_OFLOW_BIT 4
  265. #define MPU6050_INTERRUPT_I2C_MST_INT_BIT 3
  266. #define MPU6050_INTERRUPT_PLL_RDY_INT_BIT 2
  267. #define MPU6050_INTERRUPT_DMP_INT_BIT 1
  268. #define MPU6050_INTERRUPT_DATA_RDY_BIT 0
  269. // TODO: Need to work on DMP related things
  270. #define MPU6050_DMPINT_5_BIT 5
  271. #define MPU6050_DMPINT_4_BIT 4
  272. #define MPU6050_DMPINT_3_BIT 3
  273. #define MPU6050_DMPINT_2_BIT 2
  274. #define MPU6050_DMPINT_1_BIT 1
  275. #define MPU6050_DMPINT_0_BIT 0
  276. #define MPU6050_MOTION_MOT_XNEG_BIT 7
  277. #define MPU6050_MOTION_MOT_XPOS_BIT 6
  278. #define MPU6050_MOTION_MOT_YNEG_BIT 5
  279. #define MPU6050_MOTION_MOT_YPOS_BIT 4
  280. #define MPU6050_MOTION_MOT_ZNEG_BIT 3
  281. #define MPU6050_MOTION_MOT_ZPOS_BIT 2
  282. #define MPU6050_MOTION_MOT_ZRMOT_BIT 0
  283. #define MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT 7
  284. #define MPU6050_DELAYCTRL_I2C_SLV4_DLY_EN_BIT 4
  285. #define MPU6050_DELAYCTRL_I2C_SLV3_DLY_EN_BIT 3
  286. #define MPU6050_DELAYCTRL_I2C_SLV2_DLY_EN_BIT 2
  287. #define MPU6050_DELAYCTRL_I2C_SLV1_DLY_EN_BIT 1
  288. #define MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT 0
  289. #define MPU6050_PATHRESET_GYRO_RESET_BIT 2
  290. #define MPU6050_PATHRESET_ACCEL_RESET_BIT 1
  291. #define MPU6050_PATHRESET_TEMP_RESET_BIT 0
  292. #define MPU6050_DETECT_ACCEL_ON_DELAY_BIT 5
  293. #define MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH 2
  294. #define MPU6050_DETECT_FF_COUNT_BIT 3
  295. #define MPU6050_DETECT_FF_COUNT_LENGTH 2
  296. #define MPU6050_DETECT_MOT_COUNT_BIT 1
  297. #define MPU6050_DETECT_MOT_COUNT_LENGTH 2
  298. #define MPU6050_DETECT_DECREMENT_RESET 0x0
  299. #define MPU6050_DETECT_DECREMENT_1 0x1
  300. #define MPU6050_DETECT_DECREMENT_2 0x2
  301. #define MPU6050_DETECT_DECREMENT_4 0x3
  302. #define MPU6050_USERCTRL_DMP_EN_BIT 7
  303. #define MPU6050_USERCTRL_FIFO_EN_BIT 6
  304. #define MPU6050_USERCTRL_I2C_MST_EN_BIT 5
  305. #define MPU6050_USERCTRL_I2C_IF_DIS_BIT 4
  306. #define MPU6050_USERCTRL_DMP_RESET_BIT 3
  307. #define MPU6050_USERCTRL_FIFO_RESET_BIT 2
  308. #define MPU6050_USERCTRL_I2C_MST_RESET_BIT 1
  309. #define MPU6050_USERCTRL_SIG_COND_RESET_BIT 0
  310. #define MPU6050_PWR1_DEVICE_RESET_BIT 7
  311. #define MPU6050_PWR1_SLEEP_BIT 6
  312. #define MPU6050_PWR1_CYCLE_BIT 5
  313. #define MPU6050_PWR1_TEMP_DIS_BIT 3
  314. #define MPU6050_PWR1_CLKSEL_BIT 2
  315. #define MPU6050_PWR1_CLKSEL_LENGTH 3
  316. #define MPU6050_CLOCK_INTERNAL 0x00
  317. #define MPU6050_CLOCK_PLL_XGYRO 0x01
  318. #define MPU6050_CLOCK_PLL_YGYRO 0x02
  319. #define MPU6050_CLOCK_PLL_ZGYRO 0x03
  320. #define MPU6050_CLOCK_PLL_EXT32K 0x04
  321. #define MPU6050_CLOCK_PLL_EXT19M 0x05
  322. #define MPU6050_CLOCK_KEEP_RESET 0x07
  323. #define MPU6050_PWR2_LP_WAKE_CTRL_BIT 7
  324. #define MPU6050_PWR2_LP_WAKE_CTRL_LENGTH 2
  325. #define MPU6050_PWR2_STBY_XA_BIT 5
  326. #define MPU6050_PWR2_STBY_YA_BIT 4
  327. #define MPU6050_PWR2_STBY_ZA_BIT 3
  328. #define MPU6050_PWR2_STBY_XG_BIT 2
  329. #define MPU6050_PWR2_STBY_YG_BIT 1
  330. #define MPU6050_PWR2_STBY_ZG_BIT 0
  331. #define MPU6050_WAKE_FREQ_1P25 0x0
  332. #define MPU6050_WAKE_FREQ_2P5 0x1
  333. #define MPU6050_WAKE_FREQ_5 0x2
  334. #define MPU6050_WAKE_FREQ_10 0x3
  335. #define MPU6050_BANKSEL_PRFTCH_EN_BIT 6
  336. #define MPU6050_BANKSEL_CFG_USER_BANK_BIT 5
  337. #define MPU6050_BANKSEL_MEM_SEL_BIT 4
  338. #define MPU6050_BANKSEL_MEM_SEL_LENGTH 5
  339. #define MPU6050_WHO_AM_I_BIT 6
  340. #define MPU6050_WHO_AM_I_LENGTH 6
  341. #define MPU6050_DMP_MEMORY_BANKS 8
  342. #define MPU6050_DMP_MEMORY_BANK_SIZE 256
  343. #define MPU6050_DMP_MEMORY_CHUNK_SIZE 16
  344. void MPU6050_Read(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char readNum);
  345. void MPU6050_WriteBits(uint8_t slaveAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data);
  346. void MPU6050_WriteBit(uint8_t slaveAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data);
  347. void MPU6050_ReadBits(uint8_t slaveAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t *data);
  348. void MPU6050_Initialize(void); //初始化
  349. uint8_t MPU6050_GetDeviceID(void); //读取器件ID
  350. //读出mpu6050的三轴传感器、温度和三轴陀螺仪数据
  351. void MPU6050_GetRawAccelGyro(int16_t* ax, int16_t* ay, int16_t* az, \
  352. int16_t* temperature, int16_t* gx, int16_t* gy, int16_t* gz);
  353. unsigned char MPU6050_Read_1BYTE(unsigned char SlaveAddress,unsigned char REG_Address);
  354. //typedef signed char int8;
  355. //typedef unsigned char uint8;
  356. //***********************************************************************************
  357. // Function prototypes
  358. void accInit(void);
  359. void accStop(void);
  360. void accWriteReg(uint8 reg, uint8 val);
  361. void accReadReg(uint8 reg, uint8 *pVal);
  362. void accReadAcc(int8 *pXVal, int8 *pYVal, int8 *pZVal);
  363. //void accReadAccGro(int8 *pXAcc, int8 *pYAcc, int8 *pZAcc, int8 *pXGro, int8 *pYGro, int8 *pZGro);
  364. void accReadAccGro(int16_t *pXAcc, int16_t *pYAcc, int16_t *pZAcc, int16_t *pXGro, int16_t *pYGro, int16_t *pZGro);
  365. #endif
  366. /*****************************************************************************
  367. ** End Of File
  368. ******************************************************************************/