void Init_I2C(void) { ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); ROM_GPIOPinConfigure(GPIO_PB2_I2C0SCL); ROM_GPIOPinConfigure(GPIO_PB3_I2C0SDA); ROM_GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3); GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2); ROM_GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); ROM_GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD); ROM_I2CMasterInitExpClk(I2C0_BASE,ROM_SysCtlClockGet(),true); SysCtlDelay(500000); ROM_I2CMasterEnable(I2C0_BASE); }
void MPU6050_Init(void){ ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); ROM_SysCtlDelay(3); ROM_GPIOPinConfigure(GPIO_PB2_I2C0SCL); ROM_GPIOPinConfigure(GPIO_PB3_I2C0SDA); ROM_GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2); ROM_GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3); //ROM_GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_0); //GPIOIntEnable(GPIO_PORTB_BASE, GPIO_PIN_0); //ROM_GPIOIntTypeSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_FALLING_EDGE); //ROM_IntEnable(INT_GPIOB); ROM_I2CMasterEnable(I2C0_BASE); I2CMInit(&sI2CInst, I2C0_BASE, INT_I2C0, 0xff, 0xff, ROM_SysCtlClockGet()); g_bMPU6050Done = false; MPU6050Init(&sMPU6050, &sI2CInst, 0x68, MPU6050_Callback, 0); while(!g_bMPU6050Done); g_bMPU6050Done = false; MPU6050ReadModifyWrite(&sMPU6050, MPU6050_O_PWR_MGMT_1, ~MPU6050_PWR_MGMT_1_SLEEP, 0, MPU6050_Callback, 0);//从Sleep模式中激活设备,否则无法写入寄存器 while(!g_bMPU6050Done); // Configure the MPU6050 for +/- 4 g accelerometer range. // g_bMPU6050Done = false; //先读取寄存器的值,再与上Mask,然后再或上Value,将得到的值写入寄存器 MPU6050ReadModifyWrite(&sMPU6050, MPU6050_O_PWR_MGMT_1, ~MPU6050_PWR_MGMT_1_CLKSEL_M, MPU6050_PWR_MGMT_1_CLKSEL_XG, MPU6050_Callback, 0); while(!g_bMPU6050Done); g_bMPU6050Done = false; MPU6050ReadModifyWrite(&sMPU6050, MPU6050_O_ACCEL_CONFIG, ~MPU6050_ACCEL_CONFIG_AFS_SEL_M, MPU6050_ACCEL_CONFIG_AFS_SEL_4G, MPU6050_Callback, 0); while(!g_bMPU6050Done); g_bMPU6050Done = false; MPU6050ReadModifyWrite(&sMPU6050, MPU6050_O_CONFIG, ~MPU6050_CONFIG_DLPF_CFG_M, MPU6050_CONFIG_DLPF_CFG_44_42, MPU6050_Callback, 0); while(!g_bMPU6050Done); g_bMPU6050Done = false; MPU6050ReadModifyWrite(&sMPU6050, MPU6050_O_GYRO_CONFIG, ~MPU6050_GYRO_CONFIG_FS_SEL_M, MPU6050_GYRO_CONFIG_FS_SEL_2000, MPU6050_Callback, 0); while(!g_bMPU6050Done); MPU6050Read(&sMPU6050,MPU6050_O_WHO_AM_I,&deviceID,1,MPU6050_Callback,0);//MPU-60X0设备号默认0x68 ROM_SysCtlDelay(ROM_SysCtlClockGet()/(3*1000)); MPU6050Read(&sMPU6050,MPU6050_O_PWR_MGMT_1,&PowerInfo,1,MPU6050_Callback,0);//若读到的值是0x00,则设备处于激活状态。0x40则为休眠状态 }