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.

[参考译文] MSPM0G3107:MSPM0C1104关断唤醒并出现 IO 问题

Guru**** 2398695 points
Other Parts Discussed in Thread: SYSCONFIG, MSPM0C1104, MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1321634/mspm0g3107-mspm0c1104-shutdown-wake-with-io-issue

器件型号:MSPM0G3107
主题中讨论的其他器件:MSPM0C1104、SysConfig、 MSPM0G3507

尊敬的 TI 团队:

我正在我们的一个项目中使用 MSPM0C1104、我需要使用低功耗模式。 我正在使用 DL_SYSCTL_setPowerPolicySHUTDOWN ()将 MCU 发送到关断状态、这会使 CPU 处于关断模式。 现在我想使用 GPIO 将其唤醒、根据数据表、引脚 PA0可承受5V 电压、并且能够唤醒。

我将它配置为输入中断、但 uC 没有被唤醒。  

根据我的理解、如果不是 IO 中断发生时、UC 应唤醒、请告诉我如何唤醒 UC。 以下是在休眠状态下发送此消息的代码。

SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
{
    DL_GPIO_enableGlobalFastWake(GPIOA);

    DL_GPIO_initDigitalInput(GPIO_Wake_Intr_IOMUX);

    DL_GPIO_initDigitalOutput(GPIO_LEDS_USER_LED_1_IOMUX);

    DL_GPIO_initDigitalOutput(GPIO_LEDS_USER_TEST_IOMUX);

    DL_GPIO_setPins(GPIOA, GPIO_LEDS_USER_LED_1_PIN |
		GPIO_LEDS_USER_TEST_PIN);
    DL_GPIO_enableOutput(GPIOA, GPIO_LEDS_USER_LED_1_PIN |
		GPIO_LEDS_USER_TEST_PIN);
    DL_GPIO_setLowerPinsPolarity(GPIOA, DL_GPIO_PIN_0_EDGE_RISE_FALL);
    DL_GPIO_clearInterruptStatus(GPIOA, GPIO_Wake_Intr_PIN);
    DL_GPIO_enableInterrupt(GPIOA, GPIO_Wake_Intr_PIN);

}

int main(void)
{
    SYSCFG_DL_init();

    /*
     * Turn OFF LED if SW is open, ON if SW is closed.
     * LED starts OFF by default.
     */
    DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
    NVIC_EnableIRQ(GPIO_Wake_INT_IRQN);

    while (1) {
        if(shutdownEn) {
            shutdownEn = 0;
            DL_SYSCTL_setPowerPolicySHUTDOWN();
            __WFI();
        }
        __WFI();
    }
}

void GPIOA_IRQHandler(void)
{
    /* If SW is high, turn the LED off */

    if (DL_GPIO_readPins(GPIO_Wake_PORT, GPIO_Wake_Intr_PIN)) {
        //Here sys should wake up..
        DL_SYSCTL_releaseShutdownIO();
        DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);


    }
    /* Otherwise, turn the LED on */
    else {
        DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
        shutdownEn = 1;
    }
}

请告诉我如何解决此问题。

此致、

