照着sensorlib userguid 写的,代码如下
所有用到的全局变量
tI2CMInstance g_sI2C0MInst ;
volatile bool g_bI2C0MDone ;
volatile bool g_bMPU6050Done ;
tMPU6050 stateMPU6050 ;
float fAccel[3], fGyro[3] ;
I2C初始化
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinConfigure(GPIO_PB2_I2C0SCL);
GPIOPinConfigure(GPIO_PB3_I2C0SDA);
GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2);
GPIOPinTypeI2C(I2C0_GPIOADDR_BASE, GPIO_PIN_3);
IntRegister(INT_I2C0, I2C0_IntHandler); //I2C0_IntHandler 是个中断函数里面是 I2CMIntHandler(&g_sI2C0MInst);
IntPrioritySet(INT_I2C0, 1);
I2CMInit(&g_sI2C0MInst, I2C0_BASE, INT_I2C0, 0XFF, 0XFF, SysCtlClockGet());
6050初始化
g_bMPU6050Done = false;
MPU6050Init(&stateMPU6050, &g_sI2C0MInst,MPU6050_I2CADDR, MPU6050Callback, 0); //MPU6050_I2CADDR = 0x68
while(!g_bMPU6050Done)
{
}
g_bMPU6050Done = false;
MPU6050ReadModifyWrite(&stateMPU6050, MPU6050_O_ACCEL_CONFIG, //程序在初始化的时候,刚跳出MPU6050ReadModifyWrite
~MPU6050_ACCEL_CONFIG_AFS_SEL_M, //就进入FaultISR()函数里 且 g_bMPU6050Done为0
MPU6050_ACCEL_CONFIG_AFS_SEL_4G,
MPU6050Callback, 0);
while(!g_bMPU6050Done)
{
}
user151383853:
FaultISR() 这是 Cortex 系列 MCU 的异常(非法操作)的捕捉手段. 不过调试起来, 还是要求对系统一定的熟悉程度.
你可以从异常寄存器了解发生了什么类型的非法操作, 通常可以从堆栈中找到出现错误的指令地址, 建议好好地看一看 Cortex M4 的编程手册.