主题中讨论的其他器件:SysConfig、 C2000WARE
尊敬的团队:
当我使用例程 i2c_ex6_eeprom_interrupt.c 时、在读取数据时、将要读取的字节数设置为0、然后我的时钟线 SCL 和数据线 SDA 将保持低电平。 我再次仿真复位后、时钟线 SCL 将保持低电平、而数据线将保持高电平。 此时、IIC 总线锁定并卡在 I2CBusScan (I2CA_BASE、pAvailableI2C_targets) while (! (I2C_getStatus (base)和 I2C_STS_REG_ACCESS_RDY);在这里、我在配置总线时尝试下拉 SCL 以保持2ms 、好像无法退出总线锁定状态、我已经在 TI 论坛上查询了其他处理方法、如下:当我使用例程 i2c_ex6_eeprom_interrupt.c 时、将读取数据线路的字节数设置为0、然后将 SCL 保持低字节、读取数据线路的字节数。 我再次仿真复位后、时钟线 SCL 将保持低电平、而数据线将保持高电平。 此时、IIC 总线锁定并卡在 I2CBusScan (I2CA_BASE、pAvailableI2C_targets) while (! (I2C_getStatus (base)和 I2C_STS_REG_ACCESS_RDY);在这里、我在配置总线时尝试下拉 SCL 以保持2ms、似乎无法退出总线锁定状态、我已经在 TI 论坛上查询了其他处理方法、如下所示:
void I2CDeadLock(void)
{
// uint8_t states;
I2C_disableReset(I2CA_BASE);//IICMDR.ISR = 0
DEVICE_DELAY_US(2000u);
I2C_setConfig(I2CA_BASE, I2C_CONTROLLER_SEND_MODE);
I2C_sendNACK(I2CA_BASE);//IICMDR. == 0
I2C_enableFdF(I2CA_BASE); //IICMDR.FDF = 1
I2C_enableLoopback(I2CA_BASE);//IICMDR.DLF = 1
I2C_setDataCount(I2CA_BASE, 1);//ICCINT.ICCINT = 1
I2C_putData(I2CA_BASE,0xFF);
I2C_sendStartCondition(I2CA_BASE);
DEVICE_DELAY_US(2000u);
// while(!(I2C_getStatus(I2CA_BASE) & I2C_STS_REG_ACCESS_RDY));
I2C_enableReset(I2CA_BASE);//IICMDR.ISR = 1
I2C_setConfig(I2CA_BASE, I2C_CONTROLLER_SEND_MODE);
I2C_enableFdF(I2CA_BASE); //IICMDR.FDF = 1
I2C_setDataCount(I2CA_BASE, 1);//ICCINT = 1
I2C_putData(I2CA_BASE,0x01);
I2C_sendStartCondition(I2CA_BASE);
while(!(I2C_getStatus(I2CA_BASE) & I2C_STS_REG_ACCESS_RDY));
I2C_sendNACK(I2CA_BASE);
I2C_sendStopCondition(I2CA_BASE);
}
使用上述代码、可以释放 SDA 和 SCL、但这会导致我的 IIC 通信异常。
当 SCL、SDA 处于低功耗水平时、这次一直在处理中断 i2cFIFO_ISR ()、将导致我的程序运行其他。 总之、一种是在死锁状态下如何退出、另一种是在 SCL 和 SDA 仍然通电时如何操作。
此致
张