#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/device.h>
#include <asm/io.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/miscdevice.h>
#include <linux/ioport.h>
#include <linux/uaccess.h>
#include <linux/interrupt.h>
#include <asm/irq.h>
#include <linux/irq.h>
#include <asm/uaccess.h>
#include <linux/of_irq.h>
#include <linux/of.h>
#include <linux/input.h>
#include <linux/semaphore.h>
#include <linux/cdev.h>
#include <linux/slab.h>
#include <linux/gpio.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_gpio.h>
#include <linux/delay.h>
#include <linux/vmalloc.h>
/*
test pin
FMQL45T900
EMIO5
<&portc 5 0x01>;
*/
#define DEV_NAME "gpio"
#define GPIO_NUM 431//EMIO5
int gpio_num = GPIO_NUM;
int gpio_irq_num;
static irqreturn_t gpio_irq_handler(int irq, void *dev_id)
{
printk("gpio_irq_handler = %d\n", irq);
return IRQ_HANDLED;
}
static int __init gpio_init(void)
{
int ret = 0;
int gpio_value;
printk(KERN_INFO DEV_NAME " init...\n");
if(!gpio_is_valid(gpio_num)) {
printk(KERN_ERR "Failed to get gpio_num\n");
return -EINVAL;
}
printk(KERN_INFO "gpio_num = %d\r\n", gpio_num);
ret = gpio_request(gpio_num, "gpio_num");
if(ret < 0)
{
printk(KERN_ERR "request gpio_num error\n");
return ret;
}
ret = gpio_direction_input(gpio_num);
if(ret < 0)
{
printk(KERN_ERR "set gpio_num direction fail");
return ret;
}
gpio_value = gpio_get_value(gpio_num);
printk(KERN_INFO DEV_NAME " gpio_value = %d\n", gpio_value);
gpio_irq_num = gpio_to_irq(gpio_num);
printk(KERN_INFO "gpio_irq_num = %d\r\n", gpio_irq_num);
ret = request_irq(gpio_irq_num,
gpio_irq_handler,
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
"gpio_irq",
NULL);
if(ret < 0)
{
printk(KERN_ERR "request_irq error\n");
return ret;
}
return ret;
}
static void __exit gpio_exit(void)
{
free_irq(gpio_irq_num, NULL);
gpio_free(gpio_num);
printk(KERN_INFO "user gpio exit!\n");
return;
}
module_init(gpio_init);
module_exit(gpio_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("fmql");
FMQL45T900 linux 驱动外部中断输入 ZYNQ-7000 linux 驱动外部中断输入
需积分: 1 67 浏览量
2023-04-28
14:45:16
上传
评论 1
收藏 131KB GZ 举报
大牛攻城狮
- 粉丝: 1w+
- 资源: 134