GPIO 驅動程式支援概觀
從Windows 8開始,GPIO 架構延伸模組 (GpioClx) 可簡化撰寫 GPIO 控制器裝置驅動程式的工作。 此外,GpioClx 也提供連接到 GPIO 針腳的周邊裝置驅動程式支援。 GpioClx 是核心模式驅動程式架構的系統提供擴充功能, (KMDF) ,會執行 GPIO 裝置類別成員通用的處理工作。
此概觀討論下列主題:
GPIO 控制器驅動程式
硬體廠商提供驅動程式來控制其 GPIO 控制器。 GPIO 控制器驅動程式是 KMDF 驅動程式,可管理 GPIO 控制器的所有硬體特定作業。 GPIO 控制器驅動程式會與 GpioClx 合作,以處理設定為資料輸入和資料輸出之 GPIO 針腳群組的 I/O 要求。 此外,此驅動程式會與 GpioClx 合作,以處理已設定為中斷輸入的 GPIO 針腳中斷要求。
GPIO 控制器裝置有一些 GPIO 針腳。 這些針腳可以實際連線到周邊裝置。 GPIO 針腳可以設定為資料輸入、資料輸出或中斷要求輸入。 一般而言,GPIO 針腳是專用於周邊裝置,而不是由兩個以上的裝置共用。 GPIO 針腳與周邊裝置之間的連線是固定的,使用者 (無法變更,例如移除周邊裝置,並將它取代為另一個裝置) 。 因此,可以在平臺韌體中描述將 GPIO 針腳指派給周邊裝置。
下圖顯示 GPIO 控制器驅動程式和 GpioClx。
GPIO 控制器驅動程式和 GpioClx 會透過 GpioClx 裝置驅動程式介面彼此通訊, (DDI) 。 GPIO 控制器驅動程式會呼叫 GpioClx 所實作 的驅動程式支援方法 。 GpioClx 會呼叫 GPIO 控制器驅動程式所實作 的事件回呼函 式。
GPIO 控制器驅動程式會直接存取 GPIO 控制器裝置的硬體暫存器。
GpioClx 會處理實際連線到 GPIO 針腳之周邊裝置驅動程式的 I/O 要求。 GpioClx 會將這些 I/O 要求轉譯為簡單的硬體作業,其執行方式是呼叫 GPIO 控制器驅動程式所實作的事件回呼函式。 例如,若要從或將資料寫入一組 GPIO 針腳,GpioClx 會呼叫事件回呼函式,例如 CLIENT_ReadGpioPins 和 CLIENT_WriteGpioPins。 GpioClx 會管理 GPIO 控制器的 I/O 佇列,進而減輕這項工作的 GPIO 控制器驅動程式。
此外,GpioClx 會處理 GPIO 控制器裝置的主要中斷,並將這些中斷對應至周邊設備磁碟機所處理的次要中斷。 主要中斷是硬體裝置所產生的中斷。 作業系統會產生次要中斷,以回應特定主要中斷。 主要和次要中斷都是由全域系統中斷所識別, (GSI) 。 硬體平臺的 ACPI 韌體會將 GSI 指派給主要中斷,而作業系統會在執行時間將 GSI 指派給次要中斷。
例如,韌體會將 GSI 指派給 GPIO 控制器的硬體中斷,而作業系統會將 GSI 指派給設定為中斷輸入的 GPIO 針腳。
GpioClx 會實作 ISR,以處理 GPIO 控制器裝置的硬體產生的主要中斷。 當周邊裝置在 GPIO 針腳上判斷提示中斷,且此針腳上的中斷已啟用且未遮罩時,GPIO 控制器會中斷處理器。 回應中,核心設陷處理常式會排程 GpioClx ISR 執行。 為了識別造成中斷的 GPIO 針腳,GpioClx ISR 會呼叫由 GPIO 控制器驅動程式實作的 CLIENT_QueryActiveInterrupts 事件回呼函式。 GpioClx ISR 接著會查閱指派給此針腳的 GSI,並將此 GSI 傳遞給硬體抽象層 (HAL) 。 HAL 會呼叫已註冊此 GSI 的 ISR,以產生次要中斷。 此 ISR 屬於原本判斷中斷之周邊裝置的驅動程式。
如需主要和次要中斷的詳細資訊,請參閱 GPIO 中斷。
使用 GPIO 針腳的周邊裝置驅動程式
啟動時,隨插即用 (PnP) 管理員會列舉 PnP 裝置和非 PnP 裝置。 對於具有 GPIO 針腳固定連線的非 PnP 裝置,PnP 管理員會查詢平臺韌體,以判斷哪些 GPIO 針腳會指派為系統管理的硬體資源給這些裝置。
周邊裝置的 KMDF 驅動程式會在 EvtDevicePrepareHardware 回呼期間接收其指派的硬體資源。 這些資源可能包含設定為數據輸出、資料輸入或中斷要求輸入的 GPIO 針腳。
GPIO I/O 資源是 Windows 8 中的新 Windows 資源類型。 此資源包含一組一或多個 GPIO 針腳,可用來做為資料輸入或資料輸出。 如果周邊設備磁碟機開啟 GPIO I/O 資源以供讀取,驅動程式會使用資源中的所有針腳作為資料輸入。 如果驅動程式開啟 GPIO I/O 資源以進行寫入,驅動程式會使用資源中的所有針腳作為資料輸出。 如需示範周邊設備磁碟機如何開啟一組 GPIO I/O 針腳的邏輯連線的程式碼範例,請參閱下列主題:
設定為中斷輸入的 GPIO 針腳會指派給驅動程式作為一般 Windows 中斷資源。 中斷資源抽象概念會隱藏可能會由 GPIO 針腳實作中斷的事實,例如可程式化的中斷控制器。 因此,驅動程式可以將 GPIO 型中斷資源視為任何其他中斷資源。
若要存取 GPIO I/O 資源中的 GPIO 針腳,周邊設備磁碟機必須開啟與針腳的邏輯連線。 KMDF 驅動程式會呼叫 WdfIoTargetOpen 方法來開啟連線。 透過此連線,驅動程式可以將 I/O 要求傳送至 GPIO 針腳。 驅動程式會傳送 IOCTL_GPIO_READ_PINS 要求,以從這些針腳讀取資料, (如果是輸入針腳) 或 IOCTL_GPIO_WRITE_PINS 要求,以在輸出針腳) 時將資料寫入至它們 (。
若要從中斷資源中的 GPIO 針腳接收中斷,周邊設備磁碟機必須註冊其插斷服務常式 (ISR) ,才能從此針腳所實作的中斷資源接收中斷。 KMDF 驅動程式會呼叫 WdfInterruptCreate 方法,將 ISR 連接到中斷。