Share via


CONTROLLER_ATTRIBUTE_FLAGS Union (gpioclx.h)

Die CONTROLLER_ATTRIBUTE_FLAGS-Struktur beschreibt die Hardwareattribute des GPIO-Controllergeräts (General Purpose E/O).

Syntax

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;

Member

MemoryMappedController

Gibt an, ob der GPIO-Controller arbeitsspeicherseitig zugeordnet ist. Wenn dieses Flag festgelegt ist, werden die Hardwareregister des GPIO-Controllers Speicheradressen zugeordnet und können direkt von einer GPIO-Controllertreiberroutine zugegriffen werden, die bei DIRQL ausgeführt wird. Andernfalls kann nur über E/A-Anforderungen auf die Register des GPIO-Controllers zugegriffen werden, die der GPIO-Controllertreiber am IRQL = PASSIVE_LEVEL sendet. Weitere Informationen finden Sie in den Hinweisen.

ActiveInterruptsAutoClearOnRead

Gibt an, ob aktive Interrupts automatisch gelöscht werden, wenn der GPIO-Controllertreiber sie liest. Wenn dieses Flag festgelegt ist, geht GpioClx davon aus, dass Interrupts automatisch gelöscht werden, wenn sie gelesen werden, und fordert daher nicht explizit an, dass der Treiber aktive Interrupts während der Interruptverarbeitung löscht. Andernfalls fordert GpioClx explizit an, dass aktive Interrupts gelöscht werden. Weitere Informationen finden Sie in der Diskussion zum ActiveInterruptsAutoClearOnRead-Flagbit in GPIO_CLIENT_REGISTRATION_PACKET.

FormatIoRequestsAsMasks

Gibt an, ob Rückruffunktionen, die aus GPIO-Pins lesen oder schreiben, Lese- und Schreibwerte als 64-Bit-Masken angeben sollen. Wenn dieses Flag festgelegt ist, verwendet GpioClx CLIENT_ReadGpioPinsUsingMask Rückrufe, die GPIO-Pinwerte in Masken lesen, und CLIENT_WriteGpioPinsUsingMask Rückrufe, die Masken verwenden, um GPIO-Pins festzulegen und zu löschen. Andernfalls verwendet GpioClx CLIENT_ReadGpioPins und CLIENT_WriteGpioPins Rückrufe, die Arrays von Pinnummern verwenden, um anzugeben, auf welche GPIO-Pins zugegriffen werden soll. Weitere Informationen finden Sie in der Diskussion zum FormatIoRequestsAsMasks-Flagbit in GPIO_CLIENT_REGISTRATION_PACKET.

DeviceIdlePowerMgmtSupported

Gibt an, ob der GPIO-Controller die Energieverwaltung auf Geräteebene unterstützt. Wenn dieses Flag festgelegt ist, kann der GPIO-Controller im Leerlauf (d3) in einen Low-Power-Zustand versetzt werden (d.a. wenn keine aktiven Verbindungen mit dem Controller vorhanden sind). Andernfalls verbleibt der GPIO-Controller bei jedem Einschalten des Controllers im D0-Betriebszustand.

BankIdlePowerMgmtSupported

Gibt an, ob der GPIO-Controller die Energieverwaltung auf Komponentenebene unterstützt. Wenn dieses Flag festgelegt ist, kann eine oder mehrere Banken im GPIO-Controller unabhängig von den anderen Banken im GPIO-Controller in einen Energiesparzustand versetzt werden. Andernfalls können die Machtzustände der Banken nicht einzeln gesteuert werden. Dieses Flag kann nur für einen GPIO-Controller festgelegt werden, dessen Register speicherseitig zugeordnet sind, wie durch das Flag MemoryMappedController angegeben. In der Regel ist nur ein GPIO-Controller, der ein integrierter Bestandteil eines SoC-Moduls ist, speicherseitig zugeordnet. Ein GPIO-Controller, der sich außerhalb des SoC-Moduls befindet, ist in der Regel nicht speicherseitig zugeordnet.

EmulateDebouncing

Ob das Debouncing von Eingabesignalen an GPIO-Pins per Software oder Hardware erfolgt. Wenn dieses Flag festgelegt ist, erfordert der GPIO-Controller debouncing, um in der Software durch die GPIO-Frameworkerweiterung (GpioClx) emuliert zu werden. Andernfalls erfolgt das Debouncing durch Hardware, und software emuliertes Debouncing ist unnötig.

