TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C123G使用sensorlib驱动 6050 卡死在FaultISR()里面

照着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  的编程手册. 

赞(0)
未经允许不得转载:TI中文支持网 » TM4C123G使用sensorlib驱动 6050 卡死在FaultISR()里面
分享到: 更多 (0)