【问题标题】:wake up k70 from VLPS deep sleep by GPIO interrupt通过 GPIO 中断将 k70 从 VLPS 深度睡眠中唤醒
【发布时间】:2017-05-02 13:37:52
【问题描述】:

我无法通过 GPIO 中断将 k70 (Kinetis) 从 VLPS 深度睡眠中唤醒。

这是在 uCLinux 下,我启用了 CONFIG_PM。之后,我可以通过“echo mem > /sys/power/state”让 K70 进入深度睡眠,并从 UART 调试控制台唤醒它。但我无法通过触发 GPIO 中断唤醒。我已经通过中断处理程序的打印确认了中断在睡眠前后工作,并且我还确认了在触发 GPIO 中断后,GPIO 引脚值在睡眠期间从 0 变为 1。

根据K70手册,我应该可以通过GPIO中断唤醒VLPS。有没有人知道为什么我不能?

谢谢

【问题讨论】:

    标签: linux-kernel interrupt gpio power-management nxp-microcontroller


    【解决方案1】:

    首先,您的 GPIO 驱动程序应该实现 IRQ 芯片。 (从上面的描述我不知道平台是什么,那里使用的GPIO驱动程序是什么)。

    其次,IRQ 芯片实现必须有->irq_set_wake() 回调存在并正确实现。

    第三,调用者,通过gpiod_get()获得GPIO线必须执行:

    struct gpio_desc *gd;
    int irq;
    
    gd = gpiod_get(...);
    if (IS_ERR(gd))
      return PTR_ERR(gd);
    
    irq = gpiod_to_irq(gd);
    if (irq < 0)
      return irq;
    
    /* Now! */
    enable_irq_wake(irq); /* This does the trick */
    

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      相关资源
      最近更新 更多