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.

[参考译文] CC1352P7:用于我的操作的 I2C 设置

Guru**** 2414260 points
Other Parts Discussed in Thread: CC1352P7

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1188174/cc1352p7-i2c-setup-for-my-operation

器件型号:CC1352P7

您好!

我想在一个线程上使用 i2c、在 ISR 例程中使用 i2c (与同一个芯片通信)。 我目前有一个例外。 i2c 是否需要2个独立的结构、如*。h 表示多个线程? 我是否需要具有回调功能? 我的代码 ISR 需要读取一个芯片 ISR_REG 来清除中断、并且还需要读取一个特定的数据寄存器。 坏的部分是、如果 不及时处理、这个芯片将覆盖数据寄存器。 例如、它没有到 ISR_REG 的链接来停止更新。

您能描述实现这一目标的最佳实践吗?

我怀疑我需要创建2个结构、并将一个用于一个任务、并在 ISR 例程中使用另一个。 我想在走这条路之前进行检查。

谢谢、
肖恩

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

    您好、Shawn、  

    只有一个 I2C 外设。 因此、我们不可能有2个 I2C 驱动程序实例。  

    我不完全了解您的应用。

    使用回调模式时、在 I2C 事务完成时会触发回调。 您在驱动程序文档中引用的示例显示了如何在使用信标完成的所有事务上挂起。  它使用多个事务结构。   

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_6_40_00_13/docs/drivers/doxygen/html/_i2_c_8h.html#a39f3b9340fc4ee241b0d2da9b2841c26a129731a7edeb285f43a54b2cf9f5ac72

    如果无法使用回调模式来实现您的应用、请解释为什么您需要线程和 ISR 的 i2c 调用。  

    此致、

    SID

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

    SID、

    我知道只有1个 HW I2C 单元。 我的问题与使用 TIRTOS7的软件驱动程序用法有关。 我是否可以使用与主循环中相同的 I2C 结构、并对 ISR 使用相同的 I2C 结构? 您如何构建软件以在1线程和 ISR 中使用 I2C?

    我将使用主线程对其他寄存器进行 I2C 编程以配置器件。 ISR I2C 通信用于清除中断寄存器(这样中断被清除)、并且还读取包含导致触发条件的数据的数据寄存器。 我目前有1个 I2C 结构。  

    谢谢、
    肖恩

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

    您好、Shawn、  

    感谢您的解释。 如果我理解正确、您的设置包括通过 I2C 与另一个芯片通信的 CC1352P7。

    1.您希望在主线程中使用一些 I2C 命令来配置另一个芯片。  

    2.芯片可能有一种机制在 CC1352P7上触发中断、您希望 CC1352P7尽快读取芯片的寄存器。  

    此应用设计中需要考虑两个因素。  正如您正确地指出的、第一件事是您需要具有单独的 I2C_Transaction 结构。

    第二件事是架构本身。 在 ISR 上下文中调用 I2C_transfer()可能不是最佳做法。

    考虑拥有一个专用的更高优先级任务来读取芯片。 这个任务的优先级应该高于主线程、并且有可能在读取芯片前在一个信号量上挂起。

    ISR 可能会发布这个信号量、这将导致更高优先级的任务立即读取芯片的寄存器。

    与此同时 、具有自己事务结构的主线程可以通过 I2C 传输来设置芯片。

    此致、

    SID