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.

[参考译文] AM2612:I2C_MODE_CALLBACK 传输模式的示例

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1530928/am2612-example-for-i2c_mode_callback-transfermode

器件型号:AM2612

工具/软件:

您好、专家、

在 SDK 中、I2C 示例在 I2C_MODE_BLOCKING 模式下工作、在调用 I2C_Transfer() 后、执行被阻止、只有在传输完成后才会耗尽 I2C_Transfer()。 然后、应用代码可以读取接收到的数据并准备新的数据进行发送。

现在、我的客户需要在 I2C_MODE_CALLBACK 模式下使用 I2C、确保不会阻止执行。 当 I2C 传输完成时、通过回调通知应用代码。 客户尝试调用 I2C_Transfer() 以触发回调中的下一个 I2C 传输、但执行卡住。 然后、客户尝试在回调中设置一个标志并在主循环中轮询此标志。 如果设置了该标志、则调用 I2C_Transfer() 以开始下一次传输。 它以这种方式工作、但主循环中的轮询 效率太低。

您能帮助分享 I2C_MODE_CALLBACK transferMode 的 I2C 示例吗? 当上一个 I2C 传输完成时、触发下一个 I2C 传输的建议方法是什么?

AM2612 I2C 在目标模式下工作。  

gI2cPeripheralTransaction.controllerMode = false

谢谢。

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

    尊敬的 Fan:

    如果我理解正确、这里的请求是让 AM261x I2C 的 I2C 回调示例处于从模式和非阻塞调用、其中下一个 I2C_Transfer () 已准备好启动(目前您没有看到这种情况)。 您能分享一下这里的 I2C 主器件是什么吗?

    我认为、如果您在 2 个地址(am261x 从器件和其他 I2C 主器件)之间存在一个 I2C 事务、如果您在前一个事务完成之前启动另一个事务、则会导致问题。 我希望这不是这里的要求。 因为只有一条数据总线和时钟

    此致、
    Shaunak

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

    尊敬的 Shaunak:

    是、客户要求在从模式下提供 I2C 回调示例。 由于回调用于通知 I2C 传输的完成、所以如果它已经运行到回调中、先前的 I2C 传输已经完成、对吧? 客户想知道在调用回调后启动下一次 I2C 传输的建议方式/计时是什么。 他试图在回调中调用 I2C_Transfer (),但被卡住了。

    在阻塞模式下、当 I2C_Transfer () 的执行用完时、I2C 传输完成、用户可更新 gI2cPeripheralTransaction 并再次调用 I2C_Transfer () 来开始下一次传输。

    但在回调模式下、不会阻止执行、用户只需通过回调函数获得通知、最有效的方法是在回调中启动下一次传输、但似乎不起作用。

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

    尊敬的 Fan:

    能否请参阅 SDK 中的 I2C_MEMORY_READ_INTERRUPT_LLD 应用程序? 这使用回调和信标来正确确保仅在硬件控制器实际可用于启动新事务时才启动后续通信。

    关于从模式下的 I2C 回调示例、

    他试图在回调中调用 I2C_Transfer ()、但被卡住了。

    1.默认情况下、所有事务和处理都已在控制器模式下标记(对于 HLD、I2C_Transaction.controllerMode = true 和 I2CLLD_Handler.I2CLLD_Message.controllerMode= true)。 在 AM261x 在从模式下开始 I2C 事务之前、您必须将此控制器模式标志设置为 False。

    2. 您能否分享客户设置在从模式下测试 am261x 的详细信息?  

    此致、
    Shaunak