0

GPIO 인터럽트로 VLPS 딥 슬립에서 k70 (키네 티스)를 깨울 수 없습니다.깨우기 k70 VLPS에서 GPIO 인터럽트로 깊은 수면

이것은 uCLinux에서 CONFIG_PM을 사용하도록 설정 한 것입니다. 그런 다음 K70을 "echo mem/sys/power/state"로 잠자기 상태로 만들 수 있으며 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 */