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.

[参考译文] TMS320F28075:TMS320F28075 I2C 重复启动

Guru**** 2540720 points
Other Parts Discussed in Thread: TCA9539, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/624459/tms320f28075-tms320f28075-i2c-repeated-start-initiation

器件型号:TMS320F28075
Thread 中讨论的其他器件:TCA9539controlSUITE

我目前正在使用 I2C 接口与 TCA9539 GPIO 扩展器进行通信。 我已将读取操作写入芯片、这需要如下所示的重复启动条件。 不过、我注意到、等待 ARDY 清除的 while 循环需要大量时间才能完成。 是否有办法将 I2C 寄存器设置为自主执行重复起始条件(如我所示)而无需等待 ARDY 置1 (或使用中断)?

第一个问题的后续问题是、使用下面的代码、我可以在示波器上看到重复启动已启动、两个字节已传回。 但是、访问 I2CDRR 时、RX FIFO 中没有字节被读取。 如果我更改下面的代码并将 RM 设置为重复模式、我可以通过访问 I2CDRR 来查看接收到的数据(但仅接收一个字节、因为传输的数量不再像预期的那样依赖于 I2CCNT)。


if (i2c_regs->I2CMDR.bit.stp || i2c_regs->I2CSTR.bit.BB){
return;
}
//设置 I2C 地址
i2c_regs->I2CSAR.bit.SAR = 0x77;
i2c_regs->I2CCNT = 1;
// PORT0输入位于地址0
i2c_regs->I2cd2c.bit.data = 0;

i2c_regs->I2CMDR.bit


= 1;i2c.r.iMTR=i2c.r.it.I2c.r.I2c.r=I2cr = I2c.r.it.I2c.r.I2cr = 0<I2c.r.I2c.r.r.I2c.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.
i2C_regs->I2CMDR.bit.STT = 1;

//等待 I2C 寄存器设置的使用
时间(i2c_regs->I2CSTR.bit.ARDY = 0);

//设置预期
I2C 寄存器设置的字节数 i2c_regs->I2cNT = 1;

//作为主发送器发送启动 i2cst.bit->I2c.r.mds-i2c.r.i2c.r=i2ctr.i2c.r.i2c.r=i2c.r.i2c.rs-i2ctr.i2c.r.i2c.r.i2c.r.i2c.r.i2c.r.i2c.r.i2c.r.i2c.r.i2c.r.i2c.r.i2c.r.i2c.r.i2c.i2c.r.i2c




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

    controlSUITE 中的 I2C_EEPROM 示例项目使用 FIFO 并执行您要执行的操作。 您是否已检查此示例?

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

    是的、我已经查看了示例、但它使用中断来处理重启条件。 我的问题是、是否可以在不使用中断的情况下执行此操作。 不过、在花更多的时间阅读文档并进行实验之后、我很确定答案是否定的 在这一点上,我更关注我的问题的第二部分。

    更新了:我的错误是我设置 RXFFST = 1而不是 RXFFRST = 1来启用接收 FIFO。