当前位置: 代码迷 >> 驱动开发 >> 帮小弟我看看小弟我的中断处理函数为啥进不去呢
  详细解决方案

帮小弟我看看小弟我的中断处理函数为啥进不去呢

热度:26   发布时间:2016-04-28 10:37:53.0
帮我看看我的中断处理函数为啥进不去呢?
帮我看看我的中断处理函数为啥进不去呢?中断能申请成功,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));
  相关解决方案