久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > Linux學習 > linux入門 > 嵌入式linux下GPIO驅動程序操(cao)作方法(還有實(shi)例)

嵌入式linux下(xia)GPIO驅動程(cheng)序操作方法(還有實例) 時間:2018-08-10      來源:未知

嵌(qian)入(ru)式linux下GPIO驅動(dong)程(cheng)序,這(zhe)是(shi)在(zai)嵌(qian)入(ru)式設備中(zhong)最基本的操作,也是(shi)菜(cai)鳥進階必經之路,,今(jin)天(tian)我們就用各(ge)個(ge)實例來(lai)讓你深(shen)刻的了解GPIO驅動(dong)程(cheng)序,這(zhe)都(dou)是(shi)我自己親(qin)手做過的,可以(yi)慢慢來(lai)理解。

首先我們(men)在看驅動(dong)程序的代碼之前(qian),先要知道庫(ku)函數:

內核GPIO庫函(han)數(shu):

int gpio_request(unsigned gpio,const char *label)//申(shen)請GPIO資源(yuan)

參數gpio表示GPIO所對應的編號,由于(yu)在(zai)平臺代碼中(zhong),已經將CPU所有的GPIO進行(xing)統一的規劃和編號

參數(shu)*label表示標簽

因為gpio在內(nei)核中,就和內(nei)存一(yi)樣,所(suo)以(yi)你(ni)需要(yao)的就是申(shen)請

當返回的值小(xiao)于(yu)(yu)0的話,那么(me)就表(biao)示失敗,如(ru)果大于(yu)(yu)0那就表(biao)示功能

gpio_direction_output(unsigned gpio,int value)//配置GPIO為輸出口,并輸出value(0,1)

gpio_direction_input(unsigned gpio)//配(pei)置(zhi)為(wei)輸入口

gpio_set_value(unsigned gpio,int value);

//將GPIO寄存(cun)器(qi)設(she)置為0或1,該函數并不設(she)置GPIO為輸出,只是把相應的寄存(cun)器(qi)設(she)置為0

gpio_get_value(unsigned gpio);//同理,設置為輸入

gpio_free(unsigned gpio);//釋放GPIO資源

以上函數返回值表示GPIO的狀態

上(shang)面這些就(jiu)是(shi)GPIO驅動(dong)(dong)程序的(de)(de)基本概(gai)念理(li)解(jie),你必須要了解(jie),才能(neng)進行接(jie)(jie)下(xia)來(lai)(lai)(lai)的(de)(de)操(cao)作(zuo),接(jie)(jie)下(xia)來(lai)(lai)(lai)就(jiu)是(shi)GPIO驅動(dong)(dong)程序的(de)(de)操(cao)作(zuo),我們就(jiu)來(lai)(lai)(lai)通過一(yi)個蜂鳴器的(de)(de)例子,來(lai)(lai)(lai)讓你對GPIO驅動(dong)(dong)程序的(de)(de)操(cao)作(zuo)有深(shen)刻理(li)解(jie),蜂鳴器的(de)(de)例子是(shi)這樣的(de)(de):要求驅動(dong)(dong)加載(zai)(zai)的(de)(de)時候,打開蜂鳴器,卸載(zai)(zai)驅動(dong)(dong)時,關閉(bi)蜂鳴器,下(xia)面就(jiu)來(lai)(lai)(lai)解(jie)答。

#include

#include

#include

#include

#define LED_ON 1//宏(hong)定(ding)義一下(xia),為(wei)了美觀

#define LED_OFF 0

//定義硬件GPIO結構體

struct led_resource{

unsigned long gpio;//gpio的(de)(de)編號,每個GPIO都有一個內核分配的(de)(de)唯一編號

char *name; //gpio的標簽(qian)

};

static struct led_resource led_info[]={

[0] = {

.gpio = S5PV210_GPD0(0),//管腳信息

.name = "GPC0_0"//管腳名稱

},

};

static void led_control(unsigned long gpio,int flags)

{

gpio_direction_output(gpio,0);//這句表示先(xian)把當前GPIO口設置為(wei)輸出口,并且輸出0

gpio_set_value(gpio,flags);//然后在輸(shu)出想要(yao)設置的電平,前面先設置0是為了防止干擾

}

static int led_init(void)

{

gpio_request(led_inf0[0].gpio,led_inf[0].name);//申請GPIO資源

led_control(led_inf0[i].gpio,LED_ON);//調(diao)用(yong)函數(shu)來設置輸出口為1

return 0;

}

static void led_exit(void)

{

led_control(led_inf0[0].gpio,LED_OFF);//調(diao)用函數輸出0關(guan)閉(bi)蜂(feng)鳴器

gpio_free(led_inf0[0].gpio);//釋放(fang)GPIO資源(yuan)

}

module_init(led_init);//注(zhu)冊入(ru)口函(han)數

module_exit(led_exit);//注(zhu)冊出口函數

MODULE_LICENSE("GPL V2");//聲明該程序符合國際(ji)GPL委員會制定的標(biao)準(zhun)

切記:在加載(zai)(zai)的時候,內核(he)會(hui)(hui)有調用(yong)入口(kou)(kou)函(han)(han)數(shu)(shu),他(ta)就會(hui)(hui)執行入口(kou)(kou)函(han)(han)數(shu)(shu)的命(ming)令,燈就會(hui)(hui)亮(liang),蜂鳴器就會(hui)(hui)叫,一但(dan)卸(xie)載(zai)(zai)驅(qu)(qu)動(dong)(dong)程(cheng)(cheng)(cheng)序(xu)的時候,內核(he)就會(hui)(hui)自動(dong)(dong)調用(yong)出(chu)口(kou)(kou)函(han)(han)數(shu)(shu),當然(ran)也會(hui)(hui)執行出(chu)口(kou)(kou)函(han)(han)數(shu)(shu)的內容。寫(xie)好程(cheng)(cheng)(cheng)序(xu)后(hou),把代(dai)碼寫(xie)成.C文件(jian)然(ran)后(hou)放(fang)在linux內核(he)源代(dai)碼字符設備(bei)驅(qu)(qu)動(dong)(dong)所(suo)在的文件(jian)夾(jia)(jia)下,然(ran)后(hou)用(yong)當前目錄的makefile編(bian)譯一下,然(ran)后(hou)把編(bian)譯好的驅(qu)(qu)動(dong)(dong)程(cheng)(cheng)(cheng)序(xu)通過(guo)tftp或其他(ta)方式傳到開發板的文件(jian)系(xi)統的任(ren)意一個(ge)文件(jian)夾(jia)(jia)。然(ran)后(hou)用(yong)命(ming)令加載(zai)(zai)這個(ge)驅(qu)(qu)動(dong)(dong)程(cheng)(cheng)(cheng)序(xu)或者卸(xie)載(zai)(zai)

這樣你就看到現象了,是不是不是那么難,不管是什么樣的例子,你只要掌握GPIO驅動程序操作方法,那你就都可以迎刃而解了,想要了解更多GPIO驅動程序操作方法,你可以參考Linux內核驅(qu)動之gpio子系統的(de)使用(yong)

上一篇:嵌入式linux項目實例,嵌入式學霸總結

下一篇:Linux查看進程命令有哪些

熱點文章推薦
華清學員就業榜單
高薪(xin)學員經驗(yan)分享
熱點新(xin)聞推薦(jian)
前(qian)臺專線:010-82525158 企業培訓(xun)洽(qia)談專(zhuan)線:010-82525379 院校合(he)作洽談專(zhuan)線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部