EmulateActiveBoth

Gibt an, ob der GPIO-Controllertreiber GpioClx zum Emulieren von Aktiv-beide-Interrupts in der Software erfordert. Wenn dieses Flag festgelegt ist, emuliert GpioClx aktiv-beide Interrupts in der Software. Andernfalls emuliert GpioClx keine Aktiv-beide-Interrupts. Weitere Informationen finden Sie in den Hinweisen.

IndependentIoHwSupported

Reserved

Ist für das System reserviert.

AsULONG

Hinweise

Das Flags-Element der CLIENT_CONTROLLER_BASIC_INFORMATION-Struktur ist eine CONTROLLER_ATTRIBUTE_FLAGS-Struktur .

GpioClx implementiert eine Interruptdienstroutine (ISR) für Dienstunterbrechungen vom GPIO-Controller. Wenn das MemoryMappedController-Flagbit festgelegt ist, greift dieser ISR direkt auf die Hardwareregister des GPIO-Controllers zu. Andernfalls plant der ISR einen Workerthread für die Behandlung des Interrupts, und dieser Workerthread, der unter IRQL = PASSIVE_LEVEL ausgeführt wird, ruft die Interrupt-bezogenen Rückruffunktionen des Treibers auf, um den Interrupt zu behandeln. Diese Funktionen verwenden E/A-Anforderungen, um Daten und Steuerungsinformationen an und aus den Registern des GPIO-Controllers zu übertragen. Da diese E/A-Anforderungen aus einem Thread auf passiver Ebene gesendet werden, können sie synchron gesendet werden.

Weitere Informationen zum MemoryMappedController-Flagbit finden Sie unter Interrupt-Related Callbacks.

Ein Aktiv-Beide-Interrupt ist ein edgeausgelöster Interrupt, für den eine Interruptanforderung durch einen Übergang von niedrig zu hoch oder einen Übergang von hoch zu niedrig auf der Unterbrechungslinie angezeigt wird. Nachdem ein Übergang mit niedrigen zu hohen Signalen eine Interruptanforderung signalisiert, bleibt die Unterbrechungsleitung hoch, bis ein Übergang mit hoher zu niedriger Grenze die nächste Interruptanforderung signalisiert. Ähnlich bleibt die Unterbrechungsleitung niedrig, bis ein Übergang von "Niedrig zu hoch" die nächste Interruptanforderung signalisiert.

Ein Drucktastengerät ist in der Regel mit einem Aktiv-Beide-Interrupt verbunden. Ein Interrupt wird generiert, wenn der Benutzer die Schaltfläche drückt, und ein weiterer Interrupt wird generiert, wenn die Schaltfläche freigegeben wird. Wenn der ISR eines Gerätetreibers mit einem Aktiven-Beide-Interrupt verbunden ist, wird der ISR sowohl an steigenden als auch an fallenden Kanten der Signalleitung aufgerufen.

Einige GPIO-Controller implementieren aktiv-beide Interrupteingaben in der Hardware. Wenn die Hardware jedoch keine Aktiv-beide-Interrupts unterstützt, legt der GPIO-Controllertreiber das EmulateActiveBoth-Flag fest, um anzufordern, dass GpioClx aktiv-beide Interrupts in der Software emuliert. Ein Treiber, der dieses Flag festlegt, muss eine CLIENT_ReconfigureInterrupt Rückruffunktion implementieren. Um einen Aktiv-Beide-Interrupt-Pin zu emulieren, ruft GpioClx diese Funktion auf, um alternativ einen GPIO-Pin für Unterbrechungen im Aktiv-Hoch- und Aktiv-Niedrigmodus zu konfigurieren.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Wird ab Windows 8 unterstützt.
Kopfzeile gpioclx.h

Weitere Informationen

CLIENT_CONTROLLER_BASIC_INFORMATION

CLIENT_QueryActiveInterrupts

CLIENT_ReadGpioPins

CLIENT_ReadGpioPinsUsingMask

CLIENT_ReconfigureInterrupt

CLIENT_WriteGpioPins

CLIENT_WriteGpioPinsUsingMask

GPIO_CLIENT_REGISTRATION_PACKET