다음을 통해 공유


GpioClx I/O 및 인터럽트 인터페이스

일반적으로 GPIO 컨트롤러의 클라이언트는 GPIO 핀에 연결하는 주변 장치용 드라이버입니다. 이러한 드라이버는 GPIO 핀을 낮은 대역폭 데이터 채널, 디바이스 선택 출력 및 인터럽트 요청 입력으로 사용합니다. 주변 장치 드라이버는 데이터 입력 또는 출력으로 구성된 GPIO 핀에 대한 논리적 연결을 엽니다. 이러한 연결을 사용하여 이러한 핀에 I/O 요청을 보냅니다. 또한 주변 장치 드라이버는 인터럽트 요청 입력으로 구성된 GPIO 핀에 인터럽트 서비스 루틴을 논리적으로 연결할 수 있습니다.

GPIO 핀은 시스템 관리 하드웨어 리소스입니다. 주변 장치 드라이버가 디바이스를 시작하기 전에 PnP(플러그 앤 플레이) 관리자는 이 드라이버에 하드웨어 리소스 목록을 할당합니다. 이 하드웨어 리소스 목록에는 다음이 포함될 수 있습니다.

  • GPIO I/O 리소스. 이 리소스는 데이터 입력 또는 데이터 출력으로 구성된 하나 이상의 GPIO 핀 집합입니다. GPIO I/O 리소스는 Windows 8 시작하는 새로운 Windows 리소스 유형입니다.
  • 인터럽트입니다. 이 인터럽트 리소스는 인터럽트 입력으로 구성된 GPIO 핀으로 구현될 수 있지만 대신 프로그래밍 가능한 인터럽트 컨트롤러 또는 프로세서 패키지의 전용 인터럽트 핀으로 구현될 수 있습니다. HAL(하드웨어 추상화 계층) 인터럽트 추상화는 클라이언트 드라이버가 안전하게 무시할 수 있는 이러한 구현 세부 정보를 숨깁니다.

주변 장치 드라이버가 GPIO 핀 집합을 데이터 입력 또는 출력으로 사용하려면 먼저 드라이버가 이러한 핀에 대한 논리적 연결을 열어야 합니다. 예를 들어 KMDF( 커널 모드 드라이버 인터페이스 ) 드라이버는 WDFIOTARGET 핸들을 가져와 연결을 식별합니다. 드라이버는 이 핸들을 사용하여 I/O 요청을 핀으로 보냅니다. 특히 클라이언트 드라이버는 IOCTL_GPIO_WRITE_PINS 보내고 I /O 제어 요청을 IOCTL_GPIO_READ_PINS 출력 핀에 데이터를 쓰고 입력 핀에서 데이터를 읽습니다. GPIO I/O 핀 집합에 연결하는 방법을 보여 주는 코드 예제는 다음 topics 참조하세요.

KMDF 드라이버를 GPIO I/O 핀에 연결

인터럽트 리소스를 사용하여 인터럽트를 수신하려면 주변 장치 드라이버가 ISR(인터럽트 서비스 루틴)을 인터럽트에 논리적으로 연결해야 합니다. 예를 들어 커널 모드 드라이버는 WdfInterruptCreate 메서드 또는 IoConnectInterruptEx 루틴을 호출하여 이 연결을 만들 수 있습니다. 연결되면 주변 디바이스가 GPIO 핀 또는 인터럽트 컨트롤러 입력에 대한 인터럽트 요청에 신호를 보낼 때 드라이버의 ISR이 실행됩니다. 인터럽트 에 대한 자세한 내용은 인터럽트 개체 만들기를 참조하세요.

GPIO 프레임워크 확장(GpioClx)은 클라이언트인 주변 장치 드라이버에 대한 I/O 연결 및 인터럽트 연결을 모두 관리합니다. PnP 관리자는 GPIO 컨트롤러 디바이스의 다른 GPIO 핀 그룹을 다른 클라이언트 드라이버에 할당할 수 있습니다. 이러한 핀 중 일부는 데이터 입력 또는 출력으로 구성되고 일부는 인터럽트 요청 입력으로 구성됩니다.

클라이언트 드라이버가 인터럽트 요청을 받거나 GPIO 핀에 I/O 요청을 보내면 GpioClx는 GPIO 컨트롤러 드라이버에 의해 구현되는 이벤트 콜백 함수를 호출합니다. 이러한 콜백은 GPIO 컨트롤러 디바이스의 하드웨어 레지스터에 액세스합니다. GpioClx는 이러한 함수 호출을 통해 데이터 입력을 읽고, 데이터 출력에 쓰고, 인터럽트 요청을 관리합니다(인터럽트 입력으로 구성된 GPIO 핀 쿼리, 사용, 마스킹, 지우기 등).

GpioClx는 I/O를 관리하고 클라이언트에서 연 연결을 중단하는 데 필요한 모든 처리를 수행합니다. GPIO 컨트롤러 드라이버는 GpioClx에 대한 이러한 연결 관리를 위임하여 GPIO 컨트롤러 디바이스의 하드웨어 레지스터에 액세스하는 비교적 간단한 작업만 담당합니다. GPIO 컨트롤러 드라이버는 특정 액세스가 수행되는 클라이언트 드라이버를 알 필요가 없습니다.