Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26332
  • 博文数量: 10
  • 博客积分: 1480
  • 博客等级: 上尉
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-27 10:37
文章分类
文章存档

2011年(1)

2010年(4)

2009年(5)

最近访客

分类: 嵌入式

2009-10-29 11:53:56

#include
#include
#include
#include
#include
#include
#include
#include
#define key_int_major 98

static int key_int_temp_count=0;

GPBCON=(0<<12)|(0<<13)|(0<<14)|(0<<15);
GPGCON=(1<<11)|(0<<10);

EXTINT0=(1<<6)|(1<<5);
EXTINT1=(1<<14)|(1<<13)|(1<<22)|(1<<21);
EXTINT3=(1<<14)|(1<<13);
ssize_t key_int_read(struct file *file,char *bur,size_t count,loff_t *f_ops)
{printk("nothing!");
 return count;
}
ssize_t key_int_write(struct file *file,const char *bur,size_t count,loff_t *f_ops)
{
 return count;
}
int key_int_ioctl(struct inode *inode, struct file *file , unsigned int cmd,unsigned long data)
{
 return 0;
}

int key_int_open(struct inode *inode,struct file *file)
{
printk("open success!");

return 0;
}
int key_int_release(struct inode *inode, struct file *file)
{

return 0;
}
struct file_operations init_ctl_ops =
{
.owner = THIS_MODULE,
.read = key_int_read,
.write = key_int_write,
.ioctl = key_int_ioctl,
.open = key_int_open,
.release = key_int_release
};
 
static void key_int_interrupt(int nr,void *devid,struct pt_regs *regs)
{
 key_int_temp_count++;
 printk("now key interrupt occur %d times!!\n",key_int_temp_count);
}
 

static int __init hw_key_ctl_init(void)
{
int ret=-ENODEV;
ret=register_chrdev(key_int_major,"int_ctl",&init_ctl_ops);
if(ret<0)
 {
 printk("S3C2440 init_moudle failed with %d\n",ret);
 return ret;
 }
else
 {
 printk("S3C2440 init_moudle success!\n");
 }
ret=request_irq(IRQ_EINT19,&key_int_interrupt,SA_INTERRUPT,"int_ctl",NULL);
printk("\n.................\nret=%x\n.........\n",ret);
ret=request_irq(IRQ_EINT11,&key_int_interrupt,SA_INTERRUPT,"int_ctl",NULL);
printk("\n.................\nret=%x\n.........\n",ret);
ret=request_irq(IRQ_EINT13,&key_int_interrupt,SA_INTERRUPT,"int_ctl",NULL);
printk("\n.................\nret=%x\n.........\n",ret);
ret=request_irq(IRQ_EINT0,&key_int_interrupt,SA_INTERRUPT,"int_ctl",NULL);
printk("\n.................\nret=%x\n.........\n",ret);
return ret;
}

static int __init s3c2440_key_ctl_init(void)
{
int ret=-ENODEV;
ret=hw_key_ctl_init();
if(ret) return ret;
return 0;
}
 
static void __exit cleanup_key_ctl(void)
{
 unregister_chrdev(key_int_major,"int_ctl");
 free_irq(IRQ_EINT6,NULL);
}
module_init(s3c2440_key_ctl_init);
module_exit(cleanup_key_ctl);
阅读(1049) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~