Linux如何停止使用fpga资源,求救linux系统下 fpga 的中断驱动程序 多谢

#include static int f2h_int_open(struct inode *inode, struct file *file);

static int f2h_int_release(struct inode *inode, struct file *file);

static int f2h_int_init(void);

static void f2h_int_exit(void);

static int g_iMajor = 0;

static struct device *g_pDev;

static struct class *g_pClass;

#define PHY_ADDR (0xff280000)

#define PHY_ADDR_LEN (0x10)

// 字符设备结构

static struct file_operations g_f2h_int_fileops =

{

.owner   = THIS_MODULE,

.open    = f2h_int_open,

.release = f2h_int_release,

};

void __iomem * virt;

irqreturn_t xxx_interrupt (int irq,void*dev_id)

{

static unsigned int uiCnt = 0;

iowrite32(1, virt + 0xC);

printk("xxx_interrupt %d\n", uiCnt++);

return (IRQ_HANDLED);

}

static int f2h_int_open( struct inode *inode, struct file *file )

{

return 0;

}

static int f2h_int_release( struct inode *inode, struct file *file )

{

return 0;

}

static int f2h_int_init( void )

{

int irq = 0;

int err = 0;

unsigned int uiData = 0;

printk("f2h_int_init\n" );

g_iMajor = register_chrdev(0, "FPGA_IRQ3", &g_f2h_int_fileops);

g_pClass = class_create(THIS_MODULE, "FPGA_IRQ3");

g_pDev = device_create(g_pClass, NULL, MKDEV(g_iMajor, 0), NULL, "FPGA_IRQ3");

printk("flag 1\n" );

if(!request_mem_region(PHY_ADDR, PHY_ADDR_LEN, "FPGA_IRQ3"))

{

printk("request_mem_region fail\n");

}

virt = ioremap(PHY_ADDR, PHY_ADDR_LEN);

printk("virt = %x\n", (unsigned int)virt);

uiData = ioread32(virt);

printk("uiData = %x\n", uiData);

printk("dir = %x\n", ioread32(virt + 4));

printk("int = %x\n", ioread32(virt + 8));

printk("edge = %x\n", ioread32(virt + 0xC));

iowrite32(1, virt + 8);

printk("int = %x\n", ioread32(virt + 8));

release_mem_region(PHY_ADDR, PHY_ADDR_LEN);

printk("flag 2\n" );

err = request_irq(75, xxx_interrupt, IRQF_DISABLED, "FPGA_IRQ3", NULL);

// enable_irq(irq);

printk("irq = %d\n", irq);

printk("err = %d\n", err);

return 0;

}

static void f2h_int_exit( void )

{

printk("f2h_int_exit\n");

iounmap(virt);

free_irq(75, NULL);

// disable_irq_nosync(75);

device_destroy(g_pClass, MKDEV(g_iMajor, 0));

class_destroy(g_pClass);

unregister_chrdev(g_iMajor, "FPGA_IRQ3");

}

module_init(f2h_int_init);

module_exit(f2h_int_exit);

MODULE_DESCRIPTION("C5 Linux driver");

MODULE_LICENSE("GPL");

函数顺序的问题,已破

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值