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.

[参考译文] TMS320F2.8377万S:I2C中断生成问题

Guru**** 2484005 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/641493/tms320f28377s-problems-with-i2c-interrupt-generation

部件号:TMS320F2.8377万S

大家好,

我在主模式下的I2C模块有一些问题,请您帮忙。

我尝试通过I2C与另一个主板通信。 首先,我通过发送命令将另一块板设置为活动状态,然后我想写入一些字节的数据,最后我想停用另一块板。

问题是:在调试器中逐步执行代码时,一切正常。 如果我让它自行运行,程序将不再工作。  

经过一些调试后,在这种情况下似乎不会访问中断。  

我附上了我的代码,但我不确定是否有人会随意查看代码,接下来的一些问题也可能对我有帮助:

  • 当我查看 SLVA704时,即使没有连接第二块板,应在读取字节后访问StopConditionDetected Interrupt,不应该吗? 因为当我以数字环回模式运行代码时,没有StopConditionDetected中断。
  • 控制套件中的示例使用FIFO,但不使用FIFO中断。 是这样吗?

e2e.ti.com/.../HOSS_5F00_I2C.ce2e.ti.com/.../HOSS_5F00_I2C.h

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

    我试图缩小问题的范围,但遇到了一些意想不到的行为:

    接收数据时,确认位与从属设备的以下应答之间的时间相当长。 从我的理解来看,时钟是由大师提供的,应立即开始。

    此外,我发现上面没有收到的中断是因为太晚了。 我的程序超时1秒,中断到达之后。

    在附加的照片中,您可以看到前3个字节(地址,命令,地址),然后是很长的暂停,然后是来自从属设备的数据。 我添加了绿线作为控件。 它是一个GPIO,在寄存器设置为接收后设置,并在进入中断服务例程时重置。

    这种情况持续这么长时间是否正常?

    感谢您的帮助!

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

    Dominik,

     您的I2C从属设备在1毫秒内对您的命令响应缓慢。  您是否检查了I2C从属数据表以了解您尝试在I2C从属设备中执行的命令所需的时间?

    例如:-假设您的I2C从机是EEPROM,I2C主机正在尝试将特定数据写入其中。 一旦提供了命令,数据,I2C从属设备就需要一段特定的时间来完成对EEPROM的写入命令。 此时间应记录在EEPROM数据表中。

    此致,

    Manoj

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

    感谢您的回复!

    这当然可以解释这种行为。 根据文档 SLVA704,主控控制时钟,从控sda线。 让我困惑的是,主中继器如何知道从中继器如何准备好发送数据?

    非常感谢!

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

    这实际上取决于I2C从属设备的实现。 请参阅I2C从属数据表以了解如何实现。

    我想知道SCL是否继续切换直到它接收到确认位/数据(或者)它可能正在使用时钟拉伸直到它的数据/确认位准备好被流出。

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

    我们可以关闭此线程吗? 此问题是否已解决?

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

    在最后一个答案中,您提到延迟取决于从属设备的实现。 如上所述,从从属设备收到确认位后会出现长延迟。 同时,没有时钟信号。 TI的文档SLVA704指出,在ACK位之后,主中继器将接收时钟转出,而它是这样做的
    总之,你说得对,问题是从属的,但我不能从文档中读到主的等待时间。

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

    I2C从属设备可以将SCL线路保持在低位,直到它准备好发送ACK知识信号。 位就绪后,从控制器释放SCL线路,并允许上拉电阻器将SCL线路拉高并将ACK信号发回。

    此致,
    Manoj