阿曼

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

    您好、Aman

    我会在明天进行检查并提供反馈。 感谢您提供的信息

    B.R.

    佐伊

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

    您好、Aman

    您是否设置了 PINCMx 寄存器中的 WUEN 位?

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

    尊敬的 Zoey:

    是的、我确实配置了 WUEN 位。 这是我做的。 请告诉我、如果我需要做任何其他事情、或者这是正确的方法。

        DL_GPIO_initDigitalInputFeatures(GPIO_Wake_Intr_IOMUX,
                                        IOMUX_PINCM_INV_DISABLE, DL_GPIO_RESISTOR_NONE,
                                        IOMUX_PINCM_HYSTEN_DISABLE, DL_GPIO_WAKEUP_ENABLE);

    此致、
    阿曼

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

    您好、Aman:

    MSPM0不是通过中断唤醒、而是通过检查唤醒引脚逻辑(WCOMP 位)

    如果 MCU 被唤醒、并将重新启动代码、这意味着您无法判断 MCU 是否由 LED 唤醒  

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

    尊敬的 Zoey:

    您能给我发送一个示例代码、说明唤醒的情况以及从 SHUTDOWN 模式唤醒后我的代码将返回的位置。

    此致
    阿曼

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

    您好、Aman:

    我仅使用 MSPM0G3507、请参阅以下代码: tidrive.ext.ti.com/.../6f5616d5-8db6-42fb-9120-c508f16354d7  

    密码:S[7B25vw

    如果在从 G 迁移到 C 时遇到问题、请告诉我。

    B. R

    佐伊

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

    尊敬的 Zoey:

    我仔细检查了您发送的代码、没有针对 USER_SWITCH_1引脚的中断启用。如果没有中断启用、此操作将正常工作。 由于我没有相同的板、因此我为 MSPM0C1104移植了相同的代码(不启用与您的代码相同的中断)、但仍然无法唤醒。

    它仅在我按下复位开关并进入 DL_SYSCTL_releaseShutdownIO 时才会唤醒;循环并使第二个 LED 闪烁、但当任何其他或配置的 IO 发生更改时、不会发生这种情况。

    如果您需要我将发送的代码、请告诉我。

    此致、
    Aman.

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

    您好  

    您必须通过 SysConfig 将程序器件更改为 C 、然后再更改闪存。 不需要使用中断。 当器件进入 SHUTDOWN 模式时、当 PA0为1 (正如 I SET)时、MCU 将唤醒。

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

    尊敬的 Zoey:

    是的、我从 SysConfig 中进行了更改。 它不会唤醒。

    我已经上传了代码、您可以检查并告诉我。
    https://drive.google.com/drive/folders/1zlBFXPIym4I5qA8HlwzhjaSJfxVzk_b2?usp=sharing

    此致、
    阿曼

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

    好的,我明天会检查一下,因为在中国是午夜

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

    您好、Aman:

    我发现 M0C 无法通过 IO 唤醒。 我将向我们的系统提供反馈、并进行内部讨论。

    感谢您的提问和信息!

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

    您好、Aman:

    根据系统团队的反馈、MSPM0C 不支持 IO 唤醒功能。

    B.R.

    佐伊

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

    尊敬的 Zoey:

    因此、如果我的系统是这些低功耗模式(睡眠、STOP1、STOP2、STANDBY1、STANDBY2、SHUTDOWN)中的任何一种、我无法从 IO 唤醒、还是仅从关断模式唤醒?

    此致、
    阿曼

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

    刚刚从关机状态

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

    尊敬的 Zoey:

    在待机模式下、此 uC 消耗将近500uA、这是非常高的电流。 根据数据表、应该消耗近5uA 的电流。

    我正在共享代码、请看一下、并让我知道如何在待机1模式下最大程度地降低电流消耗。

    https://drive.google.com/drive/folders/1zlBFXPIym4I5qA8HlwzhjaSJfxVzk_b2?usp=sharing

    请帮助我需要尽快关闭此窗口。

    此致、
    阿曼

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

    您好、Aman:

    由于我正在休假、未来两周我不会在 E2E 上答疑解惑。 很抱歉。

    请参考以下示例: ...:\ti\mspm0_sdk_1_30_00_03\examples\nortos\LP_MSPM0C1104\driverlib\sysctl_power_policy_sleep_to_standby

    如果你对此有任何疑问,我会在我回来的时候回答你。

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

    您好、Aman:

    #include "ti_msp_dl_config.h"
    
    extern volatile uint32_t interruptVectors[];
    volatile uint8_t shutdownEn = 1, otFlag = 1, blinkEn = 0;
    
    
    int main(void)
    {
    
    
        SYSCFG_DL_init();
        NVIC_EnableIRQ(GPIO_Wake_INT_IRQN);
    
        while (1) {
            if(blinkEn)
            {
               delay_cycles(16000000);
            }
            else if(shutdownEn) {
                __WFI();
                __WFI();
            }
    
        }
    }
    
    void GPIOA_IRQHandler(void)
    {
        /* If SW is high, turn the LED off */
    
    
            blinkEn = 1;
            shutdownEn = 0;
    
    
    }

    请使用此代码并尝试一下。