CONTROLLER_ATTRIBUTE_FLAGS 공용 구조체(gpioclx.h)

CONTROLLER_ATTRIBUTE_FLAGS 구조는 GPIO(범용 I/O) 컨트롤러 디바이스의 하드웨어 특성을 설명합니다.

구문

typedef union _CONTROLLER_ATTRIBUTE_FLAGS {
  struct {
    ULONG MemoryMappedController : 1;
    ULONG ActiveInterruptsAutoClearOnRead : 1;
    ULONG FormatIoRequestsAsMasks : 1;
    ULONG DeviceIdlePowerMgmtSupported : 1;
    ULONG BankIdlePowerMgmtSupported : 1;
    ULONG EmulateDebouncing : 1;
    ULONG EmulateActiveBoth : 1;
    ULONG IndependentIoHwSupported : 1;
    ULONG Reserved : 24;
  };
  ULONG  AsULONG;
} CONTROLLER_ATTRIBUTE_FLAGS, *PCONTROLLER_ATTRIBUTE_FLAGS;

멤버

MemoryMappedController

GPIO 컨트롤러가 메모리 매핑인지 여부입니다. 이 플래그가 설정된 경우 GPIO 컨트롤러의 하드웨어 레지스터는 메모리 주소에 매핑되며 DIRQL에서 실행되는 GPIO 컨트롤러 드라이버 루틴에서 직접 액세스할 수 있습니다. 그렇지 않으면 GPIO 컨트롤러의 레지스터는 GPIO 컨트롤러 드라이버가 IRQL = PASSIVE_LEVEL 보내는 I/O 요청을 통해서만 액세스할 수 있습니다. 자세한 내용은 설명 부분을 참조하세요.

ActiveInterruptsAutoClearOnRead

GPIO 컨트롤러 드라이버가 읽을 때 활성 인터럽트는 자동으로 지워지는지 여부입니다. 이 플래그가 설정된 경우 GpioClx는 인터럽트를 읽을 때 자동으로 지워지므로 드라이버가 인터럽트 처리 중에 활성 인터럽트를 지우도록 명시적으로 요청하지 않는다고 가정합니다. 그렇지 않으면 GpioClx는 활성 인터럽트 지우기를 명시적으로 요청합니다. 자세한 내용은 GPIO_CLIENT_REGISTRATION_PACKETActiveInterruptsAutoClearOnRead 플래그 비트에 대한 설명을 참조하세요.

FormatIoRequestsAsMasks

GPIO 핀에서 읽거나 쓰는 콜백 함수가 읽기 및 쓰기 값을 64비트 마스크로 지정해야 하는지 여부입니다. 이 플래그가 설정되면 GpioClx는 GPIO 핀 값을 마스크로 읽는 CLIENT_ReadGpioPinsUsingMask 콜백을 사용하고, 마스크를 사용하여 GPIO 핀을 설정하고 지우는 콜백을 CLIENT_WriteGpioPinsUsingMask . 그렇지 않으면 GpioClx는 번호 배열을 사용하여 액세스할 GPIO 핀을 지정하는 CLIENT_ReadGpioPins 및 CLIENT_WriteGpioPins 콜백을 사용합니다. 자세한 내용은 GPIO_CLIENT_REGISTRATION_PACKETFormatIoRequestsAsMasks 플래그 비트에 대한 설명을 참조하세요.

DeviceIdlePowerMgmtSupported

GPIO 컨트롤러가 디바이스 수준 전원 관리를 지원하는지 여부입니다. 이 플래그가 설정되면 GPIO 컨트롤러가 유휴 상태일 때(즉, 컨트롤러에 대한 활성 연결이 없는 경우) 저전력(D3) 상태로 전환할 수 있습니다. 그렇지 않으면 GPIO 컨트롤러는 컨트롤러가 켜질 때마다 완전히 켜진(D0) 전원 상태로 유지됩니다.

BankIdlePowerMgmtSupported

GPIO 컨트롤러가 구성 요소 수준 전원 관리를 지원하는지 여부입니다. 이 플래그가 설정되면 GPIO 컨트롤러의 하나 이상의 은행을 GPIO 컨트롤러의 다른 은행과 독립적으로 저전력 상태로 전환할 수 있습니다. 그렇지 않으면 은행의 전력 상태를 개별적으로 제어할 수 없습니다. 이 플래그는 MemoryMappedController 플래그로 표시된 대로 레지스터가 메모리 매핑된 GPIO 컨트롤러에 대해서만 설정할 수 있습니다. 일반적으로 SoC 모듈의 통합된 부분인 GPIO 컨트롤러만 메모리 매핑됩니다. SoC 모듈 외부에 있는 GPIO 컨트롤러는 일반적으로 메모리 매핑되지 않습니다.

