中断简单例子
#include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <mach/gpio.h>
#include <linux/gpio.h>
#define KEY_IO GPIOA(14)
irqreturn_t irq_func(int irqno,void *arg)
{
printk("off\n");
return IRQ_HANDLED;
}
static int __init test_init(void)
{
int ret=0;
request_irq(gpio_to_irq(KEY_IO),irq_func,IRQF_TRIGGER_FALLING,"tkey",NULL);
return ret;
}
static void __exit test_exit(void)
{
free_irq(gpio_to_irq(KEY_IO),NULL);
}
module_init(test_init);
module_exit(test_exit);
MODULE_LICENSE("GPL");
对应编译的Makefile
obj-m += key.o
KSRC :=/Allwinner_H3_sdk/uboot_kernel/orangepi_sdk/source/linux-3.4.112
export ARCH:= arm
export CROSS_COMPILE:=arm-linux-gnueabihf-
all:
make -C $(KSRC) modules M=`pwd`
.PHONY : clean
clean:
make -C $(KSRC) modules clean M=`pwd`
加载模块后
^_^ /mnt/nfs-6-2/irq # insmod key.ko
对应io口输入高点平后松开,中断处理函数触发,效果如下
[ 3544.845615] off
[ 3545.064716] off
[ 3545.087106] off