我在硬件 ISR 回调函数中遇到 I2C 操作问题。 I2C 事务是否需要处于回调模式才能在 ISR 回调函数中工作?
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.
我在硬件 ISR 回调函数中遇到 I2C 操作问题。 I2C 事务是否需要处于回调模式才能在 ISR 回调函数中工作?
谢谢。 我认为 I2C 和 HWI 的阻断性质导致了这个问题。 如果我使用回调模式、事务将运行到完成、对吗?
我在寻找实现 I2C 回调功能的示例代码、我看到了以下这篇文章。 解决方案似乎是使用 GPIO 触发 SWI、其中 I2C 事务在 BLOCKiING 模式下发生。
我正在尝试确定、在阻止模式下为 I2C 使用单独线程(执行与上述链接类似的操作)或在回调模式下执行 I2C 的最佳方法是什么。 我的主要应用将是执行 DMM RF 功能。
尊敬的 Corey:
在您指出的链接中、米歇尔的第一个响应显示了如何使用 i2c 的回调模式。
是的、即使在 i2c 的回调模式下、事务也会运行到完成。 但是、在回调模式下、应用程序在前一次传输完成后才负责调用 i2c 传输。
在回调模式中,i2c_transfer API 不会阻止执行 ,因为 i2c_transaction 结构在传输完成前需要保持一致,。 这是通过使用该应答中的信标来实现的。
该线程中带 GPIO 触发器的第二个答案似乎是该客户的特定应用要求、他们希望在 GPIO 事件后执行事务。 在这种情况下、建议使用阻塞模式、因为这可以确保当调用 i2c_transfer 时、无论何时触发下一个 GPIO 事件、i2c 事务都将完成。
希望这使您能够评估 i2c 的阻塞模式和回调模式。
此致、
SID