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.

[参考译文] TMS570LC4357:软件 i2c 总线

Guru**** 2436500 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1260513/tms570lc4357-software-i2c-bus

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我想让一个采样 i2c 总线用于上述 MCU。 如果您有任何疑问、请告诉我。 谢谢!

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

    示例软件 i2c 总线  

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

    很抱歉这么多次写这篇文章。 它是示例软件 i2c 总线驱动程序代码。 谢谢!

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

    尊敬的 LayEng:

    i2c 的软件驱动程序将从 HALCoGen 生成。 如果您需要任何参考示例、请执行以下步骤、

    如果您已经下载了 HALCoGen、则请转到下面突出显示的帮助主题

    现在、在示例部分中、您可以看到几个 i2c 示例:

    下面、他们将分步介绍生成 i2c 驱动程序的过程、并介绍示例应用程序项目。

    --

    谢谢。此致、
    Jagadish。

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

    发件人:  陈立英
    已发送:  2023年8月18日星期五下午3时47分
    至:  TI E2E 支持论坛<noreply-e2e@mail.ti.com>
    主题:  关于:基于 ARM 的微控制器论坛:TMS570LC4357:软件 i2c 总线

     

    尊敬的 Jagadish:

    感谢您的答复。 由于论坛网站停修、我无法访问该网站。 因此是这个电子邮件。 我不是指我们在多年前讨论过的常见 i2c 总线例程。 我停止了 i2c 开发(实际上我已经完成了 i2c 中断实现)、因为我被要求注意电机驱动任务。 在进行电机开发的过程中、我发现 i2c 总线的中断影响电机、反之亦然。 也就是说、在运行 i2c 总线中断时、出现了与电机驱动器相关的另一个较高优先级中断。 从对电机中断的服务返回后、MCU 挂起。 它进入了 DataEntry 中断向量。 您能告诉我如何解决此问题吗?

     

    由于这个问题、我希望实现一个 i2c 软件驱动总线、这是通用总线、而不是在 MCU 中使用 TI 提供的 i2c。 大多数 PPL 喜欢调用 TI 提供的 i2c 作为硬件 i2c、而通用端口驱动 i2c 总线作为软件 i2c 总线。 我的请求是使用与内置 i2c 总线相同引脚的通用端口驱动 i2c 总线的示例代码。

     

    你的消息的图片很小,当我展开时,它是模糊的。 但我想我想要的不是在 halcogen。

    谢谢你。 期待您的回复。

     

     

     

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

    以上是我上周五发给你们的。 我今天发现这是一封没有回复的电子邮件

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

    尊敬的 LayEng:

    也就是说,在运行 i2c 总线中断时,出现了另一个与电机驱动程序相关的较高优先级中断。 从处理电机中断返回后、MCU 挂起。

    您是说嵌套中断吗?

    Cortex R4/5本身不支持中断嵌套。

    这意味着如果处理器处理一个 IRQ 中断、那么与该 IRQ 相关的所有中断将被禁用、直到处理器完成当前的 IRQ 执行。 并且它将仅在完成当前中断执行后执行下一个中断。

    有关更多详细信息、请参阅以下主题:
    (+) TMS570LS3137:服务软中断问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    (+) TMS570LC4357:高效使用 ARM -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    所以、 我不明白  在你的情况下为什么要获得 DataEntry 中断向量?

    由于此问题,我希望实施 i2c 软件驱动总线,这是通用总线,不使用 TI 提供的 i2c 在 MCU 中提供的 i2c。 大多数 PPL 喜欢调用 TI 提供的 i2c 作为硬件 i2c、而通用端口驱动 i2c 总线作为软件 i2c 总线。 我请求的是使用与内置 i2c 总线相同引脚的通用端口驱动 i2c 总线的示例代码。

    我们没有任何通用端口驱动的 i2c 示例。

    我认为、这并不能帮助您解决该问题、因为即使您使用此通用端口驱动的 i2c 示例、也会得到正确的中断、您最终可能会 遇到相同的问题。

    在最坏的情况下、至少 你可以在轮询模式而不是中断模式下使用现有的 i2c、我想这将解决问题、而不是在端口驱动的通用 i2c。

    因此、我的建议是、首先尝试调试当前问题的根本原因。

    --

    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您的答复。 您能否提供有关处理嵌套中断的示例代码? I2C 的优先级低于我们使用的某些计时器中断。 我们有1ms 计时器中断、100ms 中断和 GPIO 中断。 在对 i2c 中断提供服务时、可能会有其他较高优先级的中断出现。 问题是、如果已中断、如何返回到 i2c 中断。

    我不能使用投票方式的原因很多。 我已经注意到这些标志不会被更新、导致在等待诸如 stop big、tx、Rx 标志等 i2c 标志时"挂起"。 这就是为什么我选择使用更一致的中断方法的原因。 我建议您提供一个有关如何处理中断嵌套的示例代码。  

    至于我 获得 DataEntry 中断的原因、我不知道。 我只知道当 MCU 挂起时、它在这个位置。 当我删除调用 i2c 例程时、不会发生。 如您所知、调用 i2c API 将启用 i2c 中断

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

    尊敬的 LayEng:

    感谢您的回复。 是否可以提供处理嵌套中断的示例代码?

    Cortex R4/5本身不支持中断嵌套。 如果您确实需要嵌套式中断、则需要完全由应用代码管理。 除了挂起的中断状态标志、没有其他硬件机制来辅助此操作。

    以下应用手册将有助于实现:
    《基于 Hercules ARM Cortex-R4/5的微控制器上的嵌套中断》(TI.com)
    应用手册还包含要下载的示例代码、在此示例中、它们使用了两个 RTI 中断 RTI compare0和 RTI compare1、RTI compare0将切换 LED0、RTI compare1将切换 LED1。 RTI 兼容0中断将每隔1秒发生一次、在此中断例程中、我们将在 LED0上运行、然后它们将等待0.5Sec、然后它们将关闭 LED0并从 RTI 兼容0的中断处理程序退出。 同样、 RTI 兼容1中断将每4秒发生一次、在该 中断处理程序中、它们将首先在 LED1上发生、然后等待2秒、然后关闭 LED1。 由于这种行为、有时 RTI 比较-1中断将被 RTI 比较-0中断中断、RTI 比较1的执行将停止、而处理器将嵌套到 RTI 比较-0中、并执行 RTI 比较-0、在执行 compare0处理程序后、 同样、处理器将开始执行 正好 停止的比较1代码。 我的意思是、在这个嵌套状态下、可以在两个 LED 亮起的情况下进行可视化。 请验证上述注释、以了解更多详细信息。

    借助上面的应用手册、我们可以创建两级嵌套中断、低级将使用 IRQ、而低级将被高级 FIQ 中断、并且在执行该 FIQ 后、处理器将再次继续执行 IRQ 中断。

    I2C 的优先级低于一些计时器中断。 我们有1ms 计时器中断、100ms 中断和 GPIO 中断。 在对 i2c 中断提供服务时、可能会有其他较高优先级的中断出现。 问题是如果 i2c 中断已被中断,如何恢复它。

    由于在 Cortex R4/5中不可能嵌套中断、因此 处理器在处理 i2c 中断时永远不会被其他计时器中断中断中断。 如果处理器处理 i2c 中断、则将禁用所有其他 IRQ 中断、直到它完成当前的 i2c 处理程序执行。

    优先级仅适用于在处理中断之前的、我的意思是、如果我们同时有两个中断、例如 i2c 和计时器、则会检查哪个具有高优先级的中断将首先执行。

    --

    谢谢。此致、
    Jagadish。