本实验的源码工程在开发板光盘资料的:i.MX6UL终结者光盘资料\04_裸机例程源码\19_mpu6050目录下。我们在Ubuntu系统下使用命令“mkdir 19_mpu6050”建立“19_mpu6050”文件夹,如图 1所示:
然后使用“cd 19_mpu6050”命令进入到19_mpu6050文件夹,如图 2所示:
然后使用命令“cp -r …/18_touchscreen/* ./”将上一章例程中的所有内容拷贝到刚刚新建的“19_mpu6050”里面,如图 27.3.3所示:
然后在drivers目录下建立mpu6050文件夹,用来保存mpu6050的驱动文件,然后在“drivers/mpu6050”目录中新建mpu6050.h和mpu6050.c两个文件,然后在mpu6050.h文件输入下面的代码:
1 #ifndef _BSP_MPU6050_H
2 #define _BSP_MPU6050_H
3
4 #include "imx6ul.h"
5
6 #define MPU6050_ADDR 0X68 /* MPU6050器件地址 */
7
8 /* MPU6050寄存器 */
9 #define MPU_CFG_REG 0X1A /*配置寄存器*/
10 #define MPU_PWR_MGMT1_REG 0x6B /*电源管理寄存器1*/
11 #define MPU_PWR_MGMT2_REG 0x6C /*电源管理寄存器2*/
12 #define MPU_GYRO_CFG_REG 0x1B /*陀螺仪配置寄存器*/
13 #define MPU_ACCEL_CFG_REG 0x1C /*加速度配置寄存器*/
14 #define MPU_SAMPLE_RATE_REG 0x19 /*采样频率分频器*/
15 #define MPU_INT_EN_REG 0x38 /*中断使能寄存器*/
16 #define MPU_USER_CTRL_REG 0x6A /*用户控制寄存器*/
17 #define MPU_FIFO_EN_REG 0x23 /*FIFO使能寄存器*/
18 #define MPU_INTBP_CFG_REG 0x37 /*中断旁路设置寄存器*/
19
20 #define ACCEL_XOUT_H 0x3B /* 加速度值,X轴高8位寄存器 */
21 #define ACCEL_YOUT_H 0x3D /* 加速度值,Y轴高8位寄存器 */
22 #define ACCEL_ZOUT_H 0x3F /* 加速度值,Z轴高8位寄存器 */
23 #define GYRO_XOUT_H 0x43 /* 陀螺仪值,X轴高8位寄存器 */
24 #define GYRO_YOUT_H 0x45 /* 陀螺仪值,Y轴高8位寄存器 */
25 #define GYRO_ZOUT_H 0x47 /* 陀螺仪值,Z轴高8位寄存器 */
26
27
28 /* 函数声明 */
29 void mpu6050_init(void);
30 unsigned char mpu6050_readonebyte(unsigned char addr,unsigned char reg);
31 unsigned char mpu6050_writeonebyte(unsigned char addr,
unsigned char reg,
unsigned char data);
32
33 #endif
mpu6050.h文件里面主要定义了一些与mpu6050寄存器相关的宏,以及声明了一些函数。
然后我们打开mpu6050.c文件,在里面输入下面的代码:
1 #include "mpu6050.h"
2 #include "i2c.h"
3 #include "delay.h"
4 #include "cc.h"
5 #include "stdio.h"
6
7 /*
8 * @description : 初始化MPU6050
9 * @param : 无
10 * @return : 无返回
11 */
12 void mpu6050_init(void)
13 {
14
15 /* 1、IO初始化,配置I2C IO属性
16 * I2C1_SCL -> UART4_TXD
17 * I2C1_SDA -> UART4_RXD
18 */
19 IOMUXC_SetPinMux(IOMUXC_UART4_TX_DATA_I2C1_SCL, 1);
20 IOMUXC_SetPinMux(IOMUXC_UART4_RX_DATA_I2C1_SDA, 1);
21
22 /*
23 *bit 16:0 HYS关闭
24 *bit [15:14]: 1 默认47K上拉
25 *bit [13]: 1 pull功能
26 *bit [12]: 1 pull/keeper使能
27 *bit [11]: 0 关闭开路输出
28 *bit [7:6]: 10 速度100Mhz
29 *bit [5:3]: 110 驱动能力为R0/6
30 *bit [0]: 1 高转换率
31 */
32 IOMUXC_SetPinConfig(IOMUXC_UART4_TX_DATA_I2C1_SCL, 0x70B0);
33 IOMUXC_SetPinConfig(IOMUXC_UART4_RX_DATA_I2C1_SDA, 0X70B0);
34
35 i2c_init(I2C1); /* 初始化I2C1 */
36
37 /* 2、初始化MPU6050 */
38 mpu6050_writeonebyte(MPU6050_ADDR,
MPU_PWR_MGMT1_REG,
0X80); /* 复位MPU6050 */
39 delayms(50);
40 mpu6050_writeonebyte(MPU6050_ADDR,
MPU_PWR_MGMT1_REG,
0X00); /* 唤醒MPU6050 */
41 delayms(50)