字符设备驱动之Buttons-中断

buttons.c

#include <linux/fs.h>#include <linux/module.h>#include <linux/errno.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/cdev.h>#include <linux/ioport.h>#include <linux/pci.h>#include <asm/uaccess.h>#include <asm/io.h>#include <asm/irq.h>#include <linux/interrupt.h>#include <asm/mach/irq.h>

static int major = 0;static struct class *cls;

/* gpecon 0x56000040 *//* gpfcon 0x56000050 *//* gpgcon 0x56000060 */static volatile unsigned long *gpecon;static volatile unsigned long *gpedat;

static volatile unsigned long *gpfcon;static volatile unsigned long *gpfdat;

static volatile unsigned long *gpgcon;static volatile unsigned long *gpgdat;

static irqreturn_t buttons_irq(int irq, void *dev_id)/*中断处理函数*/{char *str = (char *)dev_id;

printk("irq = %d, dev_id = %s\n", irq, dev_id);return IRQ_HANDLED;}

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

ssize_t buttons_read(struct file *inode, char __user *buf, size_t size, loff_t *offset){return 0;}

static const struct file_operations buttons_fops = {.owner= THIS_MODULE,.read= buttons_read,.open= buttons_open /* 设置引脚,申请资源 */};

char *id = "K10";

int buttons_init(void){major = register_chrdev(0, "buttons", &buttons_fops);

/* sysfs */cls = class_create(THIS_MODULE, "buttons_class");class_device_create(cls, NULL, MKDEV(major, 0), NULL, "buttons");

gpecon = ioremap(0x56000040, 4096);gpedat = gpecon + 1;

gpfcon = gpecon + 4;gpfdat = gpfcon + 1;

gpgcon = gpecon + 8;gpgdat = gpgcon + 1;

/* 注册中断 */request_irq(IRQ_EINT0, buttons_irq, IRQF_SHARED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "K1_irq", id);

/* 设置GPIO为中断引脚 * 设置触发方式 * 使能中断 */

/* 设置KSCAN0(GPE11)为输出引脚,输出0 */*gpecon &= ~(0x3 << 22);*gpecon |= (1 << 22);*gpedat &= ~(1<<11);

return 0;}

void buttons_exit(void){unregister_chrdev(major, "buttons");

class_device_destroy(cls, MKDEV(major, 0));class_destroy(cls);

iounmap(gpecon);

free_irq(IRQ_EINT0, id);/*释放中断资源*/}

module_init(buttons_init);module_exit(buttons_exit);

MODULE_LICENSE("GPL");

Makefile参考上个程序,测试程序不用写了,注册的中断服务程序有显示!主要把握框架,怎么写中断。

这里的风景美不胜收,真让人流连忘返。

字符设备驱动之Buttons-中断

相关文章:

你感兴趣的文章:

标签云: