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);
#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);
相关文章推荐
- Linux按键驱动程序设计(3)-按键操作硬件实现
- 12.按键驱动程序设计(1)-混杂设备驱动模型
- [国嵌攻略][120][按键驱动硬件操作实现]
- 12.按键驱动程序设计(7)-阻塞型驱动设计
- 12.按键驱动程序设计(6)-驱动支持多按键优化
- 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按
- 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按
- 12.按键驱动程序设计(2)-Linux中断处理
- Window XP驱动开发(十一) USB2.0 芯片CY7C68013A+FPGA实现的高速传输系统设计(软件及硬件)
- Linux按键驱动程序设计(1)-混杂设备驱动模型
- C语言直接驱动硬件实现PC机的串口操作
- 12.按键驱动程序设计(4)-中断分层
- 题目:多功能按键设计。利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按。
- 按键驱动程序设计---混杂设备、中断分层处理、工作队列、阻塞型驱动
- 多功能按键设计。利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按。
- arm 驱动进阶:usb驱动程序设计过程与实现
- 12.按键驱动程序设计(5)-按键定时器去抖
- 07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-按键驱动程序之异步通知机制+原子操作+互斥信号量+阻塞与非阻塞+定时器去抖
- S3C44B0X按键键盘的uClinux驱动程序设计
- 网络驱动程序设计指南(NDIS驱动开发) 转