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.

[参考译文] CC1352P:HW ISR &I2C 操作

Guru**** 2482105 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1251350/cc1352p-hw-isr-i2c-operation

器件型号:CC1352P

我在硬件 ISR 回调函数中遇到 I2C 操作问题。 I2C 事务是否需要处于回调模式才能在 ISR 回调函数中工作?

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

    尊敬的 Corey:

    通常不建议在硬件 ISR 中添加分块功能。

    该文档还提到、在阻塞模式下、它只应在线程上下文中调用、而不能在 HWI 上下文中调用。

    此致、

    SID  

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

    谢谢。 我认为 I2C 和 HWI 的阻断性质导致了这个问题。 如果我使用回调模式、事务将运行到完成、对吗?

    我在寻找实现 I2C 回调功能的示例代码、我看到了以下这篇文章。 解决方案似乎是使用 GPIO 触发 SWI、其中 I2C 事务在 BLOCKiING 模式下发生。  

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/579030/rtos-tm4c129encpdt-i2c-calback-mode-example

    我正在尝试确定、在阻止模式下为 I2C 使用单独线程(执行与上述链接类似的操作)或在回调模式下执行 I2C 的最佳方法是什么。 我的主要应用将是执行 DMM RF 功能。  

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

    尊敬的 Corey:

    在您指出的链接中、米歇尔的第一个响应显示了如何使用 i2c 的回调模式。  

    是的、即使在 i2c 的回调模式下、事务也会运行到完成。 但是、在回调模式下、应用程序在前一次传输完成后才负责调用 i2c 传输。

    在回调模式中,i2c_transfer API 不会阻止执行  ,因为 i2c_transaction 结构在传输完成前需要保持一致,。 这是通过使用该应答中的信标来实现的。  

    该线程中带 GPIO 触发器的第二个答案似乎是该客户的特定应用要求、他们希望在 GPIO 事件后执行事务。 在这种情况下、建议使用阻塞模式、因为这可以确保当调用 i2c_transfer 时、无论何时触发下一个 GPIO 事件、i2c 事务都将完成。  

    希望这使您能够评估 i2c 的阻塞模式和回调模式。  

    此致、

    SID