linux 標準 GPIO 操作
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
Linux 提供了GPIO 操作的 API,具體初始化及注冊函數在 driver/gpio/lib_gpio.c 中實現。
#include
int gpio_request(unsigned gpio, const char *label);
獲得并占有 GPIO port 的使用權,由參數 gpio 指定具體 port。非空的label指針有助于診斷。主要告訴內核這塊地址被占用了。當其他地方調用同一地址的gpio_request就會報告錯誤,該地址已經被申請。在/proc/mem有地址占用表描述。先申請在訪問的好處是避免資源競爭。
void gpio_free(unsigned gpio);
釋放 GPIO port 的使用權,由參數 gpio 指定具體 port。
int gpio_direction_input(unsigned gpio);
將 GPIO port(由參數 gpio 指定)設為輸入。
int gpio_direction_output(unsigned gpio, int value);
將 GPIO port(由參數 gpio 指定)設為輸出,并指定輸出電平值(value)。
int gpio_get_value(unsigned gpio);
獲得 GPIO port 上的電平值并返回。
void gpio_set_value(unsigned gpio, int value);
設置 GPIO port 上的電平。
int gpio_to_irq(unsigned gpio);
通過獲得 gpio port 對應的 irq number。
int gpio_cansleep(unsigned gpio)
這個主要區分是掛載在外部總線上的GPIO控制器,還是內部的GPIO控制器。因為外部總線上的GPIO控制器可以休眠,所以用這個來區分是否是擴展的GPIO,返回1是擴展的GPIO,0的話就是內部的GPIO。
int gpio_get_value_cansleep(unsigned gpio);
void gpio_set_value_cansleep(unsigned gpio, int value);
這些都是對可以休眠擴展的gpio的操作
static inline int gpio_is_valid(int number) 判斷GPIO是否有效,有效返回0
int gpio_export(unsigned gpio, booldirection_may_change);
void gpio_unexport();
//在 /sys/class/gpio/下面創建和取消對應的gpio號
int gpio_export_link(struct device *dev, const char *name, unsigned gpio)
//創建到導出GPIO的 sysfs link ,第一個參數是在哪個dev下創建,第二個是參數名字,第三個是gpio編號RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成