S3C6410按鍵驅動 中斷方式

2021-06-20 16:18:35 字數 2990 閱讀 4567

本文**

[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微...