通过 GPIO 中断将 k70 从 VLPS 深度睡眠中唤醒
Posted
技术标签:
【中文标题】通过 GPIO 中断将 k70 从 VLPS 深度睡眠中唤醒【英文标题】:wake up k70 from VLPS deep sleep by GPIO interrupt 【发布时间】: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。有没有人知道为什么我不能?
谢谢
【问题讨论】:
【参考方案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 */
【讨论】:
以上是关于通过 GPIO 中断将 k70 从 VLPS 深度睡眠中唤醒的主要内容,如果未能解决你的问题,请参考以下文章