#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/init.h>
#define GPIOCFG0 (*(volatile unsigned *)0xbfd010C0)
#define GPIOCFG1 (*(volatile unsigned *)0xbfd010C4)
#define GPIOOE0 (*(volatile unsigned *)0xbfd010D0)
#define GPIOOE1 (*(volatile unsigned *)0xbfd010D4)
#define GPIOIN0 (*(volatile unsigned *)0xbfd010E0)
#define GPIOIN1 (*(volatile unsigned *)0xbfd010E4)
#define GPIOOUT0 (*(volatile unsigned *)0xbfd010F0)
#define GPIOOUT1 (*(volatile unsigned *)0xbfd010F4)
static irqreturn_t hello (int i, void *p)
{
printk(KERN_EMERG "interrupt success\n");
return (IRQ_HANDLED);
}
static int __init interrupt_init(void)
{
GPIOCFG1 |= (1 << 29 );// 0x20000000;//1<<29
GPIOOE1 |= (1 << 29 );// 0x20000000;
GPIOIN1 |= (1 << 29 );//0x20000000;
int result;
int *j = (int*)125;
result = request_irq(125, hello, IRQF_SHARED|IRQ_TYPE_LEVEL_LOW, "aaa", j);
if( result!=0 ){
printk(KERN_WARNING "result=%d\nrequest_irq is fail\n",result);
}
enable_irq(125);
return 0;
}
static void __exit interrupt_exit(void)
{
int *j = (int*)125;
free_irq(125, j);
printk(KERN_ALERT "quit!\n");
}
module_init(interrupt_init);
module_exit(interrupt_exit);
MODULE_LICENSE("GPL");
实验结果:用红外线发射器发射到zigbee板的接收器上,终端会打印出触发中断的信息