本文**
[cpp]view plain
copy
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include //新版核心
#include
#include
static
struct
class
*key_irq_class;
static
struct
class_device *key_class_irq;
volatile
unsigned
long
*gpncon=null;
volatile
unsigned
long
*gpndat=null;
static
declare_wait_queue_head(button_waitq);
/* 中斷事件標誌, 中斷服務程式將它置1,third_drv_read將它清0 */
static
volatile
intev_press = 0;
struct
key_desc;
/*鍵值:按下時,0x01,0x02,0x03,0x04,0x05,0x06*/
/*鍵值:鬆開時,0x81,0x82,0x83,0x84,0x85,0x86*/
static
unsigned
char
key_num;
struct
key_desc keys_desc[6]=,
, ,
, ,
, };
static
irqreturn_t key_irq(
intirq,
void
*dev_id)
else
//printk("*********************");
//printk("key_num= %x\n",key_num);
//printk("*********************");
//ev_press=1;/*表示中斷發生了*/
wake_up_interruptible(&button_waitq);/*喚醒休眠的程序*/
return
irq_handled;
} static
intkey_drv_open(
struct
inode * inode,
struct
file * file)
static
ssize_t key_drv_write(
struct
inode * file,
const
char
__user *buf,
size_t
count, loff_t *ppos)
ssize_t key_drv_read (struct
file *file,
char
__user *buf,
size_t
size, loff_t *ppos)
intkey_drv_release(
struct
inode * inode,
struct
file * file)
static
struct
file_operations key_drv_openration =;
intmajor;
static
intkey_drv_init(
void
)
static
void
key_drv_exit(
void
)
module_init(key_drv_init);
module_exit(key_drv_exit);
module_license("gpl"
);
測試程式:
[cpp]view plain
copy
#include
#include
#include
#include
intmain(
intargc,
char
**argv)
while
(1)
return
0;
}
測試結果:
[root@pillar /driver/key/key_irq]#./main &
[root@pillar /driver/key/key_irq]#*********************key_num= 81
*********************key_val = 0x81
*********************key_num= 82
*********************key_val = 0x82
*********************key_num= 3
******************************************key_num= 3
******************************************key_num= 83
*********************key_val = 0x3
S3C6410的IIS驅動修改
因為硬體是將語音晶元從ac97,修改為其它晶元,所以需要更改驅動程式為iis方式 我認為有幾點需要注意 1 6410有三個iis通道,iis0,iis1和iis2,驅動程式預設是使用iis2,所以需要修改的地方為 hwctxt.cpp檔案 pclk gate和sclk gate暫存器,用於選擇時鐘源...
串列埠驅動設計(基於S3C6410)
串列埠充當的角色有兩個,乙個是資料傳輸,還有乙個就是充當控制台。串列埠通訊分為同步和非同步,我們通常使用的是非同步串列埠。通訊時,雙方先約定好資料幀的格式,即波特率,資料位,停止位,奇偶校驗位等。我們通常使用的是rs232的9幀串列埠,其中,最重要的是2,3,5腳。2 rxd接收資料 3 txd傳送...
S3C6410裸機中斷終於搞定了,
使用vic rel noopener noreferrer s3c6410裸機中斷終於搞定了,不需要彙編 使用vic 劍橋石 經過幾天的努力 終於搞定了 s3c6410 裸機中斷 測試使用的是外部中斷0組的 pn0,使用定時器0。之前一直很鬱悶的是網上的一些 s3c6410 使用的中斷都是像 51微...