
本文檔介紹了應(yīng)用層如何控制 GPIO,適用于天嵌開發(fā)板TQT507 。
1.sysfs 方式控制GPIO
通過 sysfs 方式進(jìn)行操控,進(jìn)入到/sys/class/gpio 目錄下

可以看到該目錄下包含兩個(gè)文件 export、unexport以及2個(gè)gpiochipX(X 等于 0、 352)命名的文件夾。
1.1 gpiochipX
gpiochipX:當(dāng)前 SoC 所包含的 GPIO 控制器, 每一個(gè) gpiochipX 文件夾用來(lái)管理一組 GPIO。隨便進(jìn)到其中某個(gè)目錄下,可以看到這些目錄下包含了如下文件 :

在這個(gè)目錄我們主要關(guān)注的是 base、 label、 ngpio 這三個(gè)屬性文件,這三個(gè)屬性文件均是只讀、不可寫。
base:與 gpiochipX 中的 X 相同,表示該控制器所管理的這組 GPIO 引腳中最小的編號(hào)。每一個(gè) GPIO引腳都會(huì)有一個(gè)對(duì)應(yīng)的編號(hào), Linux 下通過這個(gè)編號(hào)來(lái)操控對(duì)應(yīng)的 GPIO 引腳。

label:該組 GPIO 對(duì)應(yīng)的標(biāo)簽,也就是名字

ngpio:該控制器所管理的 GPIO 引腳的數(shù)量(所以引腳編號(hào)范圍是:base ~ base+ngpio-1)

1.2 export
export:用于將指定編號(hào)的GPIO引腳導(dǎo)出。在使用 GPIO引腳之前,需要將其導(dǎo)出,導(dǎo)出成功之后才能使用它。注意export文件是只寫文件,不能讀取,將一個(gè)指定的編號(hào)寫入到export文件中即可將對(duì)應(yīng)的 GPIO 引腳導(dǎo)出。

導(dǎo)出成功之后會(huì)發(fā)現(xiàn)在/sys/class/gpio 目錄下生成了一個(gè)名為 gpio0 的文件夾(gpioX, X 表示對(duì)應(yīng)的編號(hào)),如上圖所示。這個(gè)文件夾就是導(dǎo)出來(lái)的 GPIO 引腳對(duì)應(yīng)的文件夾,用于管理、控制該 GPIO 引腳 。
1.3 unexport
unexport:將導(dǎo)出的 GPIO 引腳刪除。當(dāng)使用完 GPIO 引腳之后,我們需要將導(dǎo)出的引腳刪除,同樣該文件也是只寫文件、不可讀,譬如:echo 0 > unexport ,刪除導(dǎo)出的編號(hào)為 0 的 GPIO 引腳。刪除成功之后,之前生成的 gpio0 文件夾就會(huì)消失!

1.4 gpioX
將指定的編號(hào)寫入到 export 文件中,可以導(dǎo)出指定編號(hào)的 GPIO 引腳,導(dǎo)出成功之后會(huì)在/sys/class/gpio目錄下生成對(duì)應(yīng)的 gpioX(X表示 GPIO 的編號(hào))文件夾,以前面所生成的 gpio0 為例,進(jìn)入到 gpio0 目錄,該目錄下的文件如下所示

我們主要關(guān)心的文件是 active_low、 direction、 edge 以及 value 這四個(gè)屬性文件,接下來(lái)分別介紹這四個(gè)屬性文件的作用:
direction:配置 GPIO 引腳為輸入或輸出模式,該文件可讀、可寫。
讀表示查看 GPIO 當(dāng)前是輸入還是輸出模式;
寫表示將 GPIO 配置為輸入或輸出模式;
讀取或?qū)懭氩僮骺扇〉闹禐?out"(輸出模式)和"in"(輸入模式),如下所示

value:在 GPIO 配置為
輸出模式下,向 value 文件寫入"0"控制 GPIO 引腳輸出低電平,寫入"1"則控制 GPIO 引腳輸出高電平;
在輸入模式下,讀取 value 文件獲取 GPIO 引腳當(dāng)前的輸入電平狀態(tài)。
譬如:
獲取 GPIO 引腳的輸入電平狀態(tài)

控制 GPIO 引腳輸出高電平

active_low:這個(gè)屬性文件用于控制極性, 可讀可寫,默認(rèn)情況下為 0
# active_low 等于 0 時(shí)
edge:控制中斷的觸發(fā)模式,該文件可讀可寫。在配置 GPIO 引腳的中斷觸發(fā)模式之前,需將其設(shè)置為輸入模式:
非中斷引腳:echo "none" > edge 上升沿觸發(fā):echo "rising" > edge 下降沿觸發(fā):echo "falling" > edge 邊沿觸發(fā):echo "both" > edge
1.5 GPIO對(duì)應(yīng)引腳計(jì)算方法
全志的GPIO號(hào)在 sunxi-gpio.h 中定義
#define SUNXI_BANK_SIZE 32
計(jì)算方式--舉兩個(gè)例子
a、PA13
PA 是從0開始定義的,那么就是:0 +13 = 13,那么 PA13 的GPIO號(hào) 就是 GPIO13
b、PE10
PE 是從128開始定義的,那么就是:128 + 10 = 138,那么 PE10 的GPIO號(hào) 就是 GPIO138
2.利用 sunxi_pinctrl 的 debug 節(jié)點(diǎn)
掛載文件節(jié)點(diǎn),并進(jìn)入相應(yīng)目錄:
mount -t debugfs none /sys/kernel/debug cd /sys/kernel/debug/sunxi_pinctrl
2.1查看 pin 的配置
echo PC2 > sunxi_pin cat sunxi_pin_configure

2.2修改 pin 屬性
每個(gè) pin 都有四種屬性,如復(fù)用 (function),數(shù)據(jù) (data),驅(qū)動(dòng)能力 (dlevel),上下拉 (pull),
修改 pin 屬性的命令如下:
echo PC2 1 > pull cat sunxi_pin_configure //查看修改情況
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
5990瀏覽量
109975 -
GPIO
+關(guān)注
關(guān)注
16文章
1299瀏覽量
55250
發(fā)布評(píng)論請(qǐng)先 登錄
Comake D1 開發(fā)板 快速開始

CW32L011電機(jī)驅(qū)動(dòng)電機(jī)控制開發(fā)板-硬件1

中微愛芯32位MCU開發(fā)板AiP32RV15X介紹

迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗(yàn)

迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)三級(jí)節(jié)點(diǎn)操作函數(shù)實(shí)驗(yàn)

第二章 開發(fā)板與芯片介紹 詳解W55MH32芯片及開發(fā)板

基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷

基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO外設(shè)

STM32開發(fā)板教程之STM32開發(fā)指南免費(fèi)下載
迅為RK3568開發(fā)板驅(qū)動(dòng)指南Linux中通用SPI設(shè)備驅(qū)動(dòng)

dsPIC33C Touch-CAN-LIN Curiosity開發(fā)板用戶指南

四開關(guān)降壓-升壓開發(fā)板用戶指南

dsPIC33EDV64MC205電機(jī)控制開發(fā)板用戶指南

評(píng)論