Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows 8'den başlayarak, GPIO denetleyici sürücüsü tarafından denetlenen genel amaçlı G/Ç (GPIO) pinleri, sistem tarafından yönetilen donanım kaynakları olarak diğer sürücüler tarafından kullanılabilir. Veri girişi veya veri çıkışı olarak yapılandırılan pinler olan GPIO G/Ç pinleri, yeni bir Windows kaynak türü olan GPIO G/Ç kaynakları olarak kullanılabilir. Buna ek olarak, kesme isteği girişleri olarak yapılandırılmış olan GPIO kesme pimleri, sıradan Windows kesme kaynakları olarak kullanılabilir.
GPIO G/Ç kaynağı, çevre birimi cihazının sürücüsünün okuyabileceği veya yazabileceği bir veya daha fazla GPIO pini kümesini temsil eder. Windows, çevre birimi cihaz sürücülerinin soyut GPIO G/Ç kaynaklarını işlemek için yazılabilmesi için GPIO G/Ç pinlerinin temel uygulaması hakkındaki ayrıntıları gizler. Bu soyut kaynakları kullanan çevre birimi cihaz sürücüleri, kaynakları uygulayan GPIO denetleyici donanımından bağımsız olarak platformlar arasında çalışabilir. GPIO giriş/çıkış kaynağı, bu kaynağı temel GPIO pin veya pinlerine sahip olan belirli bir GPIO denetleyici sürücüsüyle ilişkilendiren WDFIOTARGET tanıtıcı ile gösterilir.
Genellikle, bir GPIO denetleyicisindeki G/Ç pini, denetleyici donanımının özelliklerine ve pine fiziksel olarak bağlı olan cihaza bağlı olarak giriş veya çıkış için yapılandırılabilir. Bu nedenle, sürücü yazma veya okuma işlemleri için bu pine mantıksal bir bağlantı açabilir, ancak ikisini birden açamayabilir. Ancak, bu kısıtlama GPIO çerçeve uzantısı (GpioClx) tarafından değil donanım tarafından uygulanır. Donanım hem giriş hem de çıkış için bir G/Ç pininin yapılandırılmasına olanak sağlıyorsa, GpioClx bir sürücünün hem okuma hem de yazma işlemleri için pine mantıksal bir bağlantı açmasına olanak tanır.
Kesme isteği girişleri olarak yapılandırılan GPIO pinleri için, kesme isteğinin bir kesme denetleyicisi veya ayrılmış kesme isteği satırı yerine GPIO pini tarafından uygulanması, işletim sistemi tarafından tamamen soyutlanır. GPIO kesmeleri, çevre birimleri sürücüleri için soyut kesme kaynakları olarak sunulur. Bu kaynakların soyutlanması GPIO sürücü yığını ve donanım soyutlama katmanı (HAL) tarafından desteklenir. Bu nedenle, kesme kaynaklarını kullanan çevre birimi sürücüleri, bu kaynakların altyapısı hakkındaki ayrıntıları büyük ölçüde göz ardı edebilir. Daha fazla bilgi için bkz. GPIO Kesmeleri.
Aşağıdaki diyagramda GPIO tabanlı kaynakların iki çevre birimi cihaz sürücüsüne örnek ataması gösterilmektedir:
Yukarıdaki diyagramda aşağıdaki üç GPIO tabanlı kaynağa çevre birimi cihaz sürücüsü A atanır:
- İki veri giriş pinleri
- Veri çıkış pini
- Kesme giriş pini
Aşağıdaki iki GPIO tabanlı kaynak, çevre birimi cihaz sürücüsü B'ye atanır:
- Veri girişi pin'i
- Kesme giriş pini
A ve B sürücüleri, atanan kaynaklarını EvtDevicePrepareHardware geri çağırma işlevlerinde alır. Bir sürücü kaynak olarak bir veya daha fazla GPIO G/Ç pini kümesi alırsa, sürücü bu pinlere erişmek için bu pinlere bir bağlantı açabilir. Sürücü, bağlantıyı tanımlamak için bir WDFIOTARGET tanıtıcısı alır ve bu pinlerden okumak veya bu pinlere yazmak için bu tanıtıcıya G/Ç istekleri gönderir.
Bir dizi GPIO G/Ç pinine bağlanmayı ve bu pinlere G/Ç istekleri göndermeyi gösteren kod örnekleri için aşağıdaki konulara bakın:
GPIO G/Ç Pinlerine KMDF Sürücüsü Bağlama
Her iki konuda da kod örneğindeki işlev, IoRoutine parametre değerine bağlı olarak ReadOperation okuma veya yazma işlemleri için bir GPIO G/Ç pin kaynağı açar. Kaynak okuma (DesiredAccess = GENERIC_READ) için açılırsa, kaynaktaki pinler giriş olarak yapılandırılır ve pin kaynağına gönderilen bir IOCTL_GPIO_READ_PINS isteği bu pinlerdeki giriş değerlerini okur. GpioClx, bir IOCTL_GPIO_WRITE_PINS isteğinin bir dizi giriş pini gönderilmesine izin vermez ve bu tür bir isteği STATUS_GPIO_OPERATION_DENIED hata durumuyla tamamlar. Benzer şekilde, pin kaynağı yazma işlemleriDesiredAccess ( = GENERIC_WRITE) için açılırsa, kaynaktaki pinler çıkış olarak yapılandırılır ve pin kaynağına gönderilen bir IOCTL_GPIO_WRITE_PINS isteği bu pinleri yönlendiren çıkış mandallarındaki değerleri ayarlar. Genellikle, bir IOCTL_GPIO_READ_PINS isteğini bir dizi çıkış pinine göndermek, yalnızca çıkış mandallarına yazılan son değerleri okur.
Kesmeleri almak için bir kesme kaynağı kullanmak amacıyla, istemci sürücünün kesintiye bir kesme hizmeti yordamı (ISR) bağlaması gerekir. Genellikle, sürücü WdfInterruptCreate yöntemini (veya muhtemelen IoConnectInterruptEx yordamını) çağırarak bu bağlantıyı yapar. KMDF kesmeleri hakkında daha fazla bilgi için bkz. Kesme Nesnesi Oluşturma.
Donanım platformuna dinamik olarak bağlanabilen ve bağlantısı kesilebilen Tak Çalıştır cihazlarının aksine, GPIO denetleyici cihazı kalıcı olarak bağlanır. Ayrıca, GPIO pinleri ile çevre birimi cihazı arasındaki bağlantıların kalıcı olduğu varsayılır. (Ya da periferal cihaz yuvasından çıkarılabilirse, yuva bu cihaza ayrılmıştır.) Bu nedenle, mevcut GPIO kaynakları sabittir ve platform yazılımında belirtilebilir. Benzer şekilde, GPIO kaynaklarını kullanan çevre birimi cihaz sürücülerinin ayrılmış GPIO kaynakları kümeleri kullandığı varsayılır. Bu nedenle, bu cihaz sürücüleri için kaynak gereksinimleri platform üretici yazılımında belirtilebilir.
Platform üretici yazılımı GPIO G/Ç kaynağı olarak bir dizi GPIO pini belirlediğinde, üretici yazılımı bu kaynağın içindeki pinlerin okuma, yazma veya her iki işlem için açılıp açılamayacağını gösterir.
Bir çevre birimi cihaz sürücüsü birden fazla GPIO G/Ç kaynağı kullanıyorsa, bu sürücü bu kaynakların PnP yöneticisi tarafından numaralandırılma sırasının farkında olmalıdır. Örneğin, bir sürücü iki GPIO G/Ç pini kullanıyorsa, ancak bu pinlere bağımsız olarak ve ayrı zamanlarda erişilmesi gerekiyorsa, platform üretici yazılımı her bir pini ayrı bir GPIO G/Ç kaynağı olarak tanımlamalıdır. PnP yöneticisi, bu kaynakları platform üretici yazılımında tanımlandığı sırayla, sürücünün beklediği sırayla eşleşmesi gereken bir şekilde numaralandırır.
Çevre birimi cihaz sürücüsü bir GPIO G/Ç kaynağına bağlantı açtıktan sonra, bu sürücünün bu bağlantıya gönderdiği bir IOCTL_GPIO_READ_PINS veya IOCTL_GPIO_WRITE_PINS isteği kaynaktaki tüm pinlere erişir. Sürücünün bazen bu pinlerin yalnızca bir alt kümesine erişmesi gerekiyorsa bu alt küme, sürücüye farklı bir kaynak olarak atanmalıdır.
veri girişi pinlerinin istek çıkış arabelleğindeki bitlere eşlenmiş olması da dahil olmak üzere IOCTL_GPIO_READ_PINS istekleri hakkında daha fazla bilgi için bkz. IOCTL_GPIO_READ_PINS. İstek giriş arabelleğindeki bitlerin veri çıktı pinlerine eşlemesi de dahil olmak üzere IOCTL_GPIO_WRITE_PINS istekleri hakkında daha fazla bilgi için bkz. IOCTL_GPIO_WRITE_PINS.