Bagikan melalui


GpioClx I/O dan Interupsi Antarmuka

Biasanya, klien pengontrol GPIO adalah driver untuk perangkat periferal yang terhubung ke pin GPIO. Driver ini menggunakan pin GPIO sebagai saluran data bandwidth rendah, output yang dipilih perangkat, dan input permintaan interupsi. Driver perangkat periferal membuka koneksi logis ke pin GPIO yang dikonfigurasi sebagai input atau output data. Mereka menggunakan koneksi ini untuk mengirim permintaan I/O ke pin ini. Selain itu, driver perangkat periferal dapat secara logis menghubungkan rutinitas layanan interupsi mereka ke pin GPIO yang dikonfigurasi sebagai input permintaan interupsi.

Pin GPIO adalah sumber daya perangkat keras yang dikelola sistem. Sebelum driver perangkat periferal memulai perangkatnya, manajer Plug and Play (PnP) menetapkan ke driver ini daftar sumber daya perangkat keras. Daftar sumber daya perangkat keras ini mungkin mencakup yang berikut ini:

  • Sumber daya I/O GPIO. Sumber daya ini adalah sekumpulan satu atau beberapa pin GPIO yang dikonfigurasi sebagai input data atau output data. Sumber daya I/O GPIO adalah jenis sumber daya Windows baru yang dimulai dengan Windows 8.
  • Sebuah interupsi. Sumber daya interupsi ini dapat diimplementasikan sebagai pin GPIO yang dikonfigurasi sebagai input interupsi, tetapi dapat diimplementasikan sebagai pengontrol interupsi yang dapat diprogram atau sebagai pin interupsi khusus pada paket prosesor. Abstraksi gangguan lapisan abstraksi perangkat keras (HAL) menyembunyikan detail implementasi ini, yang dapat diabaikan oleh driver klien dengan aman.

Sebelum driver perangkat periferal dapat menggunakan sekumpulan pin GPIO sebagai input atau output data, driver harus membuka koneksi logis ke pin ini. Misalnya, driver antarmuka driver mode kernel (KMDF) mendapatkan handel WDFIOTARGET untuk mengidentifikasi koneksi. Driver menggunakan handel ini untuk mengirim permintaan I/O ke pin. Secara khusus, driver klien mengirim IOCTL_GPIO_WRITE_PINS dan IOCTL_GPIO_READ_PINS permintaan kontrol I/O untuk menulis data ke pin output dan membaca data dari pin input. Untuk contoh kode yang menunjukkan cara menyambungkan ke sekumpulan pin I/O GPIO, lihat topik berikut:

Menyambungkan Driver KMDF ke Pin I/O GPIO

Untuk menggunakan sumber daya interupsi untuk menerima gangguan, driver perangkat periferal harus secara logis menghubungkan rutinitas layanan interupsi (ISR) ke interupsi. Misalnya, driver mode kernel dapat membuat koneksi ini dengan memanggil metode WdfInterruptCreate atau rutinitas IoConnectInterruptEx . Setelah terhubung, ISR driver berjalan ketika perangkat periferal memberi sinyal permintaan interupsi ke pin GPIO atau input pengontrol interupsi. Untuk informasi selengkapnya tentang gangguan, lihat Membuat Objek Interupsi.

Ekstensi kerangka kerja GPIO (GpioClx) mengelola koneksi I/O dan koneksi interupsi untuk driver perangkat periferal yang merupakan kliennya. Manajer PnP mungkin menetapkan grup pin GPIO yang berbeda pada perangkat pengontrol GPIO ke driver klien yang berbeda. Beberapa pin ini dikonfigurasi sebagai input atau output data, dan beberapa dikonfigurasi sebagai input permintaan interupsi.

Ketika driver klien menerima permintaan interupsi atau mengirim permintaan I/O ke pin GPIO, GpioClx memanggil fungsi panggilan balik peristiwa yang diterapkan oleh driver pengontrol GPIO. Panggilan balik ini mengakses pendaftaran perangkat keras di perangkat pengontrol GPIO. Melalui panggilan fungsi ini, GpioClx membaca input data, menulis ke output data, dan mengelola permintaan interupsi (dengan mengkueri, mengaktifkan, menutupi, menghapus, dan sebagainya, pin GPIO yang dikonfigurasi sebagai input interupsi).

GpioClx melakukan semua pemrosesan yang diperlukan untuk mengelola I/O dan mengganggu koneksi yang dibuka oleh klien. Driver pengontrol GPIO—dengan mendelegasikan pengelolaan koneksi ini ke GpioClx—hanya bertanggung jawab atas tugas yang relatif sederhana untuk mengakses daftar perangkat keras di perangkat pengontrol GPIO. Driver pengontrol GPIO tidak perlu mengetahui driver klien tempat akses tertentu dibuat.