Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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则为休眠状态

}