帮我看看我的中断处理函数为啥进不去呢?中断能申请成功,cat /proc/interrupts下有usr_gpio,为啥read_interrupt直接进不去,printk("int the read_interrupt\n");这句话直接打印不出来。哪个哥帮看下,小弟感激不敬啊~~~~~~~
~o_o~
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/workqueue.h>
#include <linux/sched.h>
#include <mach/hardware.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/string.h>
#include <linux/list.h>
#include <linux/pci.h>
#include <linux/irq.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <asm/unistd.h>
#include <asm/irq.h>
#include <mach/map.h>
#include <mach/regs-clock.h>
#include <mach/regs-gpio.h>
#include <mach/gpio.h>
#include <plat/gpio-cfg.h>
#include <mach/gpio-bank-e.h>
#define DEVICE_NAME "usr_gpio"
//#define S3C_GPIO_SFN(0) (S3C_GPIO_SPECIAL(0))//输入
//#define S3C_GPIO_SFN(1) (S3C_GPIO_SPECIAL(1))//输出
//#define S3C_GPIO_SFN(3) (S3C_GPIO_SPECIAL(1))//中断
#define GPIO_INPUT_0 S3C64XX_GPF(10)
#define GPIO_OUTPUT_0 S3C64XX_GPK(5)
#define GPIO_INNUM 1
#define GPIO_OUTNUM 1
short temp;
irqreturn_t gpio_irq = 53;
struct workqueue_struct *gpio_queue;
struct work_struct gpio_wq;
void goio_do_work(unsigned long data);
static unsigned long input_table[] = {
GPIO_INPUT_0
};
static unsigned long output_table[] = {
GPIO_OUTPUT_0
};
//中断处理底半部
void gpio_do_work(unsigned long data)
{
int i, val;
for (i = 0; i < GPIO_INNUM; i++)
{
val = gpio_get_value(input_table[i]);
temp |= ((val&0x1) << i);
}
}
static int gpio_input_init(void)
{
int ret = 0, i = 0;
for (i = 0; i < GPIO_INNUM; i++)
{
if (gpio_is_valid(input_table[i]) == -EINVAL)
{
printk("ERROR, GPIO used for input port is using by other devices !");
break;
}
//设置上拉
s3c_gpio_setpull(input_table[i], S3C_GPIO_PULL_DOWN);
//设置为中断
s3c_gpio_cfgpin(input_table[i], S3C_GPIO_SFN(3));
}
return ret;
}
static int gpio_output_init(void)
{
int ret = 0, i = 0;
for (i = 0; i < GPIO_OUTNUM; i++)
{
if (gpio_is_valid(output_table[i]) == -EINVAL)
{
printk("ERROR, GPIO used for output port is using by other devices !");
break;
}
//设置上拉
s3c_gpio_setpull(output_table[i], S3C_GPIO_PULL_UP);
//设置为输出
s3c_gpio_cfgpin(output_table[i], S3C_GPIO_SFN(1));