完成網(wǎng)站集約化建設(shè)網(wǎng)站建設(shè)項(xiàng)目需求說明書
鶴壁市浩天電氣有限公司
2026/01/24 16:13:48
完成網(wǎng)站集約化建設(shè),網(wǎng)站建設(shè)項(xiàng)目需求說明書,網(wǎng)站規(guī)劃與開發(fā),德州市建設(shè)局質(zhì)監(jiān)站網(wǎng)站目錄
目錄
前言
DTS配置的參考
GPIO按鍵中斷的DTS配置參考
GPIO按鍵輪詢的DTS配置參考
內(nèi)核配置的參考
GPIO按鍵中斷的內(nèi)核配置參考
GPIO按鍵輪詢的內(nèi)核配置參考
驗(yàn)證測試的參考
GPIO按鍵中斷的驗(yàn)證測試參考
GPIO按鍵輪詢的驗(yàn)證測試參考
總結(jié) 前言
GPIO-KEYS主要有…目錄目錄前言DTS配置的參考GPIO按鍵中斷的DTS配置參考GPIO按鍵輪詢的DTS配置參考內(nèi)核配置的參考GPIO按鍵中斷的內(nèi)核配置參考GPIO按鍵輪詢的內(nèi)核配置參考驗(yàn)證測試的參考GPIO按鍵中斷的驗(yàn)證測試參考GPIO按鍵輪詢的驗(yàn)證測試參考總結(jié)前言GPIO-KEYS主要有兩種實(shí)現(xiàn)方式GPIO按鍵中斷和GPIO按鍵輪詢。其中Linux內(nèi)核下的linux-x.xx/drivers/input/keyboard/gpio_keys.c已經(jīng)實(shí)現(xiàn)了與體系結(jié)構(gòu)無關(guān)的GPIO按鍵中斷驅(qū)動(dòng)Linux內(nèi)核下的linux-x.xx/drivers/input/keyboard/gpio_keys_polled.c已經(jīng)實(shí)現(xiàn)了與體系結(jié)構(gòu)無關(guān)的GPIO按鍵輪詢驅(qū)動(dòng)。使用GPIO-KEYS按鍵驅(qū)動(dòng)只需在設(shè)備樹gpio-keys或gpio-key-polled節(jié)點(diǎn)添加需要的按鍵子節(jié)點(diǎn)即可但主要適合于獨(dú)立式按鍵。注意Linux內(nèi)核原生的GPIO按鍵中斷驅(qū)動(dòng)只適用于支持外部中斷的GPIO,而GPIO按鍵輪詢驅(qū)動(dòng)適用于支持輸入功能的GPIO。DTS配置的參考GPIO按鍵中斷的DTS配置參考... #include ../../../../../../include/uapi/linux/input-event-codes.h /* 鍵值定義 */ ... gpio-keys { compatible gpio-keys; /* 該屬性定義了設(shè)備的兼容性 */ pinctrl-names default; pinctrl-0 pinctrl_gpio_key_up, pinctrl_gpio_key_down, pinctrl_gpio_key_left, pinctrl_gpio_key_right, pinctrl_gpio_key_esc, pinctrl_gpio_key_enter; autorepeat; /* 若需要支持連按可以添加autorepeat */ key_up { gpios gpiod 8 GPIO_ACTIVE_LOW; /* gpios表示GPIO管腳屬性。 */ lable GPIO Key Up; /* key的描述性名稱。 */ linux,input-type 1; /* input-type表示輸入事件類型1表示鍵盤或按鍵事件。 */ linux,code KEY_UP; /* code表示鍵值。 */ debounce-interval 100; /* key或button的消抖間隔時(shí)間單位ms。 */ }; key_down { gpios gpiod 9 GPIO_ACTIVE_LOW; lable GPIO Key Down; linux,input-type 1; linux,code KEY_DOWN; debounce-interval 100; }; key_left { gpios gpiod 10 GPIO_ACTIVE_LOW; lable GPIO Key Left; linux,input-type 1; linux,code KEY_LEFT; debounce-interval 100; }; key_right { gpios gpiod 11 GPIO_ACTIVE_LOW; lable GPIO Key Right; linux,input-type 1; linux,code KEY_RIGHT; debounce-interval 100; }; key_esc { gpios gpiod 12 GPIO_ACTIVE_LOW; lable GPIO Key Esc; linux,input-type 1; linux,code KEY_ESC; debounce-interval 100; }; key_enter { gpios gpiod 13 GPIO_ACTIVE_LOW; lable GPIO Key Enter; linux,input-type 1; linux,code KEY_ENTER; debounce-interval 100; }; }; pinctrl: pinctrlxxxxxxxx { pinctrl_gpio_key_up: key_up_grp { xxx,pins gpiod-8; xxx,pin-pud ENABLE_PULL_UP; }; pinctrl_gpio_key_down: key_down_grp { xxx,pins gpiod-9; xxx,pin-pud ENABLE_PULL_UP; }; pinctrl_gpio_key_left: key_left_grp { xxx,pins gpiod-10; xxx,pin-pud ENABLE_PULL_UP; }; pinctrl_gpio_key_right: key_right_grp { xxx,pins gpd-11; xxx,pin-pud ENABLE_PULL_UP; }; pinctrl_gpio_key_esc: key_esc_grp { xxx,pins gpiod-12; xxx,pin-pud ENABLE_PULL_UP; }; pinctrl_gpio_key_enter: key_enter_grp { xxx,pins gpiod-13; xxx,pin-pud ENABLE_PULL_UP; }; };GPIO按鍵輪詢的DTS配置參考... #include ../../../../../../include/uapi/linux/input-event-codes.h /* 鍵值定義 */ ... gpio-keys-polled { compatible gpio-keys-polled; /* 該屬性定義了設(shè)備的兼容性 */ poll-interval 100; /* 輪詢周期單位ms。 */ autorepeat; /* 若需要支持連按可以添加autorepeat。 */ status okay; /* 狀態(tài)屬性。 */ pol_key { label GPIO Key POL; /* key的描述性名稱。 */ linux,code KEY_ENTER; /* code表示鍵值。 */ gpios pio 0 GPIO_ACTIVE_LOW; /* gpios表示GPIO管腳屬性。 */ }; };內(nèi)核配置的參考GPIO按鍵中斷的內(nèi)核配置參考CONFIG_INPUT_KEYBOARDy CONFIG_KEYBOARD_GPIOyGPIO按鍵輪詢的內(nèi)核配置參考CONFIG_INPUT_KEYBOARDy CONFIG_KEYBOARD_GPIO_POLLEDy驗(yàn)證測試的參考GPIO按鍵中斷的驗(yàn)證測試參考1. 在系統(tǒng)內(nèi)核啟動(dòng)和驅(qū)動(dòng)加載后查看內(nèi)核中已經(jīng)注冊的INPUT設(shè)備。例如# cat /proc/bus/input/devices I: Bus0019 Vendor0001 Product0001 Version0100 N: Namegpio-keys P: Physgpio-keys/input0 S: Sysfs/devices/platform/gpio-keys/input/input4 U: Uniq H: Handlersevent4 (可以看出是設(shè)備節(jié)點(diǎn)為/dev/input/event4) B: PROP0 B: EV100003 B: KEY1680 0 0 100000022. 查看GPIO按鍵的input設(shè)備節(jié)點(diǎn)的鍵值上報(bào)情況。例如# hexdump -d /dev/input/event4 “-d”以雙字節(jié)十進(jìn)制的形式顯示。 0000000 03304 25737 26302 00005 00001 00103 00001 00000 KEY_UP按鍵按下 0000010 03304 25737 26302 00005 00000 00000 00000 00000 0000020 03304 25737 45263 00007 00001 00103 00000 00000 KEY_UP按鍵彈起 0000030 03304 25737 45263 00007 00000 00000 00000 00000 ... 0000180 03435 25737 35243 00007 00001 00108 00001 00000 KEY_DOWN按鍵按下 0000190 03435 25737 35243 00007 00000 00000 00000 00000 00001a0 03435 25737 23097 00011 00001 00108 00000 00000 KEY_DOWN按鍵彈起 00001b0 03435 25737 23097 00011 00000 00000 00000 00000 ... 0000700 03534 25737 26306 00005 00001 00105 00001 00000 KEY_LEFT按鍵按下 0000710 03534 25737 26306 00005 00000 00000 00000 00000 0000720 03534 25737 59704 00008 00001 00105 00000 00000 KEY_LEFT按鍵彈起 0000730 03534 25737 59704 00008 00000 00000 00000 00000 ... 00008a0 03593 25737 37561 00012 00001 00106 00001 00000 KEY_RIGHT按鍵按下 00008b0 03593 25737 37561 00012 00000 00000 00000 00000 00008c0 03594 25737 08459 00001 00001 00106 00000 00000 KEY_RIGHT按鍵彈起 00008d0 03594 25737 08459 00001 00000 00000 00000 00000 ... 0000a20 03726 25737 07377 00003 00001 00001 00001 00000 KEY_ESC按鍵按下 0000a30 03726 25737 07377 00003 00000 00000 00000 00000 0000a40 03726 25737 40777 00006 00001 00001 00000 00000 KEY_ESC按鍵彈起 0000a50 03726 25737 40777 00006 00000 00000 00000 00000 ... 0000a60 03770 25737 37531 00012 00001 00028 00001 00000 KEY_ENTER按鍵按下 0000a70 03770 25737 37531 00012 00000 00000 00000 00000 0000a80 03771 25737 33986 00000 00001 00028 00000 00000 KEY_ENTER按鍵彈起 0000a90 03771 25737 33986 00000 00000 00000 00000 00000GPIO按鍵輪詢的驗(yàn)證測試參考1. 在系統(tǒng)內(nèi)核啟動(dòng)和驅(qū)動(dòng)加載后查看內(nèi)核中已經(jīng)注冊的INPUT設(shè)備。例如# cat /proc/bus/input/devices ... I: Bus0019 Vendor0001 Product0001 Version0100 N: Namegpio-keys-polled P: Physgpio-keys-polled/input0 S: Sysfs/devices/platform/gpio-keys-polled/input/input1 U: Uniq H: Handlersevent1 B: PROP0 B: EV100003 B: KEY10000000 ...2. 查看GPIO按鍵輪詢的input設(shè)備節(jié)點(diǎn)的鍵值上報(bào)情況。例如# hexdump -d /dev/input/event1 “-d”以雙字節(jié)十進(jìn)制的形式顯示。 0000000 01853 25737 55244 00011 00001 00028 00001 00000 KEY_ENTER按鍵按下 0000010 01853 25737 55244 00011 00000 00000 00000 00000 0000020 01853 25737 13100 00015 00001 00028 00000 00000 KEY_ENTER按鍵彈起 0000030 01853 25737 13100 00015 00000 00000 00000 00000總結(jié)GPIO按鍵是嵌入式系統(tǒng)中常見的輸入設(shè)備用于實(shí)現(xiàn)人機(jī)交互。按鍵通過GPIO通用輸入輸出引腳檢測狀態(tài)變化但機(jī)械按鍵在按下或釋放時(shí)會(huì)產(chǎn)生電平抖動(dòng)需要通過軟硬件方法消除抖動(dòng)以確保信號(hào)穩(wěn)定。?