Linux-Kernel

驅動 gpio_keys 類型的按鈕

  • August 27, 2016

我對驅動程序 gpio_keys 感到困惑。此驅動程序區分兩種類型的按鈕:

僅 IRQ 按鈕和 GPIO 驅動按鈕

誰能解釋一個和另一個之間的區別?

免責聲明:我沒有閱讀最新的gpio_keys程式碼,只是略讀了一下。然而,我相信 GPIO 密鑰與 IRQ 的分離有一個很好的解釋。

核心有一個 IRQ 事件表,因此可以將不同的事件分配給已知的 IRQ。事件列表(回調,實際上是指針)被寫入 PIC(單獨的晶片或集成在 CPU 中),當給定的中斷發生時,執行上下文進入事件函式。這些函式需要很小,因此不會在中斷中浪費太多時間。

但這裡真正重要的是(除非 CPU 被指示暫時忽略中斷)核心將響應每個中斷。

對於響應式應用程序,您希望連接到 GPIO 引腳的東西產生中斷(即像 IRQ)。然而,在某些應用程序中,您可能並不關心按鈕的每次點擊或連接到 GPIO 引腳的任何狀態的每次變化。一個例子可能是一個感測器,你想每隔半秒測量一次。您不希望感測器在“按下”時告訴核心您希望使用者空間應用程序每半秒戳一次核心以告訴它感測器的目前狀態。不難想像一個感測器暴露了一個看起來像按鈕的界面,幾乎任何只有兩種狀態(例如,帶有門檻值的暗/亮)的感測器都可以看起來像一個按鈕。

引用自:https://unix.stackexchange.com/questions/305905