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:用于 GPIO 的 ECAP 无法工作

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1522451/am2612-ecap-for-gpio-cannot-work

器件型号:AM2612
Thread 中讨论的其他器件:SysConfigLP-AM261

工具/软件:

我将 GPIO47 配置为 EPWM2A、然后将 GPIO47 配置为连接到 inputxbar0、然后连接到 ECAP0。 我可以通过 ECAP0 捕获 EPWM2A 的占空比和频率。

在保持 EPWM2 和 ECAP 配置不变的同时、我将 GPIO59 配置为 IO 输入、并将 inputxbar0 配置更改为连接到 GPIO59。 我在外部用一根导线将 GPIO47 和 GPIO59 连接在一起(GPIO59 可以使用示波器进行测量)、但 ECAP 无法捕获任何事件。 为什么?

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

    附加信息:我更改了 GPIO 并发现 GPIO57 之前的 GPIO 可以使用 ECAP 捕获信号、而 GPIO57 之后的 GPIO 无法捕获信号、即使我切换到其他 inputxbar 也是如此。

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

    嘿、Zhou、

    感谢您就您的问题与我们联系。 我会为您研究这个问题。 同时、当 ECAP 正确 捕获了 PWM 并为 GPIO47 提供了引脚多路复用 (IOMUX) 配置、并为 GPIO59 提供了错误捕获的相同信息?

    我想是 GPIO59 输入缓冲器可能没有配置为接收来自 GPIO47 的信号。

    对于这两种情况、您配置 INPUTXBAR[0]是否完全相同?

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

    感谢您的解释。  

    我需要提供一些额外信息:我使用 SDK 10.0.1.10 和 SysConfig 1.22.0 对 eCAP 示例[eCAP_CAPTURE_ePWM]进行了少量修改。 然后、我通过监控 DebugP_LOG 信息和 eCAP 寄存器中事件寄存器的值来确定是否捕获了信号。

    关于您提到的两个问题、我已检查了设置:

    我只修改了 SysConfig 配置、重新生成了代码、除了解决错误之外没有进行其他更改。

    当 eCAP 正确从 EPWM2 捕获 GPIO47 信号时、配置如下:

    • IOMUX_GPIO47_CFG_REG = 0x01000500 (HVMODE_STATUS 和 SC1 & PE = 1、其他= 0)
    • IOMUX_GPIO59_CFG_REG = 0x00000507 (C1 & PE & FDC_SEL = 1、其他= 0)

    但是、当使用外部连接线连接 GPIO47 和 GPIO59(将 LaunchPad 的[J4 31 引脚至 40 引脚])时、无法捕获信号。 配置保留为:

    • IOMUX_GPIO47_CFG_REG = 0x01000500
    • IOMUX_GPIO59_CFG_REG = 0x00000507 

    关于输入 XBAR 配置、我只修改 sysconfig:中的设置 INPUT XBAR -> XBAR Output from GPIO47 to GPIO59

    在代码中、唯一的区别是此行:

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

    我对最后一行中的错误深表歉意。 它应该是:

    SoC_xbarSelectInputXBarInputSource_ext (CSL_CONTROLSS_INPUTXBAR_U_BASE、0、0、INPUT_XBAR_GPIO59、0、 0);

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

    嘿、Zhou、

    感谢您提供这些详细信息。 您能否在此处共享.syscfg 文件以供查看?

    您是否可以尝试 手动配置 IOMUX_GPIO59_CFG_REG 以匹配有效的 GPIO47 配置?

    GPIO59 是否可能已经由系统中的另一个组件配置/使用?

    您提到的 HVMODE_STATUS 是什么?

    此致、

    Zackary Fleenor

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

    尊敬的 Zhou:

    感谢您提供此附加信息。 我确实认为将 HVMODE_STATUS 位设置为 0 (1.8V) 而不是 1 (3.3V) 在这里发挥作用、根据这些设置、GPIO59 需要一个 1.8V 幅度的信号、并且需要施加一个 3.3V 幅度的信号。

    您是否使用任一 OSPI 接口进行测试?  

    GPIO59 托管 OSPI[0:1]_D0 引脚、以说明它为何使用 1.8V。

    是否可以使用不同的 GPIO 引脚(GPIO63?) 并实施相同的测试?

    我将与另一位软件专家一起提供反馈、以便可能提供此功能的示例。

    请留出一些时间供他们查看。

    此致、

    Zackary Fleenor

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

    你(周)好

    其他信息:我更改了 GPIO 并发现 GPIO57 之前的 GPIO 可以使用 ECAP 捕获信号、而 GPIO57 之后的 GPIO 无法捕获信号、即使我切换到其他 inputxbar。

    使用通过跳线连接到 GPIO47 的 GPIO11 时、该示例工作正常:

     读取 GPIO VAL。

    但它不适用于 GPIO 59、74 等、这验证了您的假设。

    但是、我可以问为什么不通过 inputxbar 直接捕获 EPWM2_A、为什么要进行此路由? 此外、如果您需要通过某个引脚进行布线、也可以检查 outputxbar 并通过其中一个引脚进行布线。

    此致、
    阿克什特

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

    你好 Akshit、

       感谢您的测试。  我的最终目标是使用 GPIO59 捕获由 PCB 设计确定的外部 PWM 信号。 因此、需要对其进行配置以捕获信号。 带外部接线使用 EPWM2A 只是一种用于测试的简化布线方法。  那么、为什么 GPIO59(以及我的测试显示的一些较晚的 GPIO)无法通过连接到 inputxbar 并连接到 ECAP 来捕获外部信号? 该手册没有提及任何相关问题。

    此致

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

    尊敬的 Fleenor:  

      感谢你的帮助。  我 使用 GPIO63 进行了测试、结果符合预期。 配置为 ECAP 的 1.8V 引脚 无法捕获波形。 我发现、以前使用 OSPI 为特定 HMI 实现按钮显示功能、但其中一个 HMI 按钮总是不起作用。 原因是 HMI GPIO 的高电平电压不是 3.3V、而是 1.8V。 那么、ECAP 是否是唯一受 1.8V IO 影响的外设? 我在手册中找不到任何相关说明…

    此致

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

    尊敬的 Zhou:

    明白了! 您能否尝试使用 outputxbar 将信号重新路由到 gpio57 之前的其中一个引脚、如下所示:

    使用输出 Xbar 选择要输出的可用 Inputxbar 之一:

    输出引脚为 GPIO_11、此处:

    将 inputxbar_7 设置为 GPIO_59:

    和 inputxbar_0 至 GPIO_11:

    立即在 eQEP 上捕获 inputxbar_0!

    请告诉我这是否有效!

    此致、
    阿克什特

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

    您好、Akshit、

       在我的工程中、GPIO11 用作编码器 SCI。 因此、在演示程序中、我尝试使用 GPIO1。 我将 GPIO1 连接到 INPUTXBAR4、ECAP 输入设置为 INPUTXBAR4。 同时、GPIO1 是 OUTPUTXBAR0 的引脚、OUTPUTXBAR0 连接到 INPUTXBAR7。 最后、INPUTXBAR7 连接到 GPIO59。 GPIO47 保持为 EPWM2A、用作假设的外部输出。 我使用导线在外部将 GPIO47 连接到 GPIO1、在内部、GPIO1 和 GPIO59 通过 XBAR 连接。 但是、ECAP 仍然没有捕获任何事件。 我的配置是否不正确(我在 SysConfig 生成的代码中找不到将 GPIO1 指定为输出 XBAR)的配置?  

    #define INPUTXBAR_BASE_ADDR             (CSL_CONTROLSS_INPUTXBAR_U_BASE)
    #define OUTPUTXBAR_BASE_ADDR            (CSL_CONTROLSS_OUTPUTXBAR_U_BASE)
    
    void ConfigEcapXbar(void)
    {
        /* OUTPUT XBAR */
        SOC_xbarSelectOutputXBarInputSource(OUTPUTXBAR_BASE_ADDR, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ( OUTPUT_XBAR_INPUTXBAR_OUT7  ), 0);
        SOC_xbarInvertOutputXBarOutputSignalBeforeLatch(OUTPUTXBAR_BASE_ADDR, 0);
        SOC_xbarInvertOutputXBarOutputSignal(OUTPUTXBAR_BASE_ADDR, 0);
        SOC_xbarSelectLatchOutputXBarOutputSignal(OUTPUTXBAR_BASE_ADDR, 0);
        SOC_xbarSelectStretchedPulseOutputXBarOutputSignal(OUTPUTXBAR_BASE_ADDR, 0);
        SOC_xbarSelectStretchedPulseLengthOutputXBarOutputSignal(OUTPUTXBAR_BASE_ADDR, 0);
        /* Input XBAR configuration */
        SOC_xbarSelectInputXBarInputSource(INPUTXBAR_BASE_ADDR, 7, 0, INPUT_XBAR_GPIO59, 0); //configure GPIO59 to XBAR7
        SOC_xbarSelectInputXBarInputSource(INPUTXBAR_BASE_ADDR, 4, 0, INPUT_XBAR_GPIO1, 0); //configure GPIO1 to XBAR4
        /* Interrupt XBAR configuration */
        SOC_xbarSelectInterruptXBarInputSource_ext(CSL_CONTROLSS_INTXBAR_U_BASE, 0, 0, 0, 0, 0, 0, ( INT_XBAR_ECAP0_INT ), 0, 0, 0, 0);
        SOC_xbarSelectInterruptXBarInputSource_ext(CSL_CONTROLSS_INTXBAR_U_BASE, 2, 0, 0, 0, 0, 0, ( INT_XBAR_ECAP3_INT ), 0, 0, 0, 0);
    }

    您能否提供一个可以使用 GPIO59 捕获外部信号的示例例程? 这是我的配置参考、谢谢。

    此致。

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

    你(周)好

    您的配置正确、此处的问题是:

    gpio59 的 inputxbar 实际上是发出始终为高电平的信号、可以从 outputxbar 中看到。 因此、ECAP 示例失败。

    使用 gpio52 而不是 gpio59 运行时的相同代码:

    实际上为我们提供了正确的输出、这就是 ECAP 示例通过此引脚的原因。

    这确实像是一个电压问题、低压也被限定为高电压、我们需要确认这个问题并了解如何解决这个问题、让我明天再回复您、告诉您这个问题的更新信息。

    谢谢、此致
    阿克什特

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

    你(周)好

    这是我为你做的一个更新!

    LP-AM261 中的 MCU 始终设为 1.8V。 这是因为这些 GPIO 与 OSPI IO 位于同一组中、并且由于 OSPI 使用 1.8V 闪存、因此它固定为 1.8V IO 电压。 否、我们无法在 LP-AM261 上切换到 3.3V IO 电压

    这取决于您在 VDDSHV_MCU 和 VDDSHV_MCU 上连接的电压
    如果您已将 1.8V 连接到这些器件、则必须将电平转换为 1.8V
    如果您连接了 3.3V、则只需连接外部 3.3V PWM

    在 LP-AM261 中、J5 和 P16 上无法连接 3.3V 电压。 但是、在您的定制 PCB 或任何其他电路板上、如果我们在 J5 和 P16 上有从 1、8V 更改为 3.3V 的配置、那么是的、所有这些 IO 都将在 3.3V 下工作。

    如果这对我有帮助、请告诉我!

    此致
    阿克什特

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

    您好、Akshit、

       感谢您的答复。 完成这些步骤后、我现在了解了整个情况。 将来、我会对硬件进行一些调整。 谢谢你。

    此致。