1. 程式人生 > >GPIO IO操作函式

GPIO IO操作函式




#include <linux/gpio.h> //裡面宣告io口的操作函式

int gpio_request(unsigned gpio, const char *label);//每個io只能被請求一次,可防止多個驅動來控制同一個IO口
void gpio_free(unsigned gpio); //釋放已請求的io口

int gpio_direction_input(unsigned gpio); //把指定的IO口作輸入功能, gpio用於指定具體哪個io口
int gpio_direction_output(unsigned gpio, int value); //作輸出功能,並根據value的值輸出高低電平
int gpio_get_value(unsigned gpio); //獲取指定IO口的電平 void gpio_set_value(unsigned gpio, int value); //設定IO口的電平為value(0/1) int gpio_to_irq(unsigned gpio); //根據io口,獲取到它對應的中斷號(io口大都有外部中斷功能)






在核心裡用什麼具體值來表示一個io口? 這是由晶片廠家來定義的.
一般情況下, io口的定義是在核心原始碼arch/arm/mach-xxxx/include/mach/gpio.h.
我們的板的io口定義是在: arch/arm/mach-sunxi/include/mach/gpio.h

49
/* sunxi gpio name space */ 50 #define GPIOA(n) (SUNXI_PA_BASE + (n)) //PA, n表示這組裡的第幾個IO口 51 #define GPIOB(n) (SUNXI_PB_BASE + (n)) 52 #define GPIOC(n) (SUNXI_PC_BASE + (n)) 53 #define GPIOD(n) (SUNXI_PD_BASE + (n)) 54 #define GPIOE(n) (SUNXI_PE_BASE + (n)) 55 #define GPIOF(n) (SUNXI_PF_BASE + (n))
56 #define GPIOG(n) (SUNXI_PG_BASE + (n)) 57 #define GPIOH(n) (SUNXI_PH_BASE + (n)) 58 #define GPIOI(n) (SUNXI_PI_BASE + (n)) 59 #define GPIOJ(n) (SUNXI_PJ_BASE + (n)) 60 #define GPIOK(n) (SUNXI_PK_BASE + (n)) 61 #define GPIOL(n) (SUNXI_PL_BASE + (n)) 62 #define GPIOM(n) (SUNXI_PM_BASE + (n)) 63 #define GPION(n) (SUNXI_PN_BASE + (n)) 64 #define GPIOO(n) (SUNXI_PO_BASE + (n)) 65 #define GPIO_AXP(n) (AXP_PIN_BASE + (n))