home→uart_ring→gpx1_1
back→sim_det→gpx1_2
switch3→ap_sleep→gpc0_3
switch4→xeint6→gpx0_6
步驟:申請gpio gpio_request(exynos4_gpx1(1),"home");
設定模式,輸入模式 s3c_gpio_cfgpin(exynos4_gpx1(1),s3c_gpio_input);
設定上下拉,既不上拉也不下拉 s3c_gpio_setpull(exynos4_gpx1(1),s3c_gpio_pull_none);
讀取 gpio_get_value(exynos4_gpc0(3));
標頭檔案#include
#include
結合技術手冊查詢中斷號:
中斷註冊函式:
static inline int __must_check
request_irq(
unsigned int irq,
irq_handler_t handler,
unsigned long flags,
const char *name,
void *dev_id)
引數:
irq中斷號。(和平台架構相關,結合datasheet以及平台檔案) irq_eint(x)
中斷處理函式 中斷發生時,系統呼叫這個函式,dev_id引數將被傳遞給它
中斷標記 irq_type_edge_falling 上公升或下降中斷觸發
中斷名字
dev_id 一般使用裝置的裝置結構體或者null
返回值:request_irq()返回0表示成功,返回-einval表示中斷號無效或處理函式指標為null,返回-ebusy表示中斷已經被占用,且不能被共享。
中斷解除安裝函式:
void free_irq(unsigned int irq, void *dev_id)
中斷服務函式:
irq_handler_t irq16_handler(int irq,void *dev_id)
驅動程式:
#include #include #include #include #include #include #include #include #include #include #include #include #include module_license("dual bsd/gpl");
module_author("sza");
static dev_t dev;
static int major_num;
static int minor_num;
#define chr_name "epic_chr"
#define cls_name "epic_cls"
#define dev_name "epic_dev"
static int gpios = ;
static irq_handler_t home_handler(int irq,void *dev_id)
static irq_handler_t back_handler(int irq,void *dev_id)
static int pocky330_open(struct inode *inode, struct file *file)
return 0;
}static int pocky330_release(struct inode *inode, struct file *file)
return 0;
}static long pocky330_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
else if(cmd == 4)
else
return 0;
}static struct cdev my_cdev;
static struct file_operations my_fops = ;
static struct class *myclass;
static int pocky330_init(viod)
cdev_init(&my_cdev,&my_fops);
cdev_add(&my_cdev, dev, 1);
myclass = class_create(this_module,cls_name);
device_create(myclass,null,dev,null,dev_name);
gpio_request(gpios[4],"led");
s3c_gpio_cfgpin(gpios[4],s3c_gpio_output);
gpio_set_value(gpios[4],0);
request_irq(irq_eint(9),home_handler,irq_type_edge_falling,"home",null);
request_irq(irq_eint(10),back_handler,irq_type_edge_falling,"back",null);
return 0;
}static void pocky330_exit(void)
module_init(pocky330_init);
module_exit(pocky330_exit);
應用程式:
#include #include #include #include #include #include int main(void)
else
close(fd);
return 0;
}
Linux gpio 按鍵中斷學習
先說明一下按鍵與s3c2440晶元的連線方式 key1 eint8 gpg0 key2 eint11 gpg3 key3 eint13 gpg5 key4 eint14 gpg6 key5 eint15 gpg7 key6 eint19 gpg11 驅動程式原始碼如下 drivers char mi...
Linux GPIO中斷非同步通知
fasync機制是非同步通知機制,當驅動程式向應用程式傳送訊號量,觸發應用程式的訊號處理函式,以達到類似中斷的效果 驅動程式中 1 在檔案專屬的fasync函式中,呼叫了fasync helper,將屬主資訊通知給核心 2 當發生按鍵中斷,進入按鍵中斷服務程式,讀取鍵值,呼叫kill fasync,...
linux gpio子系統級聯中斷解析
linux 4.9 drivers pinctrl 中的gpio子系統中斷級聯解析 dts相關 中斷相關的device tree知識回顧 想要進行對映,首先要了解interrupt controller的拓撲結構。系統中的interrupt controller的拓撲結構以及其interrupt r...