您的位置:首页 > 其它

12.按键驱动程序设计(3)-按键驱动硬件操作实现

2017-01-05 02:04 489 查看
#include <linux/module.h>

#include <linux/init.h>

#include <linux/miscdevice.h>

#include <linux/interrupt.h>

#include <linux/fs.h>

#include <linux/io.h>

#define GPFCON 0x56000050

irqreturn_t key_int(int irq, void *dev_id)

{

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

    

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

    

    //3. 打印按键值

    printk("key down!\n");

    

    return 0;  

}

void key_hw_init()

{

    unsigned short data; 

    unsigned int *gpio_config;

    

    gpio_config = ioremap(GPFCON,4);

    data = readw(gpio_config);

    data &= ~0b11;

    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 = "tq2440key",

    .fops = &key_fops,

};

static int button_init()

{

    misc_register(&key_miscdev);

    

    //按键硬件初始化

    key_hw_init();

    

    //注册中断处理程序

    request_irq(IRQ_EINT0,key_int,IRQF_TRIGGER_FALLING,"tq2440key",0);

    

    return 0;

}

static void button_exit()

{

    misc_deregister(&key_miscdev);

}

module_init(button_init);

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