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

TM4C123FH6PM I2C2模块问题

先上代码

void MPU9150_Init(void)
{

SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C2);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
GPIOPinConfigure(GPIO_PE4_I2C2SCL);
GPIOPinConfigure(GPIO_PE5_I2C2SDA);
GPIOPinTypeI2CSCL(GPIO_PORTE_BASE, GPIO_PIN_4);
GPIOPinTypeI2C(GPIO_PORTE_BASE,GPIO_PIN_5);
I2CIntRegister(I2C2_BASE,MPU9150I2CIntHandler);
ROM_GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_3);
GPIOIntEnable(GPIO_PORTE_BASE, GPIO_PIN_3);
ROM_GPIOIntTypeSet(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_FALLING_EDGE);
GPIOIntRegister(GPIO_PORTE_BASE,IntGPIOe);
ROM_IntEnable(INT_GPIOE);
ROM_I2CMasterEnable(I2C2_BASE);
I2CMInit(&g_sI2CInst, I2C2_BASE, INT_I2C2, 0xff, 0xff,ROM_SysCtlClockGet());
//
// Initialize the MPU9150 Driver.
//
MPU9150Init(&g_sMPU9150Inst, &g_sI2CInst, MPU9150_I2C_ADDRESS,
MPU9150AppCallback, &g_sMPU9150Inst);

//
// Wait for transaction to complete
//
MPU9150AppI2CWait(__FILE__, __LINE__);
//
// Write application specifice sensor configuration such as filter settings
// and sensor range settings.
//
g_sMPU9150Inst.pui8Data[0] = MPU9150_CONFIG_DLPF_CFG_94_98;
g_sMPU9150Inst.pui8Data[1] = MPU9150_GYRO_CONFIG_FS_SEL_250;
g_sMPU9150Inst.pui8Data[2] = (MPU9150_ACCEL_CONFIG_ACCEL_HPF_5HZ |
MPU9150_ACCEL_CONFIG_AFS_SEL_2G);
MPU9150Write(&g_sMPU9150Inst, MPU9150_O_CONFIG, g_sMPU9150Inst.pui8Data, 3,
MPU9150AppCallback, &g_sMPU9150Inst);
//
// Wait for transaction to complete
//
MPU9150AppI2CWait(__FILE__, __LINE__);

//
// Configure the data ready interrupt pin output of the MPU9150.
//
g_sMPU9150Inst.pui8Data[0] = MPU9150_INT_PIN_CFG_INT_LEVEL |
MPU9150_INT_PIN_CFG_INT_RD_CLEAR |
MPU9150_INT_PIN_CFG_LATCH_INT_EN;
g_sMPU9150Inst.pui8Data[1] = MPU9150_INT_ENABLE_DATA_RDY_EN;
MPU9150Write(&g_sMPU9150Inst, MPU9150_O_INT_PIN_CFG,
g_sMPU9150Inst.pui8Data, 2, MPU9150AppCallback,
&g_sMPU9150Inst);

//
// Wait for transaction to complete
//
MPU9150AppI2CWait(__FILE__, __LINE__);

}

//===============================================================分割线

使用I2C2模块对MPU9150进行读写,但是却卡在了MPU9150AppI2CWait函数里面,

void
MPU9150AppI2CWait(char *pcFilename, uint_fast32_t ui32Line)
{
//
// Put the processor to sleep while we wait for the I2C driver to
// indicate that the transaction is complete.
//
while((g_vui8I2CDoneFlag == 0) && (g_vui8ErrorFlag == 0))
{
//
// Do Nothing
//
//rt_kprintf("Do Nothing\n");
}

//
// If an error occurred call the error handler immediately.
//
if(g_vui8ErrorFlag)
{
MPU9150AppErrorHandler(pcFilename, ui32Line);
}

//
// clear the data flag for next use.
//
g_vui8I2CDoneFlag = 0;
}

原因是I2C读取为完成。

同样的代码,我改成I2C0 I2C3都可以成功读取数据。怎么I2C2就不行了????

看了数据手册与库API,检查了硬件连接,PE4 PE5试过配置成输出驱动LED,是可以的。

没发现什么问题啊,PE4 PE5又不是锁定的GPIO,也不用解锁。

难道是芯片硬件BUG吗?????

求官方解答下。

xyz549040622:

你仔细翻以前的帖子,有好多人碰到过这个情况,看看他们如何解决的了

赞(0)
未经允许不得转载:TI中文支持网 » TM4C123FH6PM I2C2模块问题
分享到: 更多 (0)