- 在前面的基础上,实现多按键中断,这里实现2个,k1,k3。
- 通过应用程序,打印出产生中断的key号。
- 代码如下:
- key.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/interrupt.h>
#include <linux/fs.h>
#include <linux/io.h>
#include <linux/uaccess.h>
#define GPGCON 0x56000060
#define GPGDAT 0x56000064
struct work_struct *key_work;
struct timer_list key_timer;
unsigned int *gpio_data;
unsigned int key_num;
// 工作队列函数
void key_work_func(struct work_struct *work)
{
mod_timer(&key_timer, jiffies + HZ/10); // 延时100ms
}
// 判断按键是否真正按下
void key_timer_func(unsigned long data)
{
unsigned short key_vall;
key_vall = readw(gpio_data)&0x01;
if (key_vall == 0)
{
printk("key1 down!\n");
key_num = 1;
}
key_vall = readw(gpio_data)&0x20;