1. 程式人生 > >linux應用開發:使用者空間如何通過sysfs控制GPIO

linux應用開發:使用者空間如何通過sysfs控制GPIO

開發環境Ubuntu:14.04開發板:A33-Vstar開發板系統:linux-3.4.39-----------------------------------------------------1. 啟用GPIO sysfs interface首先看系統中有沒有“/sys/class/gpio”這個資料夾。如果沒有在編譯核心的時候開啟 Device Drivers-> GPIO Support-> /sys/class/gpio/… (sysfs interface)2. 計算GPIO引腳編號開啟linux-3.4/arch/arm/mach-sunxi/include/mach/gpio.h可以看到如下定義:
#define SUNXI_PA_BASE 0#define SUNXI_PB_BASE 32#define SUNXI_PC_BASE 64#define SUNXI_PD_BASE 96#define SUNXI_PE_BASE 128#define SUNXI_PF_BASE 160#define SUNXI_PG_BASE 192#define SUNXI_PH_BASE 224#define SUNXI_PI_BASE 256#define SUNXI_PJ_BASE 288#define SUNXI_PK_BASE 320#define SUNXI_PL_BASE 352#define SUNXI_PM_BASE 384#define SUNXI_PN_BASE 416規律:
GPIOn_x的編號為32*n+x,例如此處用的GPIO1_6的編號為32*1+6=38。例如,我們想操作GPIO_PH7引腳,編號為:SUNXI_PH_BASE+引腳編號,即:224+7=231注:也可以用以下方式取得GPIO編號資訊,在終端中敲入以下命令:$ cd /sys/class/gpio  $ for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done  但是A33不支援。3. GPIO控制測試1)echo 231 > /sys/class/gpio/export執行此命令會在gpio/下生成gpio231目錄2)echo out > gpio231/direction
設定GPIO_PH7方向為輸出3)控制echo 1 > gpio231/value設定GPIO_PH7為高電平echo 0 > gpio231/value設定GPIO_PH7為低電平4)關閉控制echo 231 > /sys/class/gpio/unexport4. 說明1)/sys/class/gpio/export檔案用於通知系統需要匯出控制的GPIO引腳編號2)/sys/class/gpio/unexport 用於通知系統取消匯出3)/sys/class/gpio/gpiochipX目錄儲存系統中GPIO暫存器的資訊,包括每個暫存器控制引腳的起始編號base,暫存器名稱,引腳總數。4)向/sys/class/gpio/export寫入編號,比如12號引腳,echo 12 > /sys/class/gpio/export,命令成功後生成/sys/class/gpio/gpio12目錄,如果沒有出現相應的目錄,說明此引腳不可匯出。5)gpio231/下檔案說明        direction 這個檔案是控制你是輸出還是輸入模式
                如果想設定為輸入:echo in > direction
                如果想設定為輸出:echo out > direction
        value 這個檔案是在輸出模式時,控制高低電平
                高電平:echo 1 > value
                低電平:echo 0 > value
        edge 這個控制中斷觸發模式
                無: echo none > edge
                上升沿觸發:echo rising > edge
                下降沿觸發:echo falling > edge
                輪詢:echo both > edge
        active_low: 這個按照官方的說法是這個翻轉電平,輸入非零的數即上升沿變為下降沿。
                o: echo 0 > active_low
                非零的數: echo 3 > active_low5. 使用者空間程式設計控制#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#define GPIO_PH7 231int main(void){ FILE *p=NULL; int i=0; p = fopen("/sys/class/gpio/export","w"); fprintf(p,"%d", GPIO_PH7); fclose(p); p = fopen("/sys/class/gpio/gpio231/direction","w"); fprintf(p,"out"); fclose(p); printf("running.\n\n"); for(i=0; i<50; i++) { printf("gpio_ph7 value is 1.\n"); p = fopen("/sys/class/gpio/gpio231/value","w"); fprintf(p,"%d",1); sleep(1); fclose(p); printf("gpio_ph7 value is 0.\n"); p = fopen("/sys/class/gpio/gpio231/value","w"); fprintf(p,"%d",0); sleep(1); fclose(p); } p = fopen("/sys/class/gpio/unexport","w"); fprintf(p,"%d", GPIO_PH7); fclose(p); return 0;}

相關推薦

linux應用開發使用者空間如何通過sysfs控制GPIO

開發環境Ubuntu:14.04開發板:A33-Vstar開發板系統:linux-3.4.39-----------------------------------------------------1. 啟用GPIO sysfs interface首先看系統中有沒有“/sy

【2017-06-20】Linux應用開發工程師C/C++面試問題之一Linux多線程程序的同步問題

依次 其它 如果 開發工程師 logs 特殊 另一個 特殊情況 發生 參考之一:Linux 線程同步的三種方法 鏈接地址:http://www.cnblogs.com/eleclsc/p/5838790.html 簡要回答: Linux下線程同步最常用的三種方法就是互斥鎖、

【2017-07-01】Linux應用開發工程師面試問題記錄之二關於結構體的大小及內存對齊問題

