該介面基於linux提供的通用中斷api介面實現。
3.下面是驅動以及應用層的**:
driver.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ******_major 200
static
struct class *my_class;
int major;
static
struct fasync_struct *fasync_queue;
//非同步通知佇列
/*關鍵點!!!*/
#define gpio_num gpio_to_pin(3,5)
//假設中斷引腳為:gpio3_5
static
unsigned
int irq_num;
/* 開啟 */
int******_open
(struct inode *inode,
struct file *filp)
/* 關閉 */
int******_release
(struct inode *inode,
struct file *filp)
/*簡介:系統呼叫,應用層的read()將會呼叫該函式
count:傳輸資料長度
f_pos:偏移量
*/ssize_t ******_read
(struct file *filp,
char __user *buf,size_t count,loff_t *f_pos)
/*簡介:系統呼叫,應用層的write()將會呼叫該函式
count:傳輸資料長度
f_pos:偏移量
*/ ssize_t ******_write
(struct file *file,
const
char __user *buf,size_t count,loff_t *f_pos)
/*fasync方法的實現*/
static
intmy_fasync
(int fd,
struct file * filp,
int on)
/* 裝置驅動操作結構體,該結構體的每乙個成員的名字都對應著乙個系統呼叫 */
static
const
struct file_operations ******_fops=
;/* 在中斷服務函式中向應用層傳送訊息-非同步通知! */
void irq_callback (
unsigned
long date)
}/* 載入 */
int******_init_module
(void
)/* 自動建立裝置節點 */
my_class =
class_create
(this_module,
"my_class");
device_create
(my_class,
null
,mkdev
(major,0)
,null
,"my_device");
/*gpio申請*/
rtn =
gpio_request
(gpio_num,
"my_irq");
if(rtn!=0)
/*獲取gpio中斷號*/
irq_num =
gpio_to_irq
(gpio_num)
;/*gpio中斷服務函式註冊,*/
/*上公升沿觸發*/
rtn =
request_irq
(irq_num, irq_callback,irqf_trigger_falling,
"my_irq"
,null);
if(rtn<0)
else
printk
("module_init sucessful!!!\n");
return0;
}/* 解除安裝 */
void
******_cleanup_module
(void
)/* 巨集實現 */
module_init
(******_init_module)
;module_exit
(******_cleanup_module)
;/* 開源許可宣告 */
module_license
("dual bsd/gpl"
);
#include
#include
#include
#include
#include
#include
static
int fd;
/* 核心產生非同步通知,呼叫該應用層函式處理 */
void
sigterm_handler
(int signo)
intmain
(void
)close
(fd)
;return0;
}
Linux下ZYNQ中GPIO中斷號獲取
使用提供的gpio to irq是最佳的選擇,裝置樹配置起來也比較方便,都不需要將中斷父結點設定為gpio0。key 驅動程式申請一下對映後的終端號key test.irq int key test.irq gpio to irq key test.key gpio 使用key test.irq就可...
Linux中斷子系統
linux kernel的中斷子系統之 一 一 前言 乙個合格的linux驅動工程師需要對kernel中的中斷子系統有深刻的理解,只有這樣,在寫具體driver的時候才能 1 正確的使用linux kernel提供的的api,例如最著名的request threaded irq request ir...
linux中斷子系統
參考引用 wowotech 乙個很好的linux技術部落格。一 概述 目的kernel管理硬體裝置的方式 輪詢 中斷。中斷效率高且反應快於輪詢,因為它利用了硬體本身執行指令前會做的 中斷電訊號週期輪詢 分類中斷分為同步 synchronous 和非同步 asynchronous 同步也稱為異常,由c...