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.

[参考译文] TMS320F2800155-Q1:I2C 禁用问题

Guru**** 2039500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1358219/tms320f2800155-q1-i2c-deallock-problem

器件型号:TMS320F2800155-Q1

当我使用例程 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 论坛上查询了其他处理方法、如下所示:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

使用上述代码、可以释放 SDA 和 SCL、但这会导致我的 IIC 通信异常。

当 SCL、SDA 处于低功耗水平时、这次一直在处理中断 i2cFIFO_ISR ()、将导致我的程序运行其他。 总之、一种是在死锁状态下如何退出、另一种是在 SCL 和 SDA 仍然通电时如何操作。

此致