第一天寫部落格,先從工作最簡單、最基礎的寫起,希望在未來的時光裡,對有緣看見這篇文章的你和不斷成長的自己又一些幫助吧。
一、概述
GPIO中斷時linux驅動開發最基礎,最簡單驅動。可以在核心驅動中設定使用GPIO,也可以在應用層模拟使用,檢視GPIO的使用情況,為在驅動中使用某個引腳做測試。核心已經有一套完整的GPIO的驅動了,隻要會調用各個接口去使用起來就行了。核心将GPIO是以可用的接口由0~MAX_INT的整數編号。可以實作GPIO的各個功能:普通引腳、中斷、模拟各個協定等。
二、GPIO核心驅動使用
1、GPIO的引腳編号規則(由原理圖找相應的晶片規格書,找到功能引腳對應的GPIO引腳)
GPIO1 【4】 = (1 - 1)*32 + 4 = 4
GPIO6 【11】 = (11 - 1)*32 + 11 = 171
*注:公司用的imx6系列晶片
由底闆原理圖:pcpu6_v02_sf-20180604.pdf 6UL_IIC1_SCL(1)
找核心闆原理圖:FETIMX6UL_V1.1_p.pdf UART4_TXD(2) UART4_TX_DATA(3)
找參考手冊:IMX6UL參考手冊(RM)_201604.pdf UART4_TX_DATA(4) ***GPIO1 【28】***
2、普通引腳使用
#define PS2_DATA_PIN 171
1)、注冊GPIO
gpio_request(PS2_DATA_PIN,"ps2-data");
2)、設定方向
gpio_direction_input(PS2_DATA_PIN);
gpio_direction_output(PS2_DATA_PIN,1);
3)、擷取和設定GPIO值
gpio_get_value(PS2_DATA_PIN);
gpio_set_value(PS2_DATA_PIN,1);
3、GPIO 中斷使用
1)、設定為中斷
int irq_num1 = 0;
irq_num1 = gpio_to_irq(PS2_DATA_PIN); //傳回中斷編号,是request_irq(),free_irq()的參數
2)、注冊中斷
err = request_irq(irq_num1,irq_fuction,IRQF_TRIGGER_FALLING,"tiny4412_key1",dev);
實作irq_fuction()中斷處理函數,完成中斷,中斷不易處理太耗時的工作,但是調用一下其他函數,或者置個标志位,在其他函數裡處理還是可以的。
三、GPIO 使用者空間使用
在應用層配置GPIO,測試GPIO能不能用,輸出控制都可以實作,在linux系統跑起來後,在檔案系統裡執行
1、進入GPIO配置主目錄
cd /sys/class/gpio
申請一個gpio引腳,引腳号同上,成功會在目前目錄生成一個該gpio的目錄,失敗則提示buzy
echo 43 > ./export
進入gpio目錄,對其進行配置和控制
cd gpio43
将引腳配置為輸出模式
echo "out" > ./direction
控制引腳輸出1、0
echo 1 > ./value
echo 0 > ./value
2、中斷的設定
沒寫這個,使用者空間沒有用到,想想可能很少用到,就沒寫,用到的時候再看他人的部落格!
四、學以緻用
我項目中用GPIO模拟PS2鍵盤驅動,涉及GPIO的普通用法和中斷用法,有興趣的可以看一下
第一篇博文就寫到這裡,新的開始,一點一滴記錄自己的成長過程!
贈語:書山有路勤為徑
學海無涯苦做舟