日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux之GPIO的使用

發布時間:2024/9/3 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux之GPIO的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

S3C6410GPIO引腳相對來說比較多,而且大部分引腳都具有多重復用功能,如何在linux上用最簡單的方式來控制GPIO這需要我們好好研究一下底層的代碼了,其實方法有很多種,鑒于在操作系統端控制GPIO并不像控制傳統的單片機那樣。

這里我將提及一種方法來講述,這種方法也是我至今看到最簡單的方法

首先我們打開linux-3.0.1\arch\arm\plat-samsung\include\platgpio-cfg.h這個頭文件,仔細瀏覽后發現,我們可以使用的函數:

1.設置單一io

int?s3c_gpio_cfgpin(unsigned?int?pin,?unsigned?int?to);

里面有兩個參數,第一個pin是選擇哪個引腳,第二個參數有三種定義

設置成輸出模式? #define?S3C_GPIO_INPUT (S3C_GPIO_SPECIAL(0))

設置成輸入模式? #define?S3C_GPIO_OUTPUT (S3C_GPIO_SPECIAL(1))

復用功能選擇??? #define?S3C_GPIO_SFN(x) (S3C_GPIO_SPECIAL(x))

其實根據我使用的情況來說第1,2兩個定義根本就是雞肋,只有第3個S3C_GPIO_SFN(x)才是最有用的,舉個例子:

Ok6410的開發板的DS18B20的接口,器件被接在GPE0上,而GPE有如下復用功能

其中的參數x就是對應上表的復用功能,當x=0時是輸入功能,x=1時是輸出功能......下面我想不用我說大家也明白了吧。

這個例子s3c_gpio_cfgpin(S3C64XX_GPE(0),?S3C_GPIO_SFN(1));說明GPE0口配置為輸出模式。

1.獲取io口的配置
unsigned?s3c_gpio_getcfg(unsigned?int?pin);這個函數跟上面講到的剛好相反,是讀取當前一個io口的配置,pin參數是要獲得的引腳配置,函數會返回一個相應的值

2.設置一組io
int?s3c_gpio_cfgpin_range(unsigned?int?start,?unsigned?int?nr,?unsigned?int?cfg);?

第一個參數start是開始的引腳,第二個nr是從start開始到第一個,注意配置的io必須是同一組的io,第三個cfg是配置狀態

3.設置單一io的上拉電阻

int?s3c_gpio_setpull(unsigned?int?pin,?s3c_gpio_pull_t?pull);?

設置單個io為不同的上拉模式,模式分別為

S3C_GPIO_PULL_NONE

S3C_GPIO_PULL_DOWN

S3C_GPIO_PULL_UP


5.獲取io口的上拉電阻配置

s3c_gpio_pull_t?s3c_gpio_getpull(unsigned?int?pin);

獲取單個io的上拉配置狀態,會返回一個配置模式


6.設置一組io(包括上拉電阻)

int?s3c_gpio_cfgall_range(unsigned?int?start,?unsigned?int?nr,?unsigned?int?cfg,?s3c_gpio_pull_t?pull);

講了這么多看到最后一個函數不講也應該能看出到底是如何配置了吧

講了這么多io口的配置方法,來看看如何來配置輸出的電平狀態。

打開linux-3.0.1\include\linux下的gpio.h的頭文件,發現里面有好多的引腳函數其中最重要的也就這么幾句

1.設置一個引腳的電平狀態

static?inline?void?gpio_set_value(unsigned?gpio,?int?value)

第一個參數gpio為指定的引腳,第二個參數value為要設置的高低電平

2.獲得一個引腳的電平狀態

static?inline?int?gpio_get_value(unsigned?gpio)

第一個參數為gpio為指定的引腳,會返回一個電平狀態

講了上面這些我們基本能控制一個io了,現在我在介紹一種方法,這種方法只能進行輸入和輸出不能進行io的復用配置

1.io輸出

static?inline?int?gpio_direction_output(unsigned?gpio,?int?value)

第一個參數gpio為指定的引腳,第二個參數為電平狀態

2.io輸入

static?inline?int?gpio_direction_input(unsigned?gpio)

第一個參數gpio為指定的引腳,會返回一個電平狀態

出了上面方法外我們還可以直接對gpio的地址訪問,linux已經為我們準備了這樣的接口函數

#define?__raw_readl(a)?(__chk_io_ptr(a),?*(volatile?unsigned?int?__force?*)(a))
#define?__raw_writel(v,a)?(__chk_io_ptr(a),?*(volatile?unsigned?int?__force?*)(a)?=?(v))
其中的a值為
S3C64XX_GPMCON

S3C64XX_GPMPUD

S3C64XX_GPMDAT

在reg-gpio.h中已經有了以上的定義

V為具體的數值。

總結

以上是生活随笔為你收集整理的linux之GPIO的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。