![](https://file1.elecfans.com/web2/M00/88/D2/wKgaomR0XpiAeqy8AAJyW4VVE6w594.jpg)
本文檔介紹了應用層如何控制 GPIO,適用于天嵌開發(fā)板TQT507 。
1.sysfs 方式控制GPIO
通過 sysfs 方式進行操控,進入到/sys/class/gpio 目錄下
![](https://file1.elecfans.com/web2/M00/88/D3/wKgZomR0XpeAfQAMAAA_ivh9gss244.png)
可以看到該目錄下包含兩個文件 export、unexport以及2個gpiochipX(X 等于 0、 352)命名的文件夾。
1.1 gpiochipX
gpiochipX:當前 SoC 所包含的 GPIO 控制器, 每一個 gpiochipX 文件夾用來管理一組 GPIO。隨便進到其中某個目錄下,可以看到這些目錄下包含了如下文件 :
![](https://file1.elecfans.com/web2/M00/88/D3/wKgZomR0XpeAFBekAAAt65BonRc624.png)
在這個目錄我們主要關注的是 base、 label、 ngpio 這三個屬性文件,這三個屬性文件均是只讀、不可寫。
base:與 gpiochipX 中的 X 相同,表示該控制器所管理的這組 GPIO 引腳中最小的編號。每一個 GPIO引腳都會有一個對應的編號, Linux 下通過這個編號來操控對應的 GPIO 引腳。
![](https://file1.elecfans.com/web2/M00/88/D2/wKgaomR0XpeAfPpyAAAqunl8_JY721.png)
label:該組 GPIO 對應的標簽,也就是名字
![](https://file1.elecfans.com/web2/M00/88/D3/wKgZomR0XpeAK0mdAAAZIG8fygw134.png)
ngpio:該控制器所管理的 GPIO 引腳的數(shù)量(所以引腳編號范圍是:base ~ base+ngpio-1)
![](https://file1.elecfans.com/web2/M00/88/D3/wKgZomR0XpiAGkaKAAAaP0spb_w719.png)
1.2 export
export:用于將指定編號的GPIO引腳導出。在使用 GPIO引腳之前,需要將其導出,導出成功之后才能使用它。注意export文件是只寫文件,不能讀取,將一個指定的編號寫入到export文件中即可將對應的 GPIO 引腳導出。
![](https://file1.elecfans.com/web2/M00/88/D3/wKgZomR0XpiAcxTBAAA89rwiC5c282.png)
導出成功之后會發(fā)現(xiàn)在/sys/class/gpio 目錄下生成了一個名為 gpio0 的文件夾(gpioX, X 表示對應的編號),如上圖所示。這個文件夾就是導出來的 GPIO 引腳對應的文件夾,用于管理、控制該 GPIO 引腳 。
1.3 unexport
unexport:將導出的 GPIO 引腳刪除。當使用完 GPIO 引腳之后,我們需要將導出的引腳刪除,同樣該文件也是只寫文件、不可讀,譬如:echo 0 > unexport ,刪除導出的編號為 0 的 GPIO 引腳。刪除成功之后,之前生成的 gpio0 文件夾就會消失!
![](https://file1.elecfans.com/web2/M00/88/D2/wKgaomR0XpiAccnMAABHKrGWZ1Q563.png)
1.4 gpioX
將指定的編號寫入到 export 文件中,可以導出指定編號的 GPIO 引腳,導出成功之后會在/sys/class/gpio目錄下生成對應的 gpioX(X表示 GPIO 的編號)文件夾,以前面所生成的 gpio0 為例,進入到 gpio0 目錄,該目錄下的文件如下所示
![](https://file1.elecfans.com/web2/M00/88/D2/wKgaomR0XpiATrl5AAAz3TfzsW8766.png)
我們主要關心的文件是 active_low、 direction、 edge 以及 value 這四個屬性文件,接下來分別介紹這四個屬性文件的作用:
direction:配置 GPIO 引腳為輸入或輸出模式,該文件可讀、可寫。
讀表示查看 GPIO 當前是輸入還是輸出模式;
寫表示將 GPIO 配置為輸入或輸出模式;
讀取或寫入操作可取的值為"out"(輸出模式)和"in"(輸入模式),如下所示
![](https://file1.elecfans.com/web2/M00/88/D2/wKgaomR0XpiAM-WrAABCXQhHv2I423.png)
value:在 GPIO 配置為
輸出模式下,向 value 文件寫入"0"控制 GPIO 引腳輸出低電平,寫入"1"則控制 GPIO 引腳輸出高電平;
在輸入模式下,讀取 value 文件獲取 GPIO 引腳當前的輸入電平狀態(tài)。
譬如:
獲取 GPIO 引腳的輸入電平狀態(tài)
![](https://file1.elecfans.com/web2/M00/88/D2/wKgaomR0XpiAM-WrAABCXQhHv2I423.png)
控制 GPIO 引腳輸出高電平
![](https://file1.elecfans.com/web2/M00/88/D3/wKgZomR0XpmACccBAAA_1VC7dI8302.png)
active_low:這個屬性文件用于控制極性, 可讀可寫,默認情況下為 0
# active_low 等于 0 時
edge:控制中斷的觸發(fā)模式,該文件可讀可寫。在配置 GPIO 引腳的中斷觸發(fā)模式之前,需將其設置為輸入模式:
非中斷引腳:echo "none" > edge 上升沿觸發(fā):echo "rising" > edge 下降沿觸發(fā):echo "falling" > edge 邊沿觸發(fā):echo "both" > edge
1.5 GPIO對應引腳計算方法
全志的GPIO號在 sunxi-gpio.h 中定義
#define SUNXI_BANK_SIZE 32
計算方式--舉兩個例子
a、PA13
PA 是從0開始定義的,那么就是:0 +13 = 13,那么 PA13 的GPIO號 就是 GPIO13
b、PE10
PE 是從128開始定義的,那么就是:128 + 10 = 138,那么 PE10 的GPIO號 就是 GPIO138
2.利用 sunxi_pinctrl 的 debug 節(jié)點
掛載文件節(jié)點,并進入相應目錄:
mount -t debugfs none /sys/kernel/debug cd /sys/kernel/debug/sunxi_pinctrl
2.1查看 pin 的配置
echo PC2 > sunxi_pin cat sunxi_pin_configure
![](https://file1.elecfans.com/web2/M00/88/D3/wKgZomR0XpmAIajMAABT0j1p3M0452.png)
2.2修改 pin 屬性
每個 pin 都有四種屬性,如復用 (function),數(shù)據(jù) (data),驅動能力 (dlevel),上下拉 (pull),
修改 pin 屬性的命令如下:
echo PC2 1 > pull cat sunxi_pin_configure //查看修改情況
-
開發(fā)板
+關注
關注
25文章
5121瀏覽量
98218 -
GPIO
+關注
關注
16文章
1216瀏覽量
52391
發(fā)布評論請先 登錄
相關推薦
dsPIC33C Touch-CAN-LIN Curiosity開發(fā)板用戶指南
![dsPIC33C Touch-CAN-LIN Curiosity<b class='flag-5'>開發(fā)板</b>用戶<b class='flag-5'>指南</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
dsPIC33EDV64MC205電機控制開發(fā)板用戶指南
![dsPIC33EDV64MC205電機<b class='flag-5'>控制</b><b class='flag-5'>開發(fā)板</b>用戶<b class='flag-5'>指南</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Tiva TM4C123G開發(fā)板用戶指南
![Tiva TM4C123G<b class='flag-5'>開發(fā)板</b>用戶<b class='flag-5'>指南</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
正點原子fpga開發(fā)板不同型號
i.MX Linux開發(fā)實戰(zhàn)指南—基于野火i.MX系列開發(fā)板
【北京迅為】《stm32mp157開發(fā)板嵌入式linux開發(fā)指南》第五章 Ubuntu使用apt-get下載
![【北京迅為】《stm32mp157<b class='flag-5'>開發(fā)板</b>嵌入式linux<b class='flag-5'>開發(fā)指南</b>》第五章 Ubuntu使用apt-get下載](https://file1.elecfans.com/web2/M00/06/05/wKgaombWyEWAX1AjAADRSNKv2wo643.png)
linux開發(fā)板與樹莓派的區(qū)別
米爾NXP i.MX 93開發(fā)板的Qt開發(fā)指南
![米爾NXP i.MX 93<b class='flag-5'>開發(fā)板</b>的Qt<b class='flag-5'>開發(fā)指南</b>](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
實測14us,Linux-RT實時性能及開發(fā)案例分享—基于全志T507-H國產(chǎn)平臺
![實測14us,Linux-RT實時性能及<b class='flag-5'>開發(fā)</b>案例分享—基于全志T<b class='flag-5'>507</b>-H國產(chǎn)平臺](https://file1.elecfans.com/web2/M00/CD/1D/wKgaomYgeGSAbSXsAADEJ4pJ-Fc297.png)
評論