다음을 통해 공유


GPIO 인터럽트

일부 GPIO(범용 I/O) 컨트롤러 디바이스는 인터럽트 요청 입력으로 작동하도록 GPIO 핀을 구성할 수 있습니다. 이러한 인터럽트 요청 입력은 GPIO 핀에 물리적으로 연결된 주변 장치에서 구동됩니다. 이러한 GPIO 컨트롤러에 대한 드라이버는 개별 GPIO 핀에서 인터럽트 요청을 활성화, 비활성화, 마스크 처리, 해제 및 지울 수 있습니다.

GPIO 인터럽트 지원은 선택 사항입니다. GPIO 프레임워크 확장(GpioClx)은 GPIO 인터럽트 지원을 위해 GPIO 컨트롤러가 필요하지 않습니다.

이 부분에서는

주제 설명

기본 및 보조 인터럽트

GPIO 인터럽트 처리는 기본적으로 2단계 프로세스입니다. GPIO 프레임워크 확장(GpioClx) ISR(인터럽트 서비스 루틴)을 실행하는 GPIO(범용 I/O) 컨트롤러의 인터 럽트는 기본 인터럽트라고 합니다. 이 ISR은 인터럽트 GPIO 핀을 GSI(전역 시스템 인터럽트)에 매핑하고 이 GSI를 HAL(하드웨어 추상화 계층)에 전달합니다. HAL은 이 GSI를 통해 GPIO 핀에 논리적으로 연결된 두 번째 ISR을 실행하는 보조 인터럽트를 생성합니다. 이 프로세스는 GPIO 드라이버 지원 개요의 다이어그램에 표시됩니다.

GPIO-Based 인터럽트 리소스

GPIO 핀에 인터럽트를 보내는 주변 장치용 드라이버는 GPIO 인터럽트를 추상 Windows 인터럽트 리소스로 획득합니다. KMDF(커널 모드 드라이버 프레임워크) 드라이버는 EvtDevicePrepareHardware 이벤트 콜백 함수를 통해 이러한 리소스를 받습니다.

Passive-Level ISRs

Windows 8부터 KMDF(커널 모드 드라이버 프레임워크) 및 UMDF(사용자 모드 드라이버 프레임워크) 드라이버는 옵션으로 수동 수준에서 실행되도록 ISR(인터럽트 서비스 루틴)을 등록할 수 있습니다.

Interrupt-Related 콜백

옵션으로 GPIO(범용 I/O) 컨트롤러용 드라이버는 GPIO 인터럽트를 지원할 수 있습니다. GPIO 인터럽트를 지원하기 위해 GPIO 컨트롤러 드라이버는 이러한 인터럽트를 관리하는 콜백 함수 집합을 구현합니다. 드라이버에는 GPIO 프레임워크 확장(GpioClx)의 클라이언트로 등록할 때 드라이버가 제공하는 등록 패킷에 이러한 콜백 함수에 대한 포인터가 포함됩니다.

GPIO 컨트롤러 드라이버에 대한 인터럽트 동기화

GPIO 컨트롤러 드라이버는 GPIO_CLX_AcquireInterruptLockGPIO_CLX_ReleaseInterruptLock 메서드를 호출하여 GPIO 프레임워크 확장(GpioClx)에 의해 내부적으로 구현되는 인터럽트 잠금을 획득하고 해제할 수 있습니다. IRQL = PASSIVE_LEVEL 실행되는 드라이버 코드는 이러한 메서드를 호출하여 GpioClx의 ISR(인터럽트 서비스 루틴)과 동기화할 수 있습니다. GpioClx는 GPIO 컨트롤러의 각 핀 뱅크에 별도의 인터럽트 잠금을 사용합니다.

공유 GPIO 인터럽트 사용 및 사용 안 함

경우에 따라 둘 이상의 주변 장치에서 인터럽트 요청 줄이 동일한 GPIO(물리적 범용 I/O) 핀에 연결될 수 있습니다. 공유 인터럽트 라인의 GPIO 핀은 일반적으로 수준 트리거 인터럽트용으로 구성됩니다.

GPIO 인터럽트 마스크

인터럽트 입력으로 구성된 GPIO(범용 I/O) 핀은 사용 및 사용 안 함 외에도 마스크 및 마스크 해제할 수 있습니다.