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

#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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值