您的位置:首页 > 其它

tiny6410按键驱动程序1.0(利用中断)

2016-03-11 08:18 218 查看
#include

#include

#include //用来定义miscdevice结构

#include //与中断相关的

#include //与ioremap相关

#include //与file_operations相关

#define GPNCON 0x7F008830

//中断处理函数

irqreturn_t key_int(int irq,void *dev_id)

{

 //1.检测是否发生按键中断

 

 //2.清除已经发生的按键中断

 

 //3.打印按键值

 printk("key down!\n");

 

 return 0;

}

void key_hw_init()

{

 unsigned int *gpio_config;

 unsigned short data;

 

 gpio_config = ioremap(GPNCON,4);//物理地址转化成虚拟地址

 

 data = readw(gpio_config);

 data &= ~0b11;//清0

 data |= 0b10;//设置中断

 

 writew(data,gpio_config);

 

}

int key_open (struct inode *node,struct file *filp)

{

 

 return 0;

}

struct file_operations key_fops = {

 .open = key_open,

 

};

struct miscdevice key_miscdev = {

 .minor = 200,

 .name = "key",

 .fops = &key_fops,

};

static int button_init()

{

 misc_register(&key_miscdev);

 

 //按键初始化

 key_hw_init();//hw:hardware

 

 //注册中断处理程序

 request_irq(IRQ_EINT(0),key_int,IRQF_TRIGGER_FALLING ,"key",0);//IRQF_TRIGGER_FALLING:表示高电平到低电平产生中断,即按键按下产生中断

 

 

 return 0;

}

static void button_exit()

{

 misc_deregister(&key_miscdev);

 

 //注销中断处理程序

 //free_irq(IRQ_EINT(0),0);

 

}

module_init(button_init);

module_exit(button_exit);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: