0

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

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

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

谢谢

4

1 回答 1

1

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

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

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

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 */
于 2017-05-03T20:15:53.370 回答