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.

[参考译文] AM6548:将 PRU 引脚用作 GPIO

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1382449/am6548-using-pru-pins-as-gpio

器件型号:AM6548

工具与软件:

您好!  

我尝试将 AM6548上的一些 PRU 引脚用作常规 GPIO、无需与处理器上的任何 PRU 固件交互或加载。  

这可以在不与 PRU 交互的情况下实现吗?  

作为参考、我尝试 在禁用上拉/下拉电阻器的情况下设置 PIN_PRG2_PRU0_GPO8的焊盘配置、但在我们的设计中似乎仍然启用了上拉电阻器。  

为什么会这样呢? 我们是否无法使用 PRU 引脚作为由 ARM 内核控制的 GPIO? 我将它们全部设置为模式7、仅是 GPIO。  

这似乎只是影响将引脚设置为输入。 我能够将 PRU 引脚设置为输出、并将它们切换为高电平/低电平。

谢谢!

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

    Ben、您好!

    您能分享您的代码吗?

    如何配置 PADCONFIG 以进行 GPIO 输入。

    对于输出、默认情况下您无需指示类型为输出 PADCFG 只能视为输出、但对于输入、用户需要指示为输入。

    通常、对于输入、我们需要进行配置、如下所示。

    此致、

    Anil。

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

    尊敬的 Swargam:

    感谢您的回复! 实际上我并不使用 PDK BSP 设置 pinmux、以下是我用于构建焊盘配置设置的代码:

    enum MuxMode : uint8_t
    {
        MODE0 = 0U,
        MODE1,
        MODE2,
        MODE3,
        MODE4,
        MODE5,
        MODE6,
        MODE7,
        MODE8,
        MODE9,
        MODE10,
        MODE11,
        MODE12,
        MODE13,
        MODE14,
        MODE15,
    };
    
    enum class PullUpDownEnable : uint8_t
    {
        DISABLE = 0U,
        ENABLE,
    };
    
    enum class PullTypeSelect: uint8_t
    {
        PULLDOWN = 0U,
        PULLUP,
    };
    
    enum class RecieveActive : uint8_t
    {
        DISABLE = 0U,
        ENABLE,
    };
    
    const uint32_t PULLDEN_OFFSET = 16U;
    const uint32_t PULLTYPESEL_OFFSET = 17U;
    const uint32_t RXACTIVE_OFFSET = 18U;
    
    static inline uint32_t buildPinSetting(
        const MuxMode muxmode,
        const PullUpDownEnable pulluden,
        const PullTypeSelect pulltypesel,
        const RecieveActive rxactive)
    {
        return static_cast<uint32_t>(muxmode) |
                ((1U - static_cast<uint32_t>(pulluden)) << PULLDEN_OFFSET) |
                (static_cast<uint32_t>(pulltypesel) << PULLTYPESEL_OFFSET) |
                (static_cast<uint32_t>(rxactive) << RXACTIVE_OFFSET);
    }

    然后、我使用以下代码编写焊盘配置:

    const uint32_t PAD_CONFIG_MAP_OFFSET = 0x1C000U;
    
    void commonApply(const uint32_t addr, const uint16_t pinOffset, const uint32_t settings)
    {
        // Write settings
        HW_WR_REG32_RAW(addr + PAD_CONFIG_MAP_OFFSET + pinOffset, settings);
    }

    这样就可以针对从 ti/board/pinmux/am65xx_idk/AM65xx_pinmux.h 定义的引脚偏移写入相应的 src 寄存器  

    我设置的值仅在下图中圈出:

    对于 GPIO 输入、我将 RXACTIVE 配置为高电平、将 PULLUDEN 配置为禁用。 由于我们的设计依赖于外部上拉/下拉、因此对于输出、我将 RXACTIVE 配置为低电平、以及禁用 PULLUDEN。

    是否缺少配置?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价用户 id="348995" url="~/support/processors-group/processors/f/processors-forum/1382449/am6548-using-pru-pins-as-gpio/5291134 #5291134"]

    对于 GPIO 输入、我将 RXACTIVE 配置为高电平、将 PULLUDEN 配置为禁用。 由于我们的设计依赖于外部上拉/下拉、因此对于输出、我将 RXACTIVE 配置为低电平、以及禁用 PULLUDEN。

    是否缺少配置?

    [报价]

    Ben、您好!

    使用上述设置和配置多路复用器模式应该可以正常工作。

    如果这样不起作用、那么我们需要检查我们这边。

    此致、

    Anil。

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

    如果您能这样做会有所帮助、我们并不确切地确定为什么上拉电阻器看起来仍然被启用

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

    有趣的是、稍微调试电路板、我们的一些输入引脚的电源似乎关闭。 向我们提供错误读数的 GPIO 引脚在1.3V 至1.5V 左右悬空、在固件中随机触发高电平/低电平。  

    这些引脚由 VDDSHV3和 VDDSHV4供电、它们从 CAP_VDDA_1P8_IOLDO1供电、出于某种原因、这两个引脚的电压为大约2.9V、而不是1.8V。 根据 AM6548数据表、该信号应为1.8V、CAP_VDDA_1P8_IOLDO0为1.8V、因此断电的 GPIO 引脚的电压看起来正常。  

     CAP_VDDA_1P8_IOLDO1为什么与2.9V 搭配使用? 是否有某种内部旁路/配置可解决此问题? 我们非常确信这是导致 GPIO 问题的原因

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

    更奇怪的是、 CAP_VDDA_1P8_IOLDO0的电压为1.8V、 CAP_VDDA_1P8_IOLDO_WKUP 的电压为2.9V。 我们将尝试对 相应的 VDDSHVx 组使用3V3逻辑。  

    在 IDKEVM 上、所有这些信号都位于1.26V 左右。 它们是否可以通过软件以某种方式进行配置? 挑选电阻来编程增益?

    我们不知道会是什么原因造成这种差异。  

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

    我的一位同事发现了这个主题: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1025865/am6548-boot-mode-pins-state-during-device-reset

    这似乎几乎完全反映了我们的问题。 具体而言、本评论:

    ""

    BTW、我已经提供了 CAP_VDDA_1P8_IOLDO0 (在8月19日)的示波器快照、这些快照和慢斜坡对应两个3V3电源轨的压摆率值。 当3V3上的斜坡缓慢时、我们观察到偏移高于1V8 -在大约7ms 的时间内偏移约为2.8V。

    ""

    除本例中外、 CAP_VDDA_1P8_IOLDO0/1/0_WKUP 在2.8V 下持续有所帮助。  

    我们发现、修复后、 我们的3.3V 逻辑电源的压摆率从7ms 至8ms 降低到小于1ms、从而使  CAP_VDDA_1P8_IOLDO0/1/0_WKUP 保持稳定的1.8V。 现在、我们所有的 GPIO 输入引脚都处于更合理的逻辑电平。  

    据链接主题中的 TI 工程师说、这也是在 EVM 上重现的。  

    我们的问题是、为什么此问题没有记录在任何地方? 在链接线程中的任何位置都没有提及这些 CAP_*信号的转换率或行为。 尤其是在 EVM 上重现此问题时。