This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
当我使用例程 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 论坛上查询了其他处理方法、如下所示:
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 仍然通电时如何操作。
此致
张
尊敬的 Zhang:
关闭此票证、因为其重复- (+) TMS320F2800155-Q1:C2000微控制器论坛- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛
谢谢
阿斯温