EmulateDebouncing

GPIO 핀에 대한 입력 신호 디버깅이 소프트웨어 또는 하드웨어에서 수행되는지 여부입니다. 이 플래그가 설정된 경우 GPIO 컨트롤러는 GPIO 프레임워크 확장(GpioClx)을 통해 소프트웨어에서 디버그를 에뮬레이트해야 합니다. 그렇지 않으면 하드웨어에서 디버깅을 수행하고 소프트웨어 에뮬레이트된 디버그가 필요하지 않습니다.

EmulateActiveBoth

GPIO 컨트롤러 드라이버에 소프트웨어의 활성-둘 다 인터럽트를 에뮬레이트하기 위해 GpioClx가 필요한지 여부입니다. 이 플래그가 설정되면 GpioClx는 소프트웨어에서 활성-둘 다 인터럽트를 에뮬레이트합니다. 그렇지 않으면 GpioClx는 활성-둘 다 인터럽트를 에뮬레이트하지 않습니다. 자세한 내용은 설명 부분을 참조하세요.

IndependentIoHwSupported

Reserved

시스템에서 사용하도록 예약되었습니다.

AsULONG

설명

CLIENT_CONTROLLER_BASIC_INFORMATION 구조체의 Flags 멤버는 CONTROLLER_ATTRIBUTE_FLAGS 구조체입니다.

GpioClx는 GPIO 컨트롤러에서 서비스 인터럽트로 ISR(인터럽트 서비스 루틴)을 구현합니다. MemoryMappedController 플래그 비트가 설정된 경우 이 ISR은 GPIO 컨트롤러의 하드웨어 레지스터에 직접 액세스합니다. 그렇지 않으면 ISR은 인터럽트 처리를 위해 작업자 스레드를 예약하고 IRQL = PASSIVE_LEVEL 실행되는 이 작업자 스레드는 드라이버의 인터럽트 관련 콜백 함수를 호출하여 인터럽트 처리를 처리합니다. 이러한 함수는 I/O 요청을 사용하여 GPIO 컨트롤러의 레지스터로 데이터를 전송하고 정보를 제어합니다. 이러한 I/O 요청은 수동 수준 스레드에서 전송되므로 동기적으로 보낼 수 있습니다.

MemoryMappedController 플래그 비트에 대한 자세한 내용은 인터럽트 관련 콜백을 참조하세요.

활성-둘 다 인터럽트는 인터럽트 요청이 인터럽트 줄에서 높음 또는 높음에서 낮은 전환으로 표시되는 에지 트리거 인터럽트입니다. 낮은 전환에서 높은 전환이 인터럽트 요청을 신호로 전송한 후에는 높음에서 낮은 전환이 다음 인터럽트 요청을 신호할 때까지 인터럽트 라인이 높게 유지됩니다. 마찬가지로, 높음에서 낮은 전환이 인터럽트 요청을 신호한 후에는 낮은 전환에서 높은 전환이 다음 인터럽트 요청을 신호할 때까지 인터럽트 라인이 낮게 유지됩니다.

푸시 단추 디바이스는 일반적으로 활성-두 인터럽트 모두에 연결됩니다. 사용자가 단추를 누르면 인터럽트를 생성하고 단추를 놓을 때 다른 인터럽트를 생성합니다. 디바이스 드라이버의 ISR이 활성-둘 다 인터럽트에 연결된 경우 ISR은 신호선의 상승 및 하방 가장자리 모두에서 호출됩니다.

일부 GPIO 컨트롤러는 하드웨어에서 활성-둘 다 인터럽트 입력을 구현합니다. 그러나 하드웨어가 활성-둘 다 인터럽트를 지원하지 않는 경우 GPIO 컨트롤러 드라이버는 EmulateActiveBoth 플래그를 설정하여 GpioClx가 소프트웨어에서 active-both 인터럽트를 에뮬레이트하도록 요청합니다. 이 플래그를 설정하는 드라이버는 CLIENT_ReconfigureInterrupt 콜백 함수를 구현해야 합니다. 활성-둘 다 인터럽트 핀을 에뮬레이트하기 위해 GpioClx는 이 함수를 호출하여 활성-높음 및 활성-낮은 수준 모드 인터럽트용 GPIO 핀을 교대로 구성합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 부터 지원합니다.
머리글 gpioclx.h

추가 정보

CLIENT_CONTROLLER_BASIC_INFORMATION

CLIENT_QueryActiveInterrupts

CLIENT_ReadGpioPins

CLIENT_ReadGpioPinsUsingMask

CLIENT_ReconfigureInterrupt

CLIENT_WriteGpioPins

CLIENT_WriteGpioPinsUsingMask

GPIO_CLIENT_REGISTRATION_PACKET