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.

[参考译文] AM6442:GPIO 去抖设置

Guru**** 2429850 points
Other Parts Discussed in Thread: AM6442

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1545019/am6442-gpio-debounce-setting

器件型号:AM6442


工具/软件:

我正在尝试设置 AM6442 GPIO 的去抖功能。

目标 GPIO 是 GPIO1_64 和 GPIO1_65、我尝试将周期设置为“最接近 1us 的值“。
我创建了以下初始化函数、并将其放在 R5F0-1 内核上运行的应用程序的 Board_init () 之后。

void DebounceInitialize(void){

    CSL_mcu_ctrl_mmr_cfg0Regs *regs = (CSL_mcu_ctrl_mmr_cfg0Regs *)(uintptr_t)CSL_CTRL_MMR0_CFG0_BASE;

    volatile uint32_t *debounce1Reg = NULL;

    debounce1Reg = &regs->DBOUNCE_CFG1;

    CSL_REG32_WR(debounce1Reg, 53);


    uint32_t            baseAddr;
    volatile uint32_t  *regAddr;
    uint32_t setting;

    baseAddr = CSL_PADCFG_CTRL0_CFG0_BASE + PADCFG_PMUX_OFFSET;

    Pinmux_unlockMMR(PINMUX_DOMAIN_ID_MAIN);

    regAddr = (volatile uint32_t *)(baseAddr + PIN_I2C0_SCL);
    setting = (CSL_REG32_RD(regAddr) | PIN_DEBOUNCE1_ENABLE);
    CSL_REG32_WR(regAddr, setting);


    regAddr = (volatile uint32_t *)(baseAddr + PIN_I2C0_SDA);
    setting = (CSL_REG32_RD(regAddr) | PIN_DEBOUNCE1_ENABLE);
    CSL_REG32_WR(regAddr, setting);

    Pinmux_lockMMR(PINMUX_DOMAIN_ID_MAIN);

    return;
}

为了验证是否反映了这些设置、我执行了以下测试。

-将中断设置为 GPIO1_65 上的“在调试输出中显示“。
-在 AM6442 上运行应用并输入宽度为 0.5us 的负脉冲至 GPIO1_65。

我预测“不会发生中断“、但实际上确实发生了中断。

我认为初始化过程出错、设置不符合预期。

请告诉我设置它的正确方法。

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

    您好、我正在将其发送给我们的专家、请允许他有时间回来与您联系

    同时、您是否使用 MCU_SDK 还是 Motor Control SDK?

    谢谢您、

    Paula

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

    我使用的是 MCU+ SDK 版本 11.00.00.15。

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

    Hi Takeshi、

    GPIO1_64 和 GPIO1_65 引脚不支持去抖功能。

    请参阅下图。

    此致、

    Tushar

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

    我检查了“表 5-35. GPIO0 信号说明“、并了解设置失败的原因。

    让我确认一下一点。

    我是否可以假设这次使用的过程只是针对了错误的 GPIO、并且去抖功能的设置过程没有问题?

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

    Hi Takeshi、

    您在上面提供的代码使用宏 CSL_CTRL_MMR0_CFG0_BASE、该 宏用于主域 MMR、但需要使用 CSL_MCU_CTRL_MMR0_CFG0_BASE 宏。

    您正在尝试直接写入去抖寄存器、而不执行任何解锁/锁定操作。 理想情况下、您应该首先解锁 ctrl_MMR、然后写入该值并再次锁定。

    此致、

    Tushar

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

    我在代码中反映了这两条意见。

    此代码用于设置 GPIO0_43 的去抖功能是否正常?

    void DebounceInitialize(void){
    
    
    	CSL_mcu_ctrl_mmr_cfg0Regs *regs = (CSL_mcu_ctrl_mmr_cfg0Regs *)(uintptr_t)CSL_MCU_CTRL_MMR0_CFG0_BASE;
    
        volatile uint32_t *debounce1Reg = NULL;
    
    	SOC_controlModuleLockMMR(SOC_DOMAIN_ID_MCU, 1);
    
    	debounce1Reg = &regs->DBOUNCE_CFG1;
    
    	SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MCU, 1);
    
    	CSL_REG32_WR(debounce1Reg, 53);
    
    
        uint32_t            baseAddr;
        volatile uint32_t  *regAddr;
        uint32_t setting;
    
        baseAddr = CSL_PADCFG_CTRL0_CFG0_BASE + PADCFG_PMUX_OFFSET;
    
        Pinmux_unlockMMR(PINMUX_DOMAIN_ID_MAIN);
    
    	regAddr = (volatile uint32_t *)(baseAddr + PIN_GPMC0_CSN2);
        setting = (CSL_REG32_RD(regAddr) | PIN_DEBOUNCE1_ENABLE);
        CSL_REG32_WR(regAddr, setting);
    
        Pinmux_lockMMR(PINMUX_DOMAIN_ID_MAIN);
    
        return;
    }

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

    您好、

    以上内容看起来不错。 请检查 debounce1Reg 变量的值以确认它正在写入正确的地址。

    此外、检查地址处的值是否正确写入。

     这里 PIN_DEBOUNCE1_ENABLE 宏的值是多少?

    此致、

    Tushar

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

    我检查了 debounce1Reg 的值。

    debounce1Reg = 0x4504084

    PIN_DEBOUNCE1_ENABLE 的定义如下:

    #define PIN_DEBOUNCE1_ENABLE (((uint32_t) 0x1U)<< 11U)

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

    您好、

    是的、上述顺序似乎可以。

    此致、

    Tushar

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

    我能够确认去抖设置已得到反映。

    我向 GPIO 输入了 0.5us 和 1us 脉冲、并确认对 0.5us 脉冲进行了滤波。

    谢谢你。