我使用的是:
Tiva TM4C1294NCPDT CPU
CCS 6.1.2使用
TIRTOS 2.16.0.08、
编译器5.2.7和
XDC 3.31.1333
我正在使用 I2C0模块、一切都正常、但有时我会使 I2C 总线挂起、我可以通过 CPU 软复位恢复 I2C、但我想查看是否可以使 I2C 总线仅通过软复位恢复 Tiva 中的 I2C0模块、所以我尝试了以下 μ…。
我用于初始设置的代码为:
SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);
GPIOPinConfigure (GPIO_PB2_I2C0SCL); //时钟 B2
GPIOPinConfigure (GPIO_PB3_I2C0SDA); //数据 B3
GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2);
GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_3);
I2C_init();
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_100kHz;
I2C_Handle = I2C_open (0、&i2cParams);
I2C_transfer (i2c_handle、&i2cTransaction);这是正常工作的写入。
秘书长的报告
当 I2C 总线挂起时、我尝试以下操作来仅重置 I2C 总线、但到目前为止没有成功:
I2C_Close (i2c_handle); //将其关闭
Task_sleep (10);
SysCtlPeripheralReset (SYSCTL_Periph_I2C0);//重置 I2C 器件
Task_sleep (10);
SysCtlPeripheralDisable (SYSCTL_Periph_I2C0);//禁用 I2C 器件
Task_sleep (10); //延迟
SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);//重新启用 I2C 器件
//像以前一样重新配置所有内容。
SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);
GPIOPinConfigure (GPIO_PB2_I2C0SCL); //时钟 B2
GPIOPinConfigure (GPIO_PB3_I2C0SDA); //数据 B3
GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2);
GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_3);
I2C_init();
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_100kHz;
I2C_Handle = I2C_open (0、&i2cParams);
I2C_transfer (i2c_handle、&i2cTransaction);
如果 I2C 总线挂起、这不会修复它、但软复位会修复它。 我是否可以做更多的事情来软复位 I2C 模块而不是 CPU 以恢复 I2C 操作?