偶數 而且 strong span net 但是 開發 f11 flag Tencent後臺服務器開發有一道題是計算一個結構體的sizeof的大小: struct strData { int m_Int; char m_Char; short m_Short; char

linux驅動開發用戶空間操作LCD顯示簡單的圖片【轉】

res fin blue var chang uil print views statistic 轉自:http://blog.csdn.net/changliang7731/article/details/53074616 上一章我們簡單介紹了LCD的一些基本原

Android應用開發網絡工具——Volley(二)

respond sid 開發 多少 called creat miss 相等 eal 引言 在Android應用開發:網絡工具——Volley(一)中結合Cloudant服務介紹了Volley的一般使用方法,當中包括了兩種請求類型StringRequest和JsonOb

Android應用開發網絡工具——Volley(一)

要求 com 庫文件 urn welcom 順序 之前 air tin 引言 網絡一直是我個人的盲點,前一陣子抽空學習了一下Volley網絡工具的用法,也透過源代碼進行了進一步的學習,有一些心得想分享出來。在Android開發中,成熟的網絡工具不少,And

Linux應用開發自學之路

回來 高並發 做了 人員 marvel 匯編 物聯網 原理 書籍 前言 在 「關於我 」那篇博文裏,朋友們應該知道了我不是科班出身,是由機械強行轉行到Linux應用開發方向。下面我就詳細向大家介紹自己這一路上的轉行歷程,希望對大家有所啟發。 我是學機械專業的,對於機械專業我

嵌入式Linux應用開發完全手冊(二)GPIO

5 GPIO介面 5.1 GPIO硬體介面介紹 GPIO General Purpose I/O Port,通用輸入、輸出埠。簡單說就是這個埠可以配成輸入的(讀電平訊號),也可以配成輸出的(設定電平訊號) 無論是輸入還是輸出都是通過暫存器來實現的

嵌入式Linux應用開發完全手冊(一)嵌入式Linux基礎知識

嵌入式Linux應用開發完全手冊 3 嵌入式Linux基礎知識 3.1 交叉編譯工具 編譯工具鏈,編譯工作由幾個步驟完成,分別用到了不同的工具 PC端應用 gcc ld objcopy

嵌入式Linux應用開發完全手冊(四)UART

11. 通用非同步收發器 UART 11.1 UART原理,部件使用方法 11.1.1UART原理 UART是Universal Asynchronous Receiver Transmitter的縮寫,即通用非同步收發器 UART用來傳輸序列資料: - 傳送時,CPU將

嵌入式Linux應用開發完全手冊(三)中斷

9 中斷體系結構 9.1 ARM中斷體系 ARM CPU工作模式和狀態 工作模式,7種,1種使用者模式,其他6選中特權模式 usr 使用者模式,ARM處理器正常的工作模式 fiq 快速中斷模式,高速資料傳輸或者通道處理 irq

嵌入式linux應用開發完全手冊(二) 第六章 儲存控制器

第二篇 ARM9 嵌入式系統基礎例項篇 第五章 GPIO介面 5.1 GPIO硬體介紹 GPIO(General Purpose I/O Ports)意思為通用輸入/輸出埠,通俗的說,就是一些引腳,可以通過它們輸出高低電平或者通過它們讀入引腳的狀態——是高電平還是低電平。 5.1.1 通

嵌入式linux應用開發完全手冊(一)

第一篇 嵌入式Linux開發環境構建 1.1.2 嵌入式發展 SCM(Single Chip Microcomputer)微控制器; MCU(Micro Controller Unit)微控制器; SoC(System on a Chip):系統級晶片,在一個晶片上由於廣泛使用

「 非著名技術人 」良許,Linux應用開發自學之路

小編導讀 良許,是小ken的一個好哥們,線下面基已確認過眼神,是個很靠譜的人。目前在廣州一家世界500強公司就職,是一名Linux應用開發工程師。良許在大學所學專業與IT毫不相干——專業是機械,無意間接觸到嵌入式,於是深深被程式設計工作所吸引,從0開始自學程式設計,一年後被世界500

嵌入式Linux應用開發學習記錄(程式設計基礎)

C/C++檔案 ->可執行檔案需4步: 1.預處理:處理include、巨集定義、條件編譯,輸出 .i 檔案 2.編譯:把C翻譯成彙編 3.彙編:彙編翻譯成機器程式碼(OBJ檔案) 4.連線:將上面生成的OBJ和庫的OBJ連線,生產可執行檔案 編譯和執行:

米爾i.MX6UL開發Linux應用開發(三)

硬體:米爾i.MX6UL開發板MYD-Y6ULX 簡介:MYD-Y6ULX開發板(i.MX6UL開發板)由MYC-Y6ULX核心板和底板組成,基於NXP i.MX6UL處理器或i.MX6ULL處理器可選,MYD-Y6ULX開發板(i.MX6ULL開發板)提供豐富

《微信公眾平臺應用開發方法、技巧與案例》下載

2018年11月01日 20:43:25 qq_43580036 閱讀數:2 標籤: 程式設計 資料

iOS定位服務與地圖應用開發高德地圖開發

2014-07-09 之前工作在一家智慧裝置的公司,做過一個親友定位監控系統,類似現在比較流行的360兒童手環。所以這裡簡單介紹定位與地圖。 1 定位服務 iOS裝置提供三種不同定位途徑,蜂窩式行動電話基站定位;WiFi定位,通過查詢一個WiFi路由器的地理位置資訊,比較省電;GPS

嵌入式Linux應用開發① | 嵌入式LInux介紹及開發環境搭建

1.嵌入式Linux 嵌入式Linux是對執行在嵌入式裝置上的Linux的統稱,它們都是經過高度裁剪、具備特定功能的嵌入式Linux作業系統。 嵌入式裝置效能、資源有限,所以不能將標準的Linux應用到嵌入式和裝置上,所以對標準的Linux進行核心裁剪,針對某一個特定的功能進行完善,就可

Android應用開發CardView的使用及相容

引言 在Google I/O 2014上,Google公佈了Android L Preview版本,此版本的UI有了非常大的改變,很炫很給力!同時,Google也給出了兩個可以向下相容的控制元件放到了V7包中,分別是RecyclerView和CardView,這篇博文就說