嵌入式linux下GPIO驅動程序操作方法(還有實例)
時間:2018-08-10 來源:未知
嵌入式linux下GPIO驅動程序,這是在嵌入式設備中最基本的操作,也是菜鳥進階必經之路,,今天我們就用各個實例來讓你深刻的了解GPIO驅動程序,這都是我自己親手做過的,可以慢慢來理解。
首先我們在看驅動程序的代碼之前,先要知道庫函數:
內核GPIO庫函數:
int gpio_request(unsigned gpio,const char *label)//申請GPIO資源
參數gpio表示GPIO所對應的編號,由于在平臺代碼中,已經將CPU所有的GPIO進行統一的規劃和編號
參數*label表示標簽
因為gpio在內核中,就和內存一樣,所以你需要的就是申請
當返回的值小于0的話,那么就表示失敗,如果大于0那就表示功能
gpio_direction_output(unsigned gpio,int value)//配置GPIO為輸出口,并輸出value(0,1)
gpio_direction_input(unsigned gpio)//配置為輸入口
gpio_set_value(unsigned gpio,int value);
//將GPIO寄存器設置為0或1,該函數并不設置GPIO為輸出,只是把相應的寄存器設置為0
gpio_get_value(unsigned gpio);//同理,設置為輸入
gpio_free(unsigned gpio);//釋放GPIO資源
以上函數返回值表示GPIO的狀態
上面這些就是GPIO驅動程序的基本概念理解,你必須要了解,才能進行接下來的操作,接下來就是GPIO驅動程序的操作,我們就來通過一個蜂鳴器的例子,來讓你對GPIO驅動程序的操作有深刻理解,蜂鳴器的例子是這樣的:要求驅動加載的時候,打開蜂鳴器,卸載驅動時,關閉蜂鳴器,下面就來解答。
#include
#include
#include
#include
#define LED_ON 1//宏定義一下,為了美觀
#define LED_OFF 0
//定義硬件GPIO結構體
struct led_resource{
unsigned long gpio;//gpio的編號,每個GPIO都有一個內核分配的唯一編號
char *name; //gpio的標簽
};
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);//這句表示先把當前GPIO口設置為輸出口,并且輸出0
gpio_set_value(gpio,flags);//然后在輸出想要設置的電平,前面先設置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);//調用函數來設置輸出口為1
return 0;
}
static void led_exit(void)
{
led_control(led_inf0[0].gpio,LED_OFF);//調用函數輸出0關閉蜂鳴器
gpio_free(led_inf0[0].gpio);//釋放GPIO資源
}
module_init(led_init);//注冊入口函數
module_exit(led_exit);//注冊出口函數
MODULE_LICENSE("GPL V2");//聲明該程序符合國際GPL委員會制定的標準
切記:在加載的時候,內核會有調用入口函數,他就會執行入口函數的命令,燈就會亮,蜂鳴器就會叫,一但卸載驅動程序的時候,內核就會自動調用出口函數,當然也會執行出口函數的內容。寫好程序后,把代碼寫成.C文件然后放在linux內核源代碼字符設備驅動所在的文件夾下,然后用當前目錄的makefile編譯一下,然后把編譯好的驅動程序通過tftp或其他方式傳到開發板的文件系統的任意一個文件夾。然后用命令加載這個驅動程序或者卸載
這樣你就看到現象了,是不是不是那么難,不管是什么樣的例子,你只要掌握GPIO驅動程序操作方法,那你就都可以迎刃而解了,想要了解更多GPIO驅動程序操作方法,你可以參考Linux內核驅動之gpio子系統的使用

