搜索
bottom↓
回复: 0

怎么样把中断资源清除干净!

[复制链接]

出0入0汤圆

发表于 2010-11-1 14:52:55 | 显示全部楼层 |阅读模式
#include <linux/types.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/string.h>
#include <linux/platform_device.h>
#include <linux/errno.h>
#include <asm/uaccess.h>
#include <linux/delay.h>
#include <linux/miscdevice.h>
#include <asm/io.h>
#include <asm/arch/regs-irq.h>
#include <asm/arch/regs-mem.h>
#include <asm/arch/regs-gpio.h>
#include <linux/poll.h>
#include <linux/wait.h>
#include <linux/interrupt.h>
#include <linux/sched.h>
#include <asm/arch/irqs.h>
#include <linux/ioctl.h>
#include <linux/spinlock.h>
#include <asm/system.h>
#include <linux/cdev.h>
#include <linux/mm.h>
#define DEVICE_NAME "test"
#define TEST_IRQ             IRQ_EINT15

typedef struct {
int channel;
int prescale;
}TEST_DEV;
static TEST_DEV testdev;

static irqreturn_t adcdone_int_handler(int irq, void *dev_id)
{
    printk(KERN_ALERT "%s:%s,%s\r\n", __FUNCTION__,__DATE__,__TIME__);
return IRQ_HANDLED;
}
static ssize_t test_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
{
return 0;
}
static int test_open(struct inode *inode, struct file *filp)
{
printk( "test opened\n");
return 0;
}
static int test_release(struct inode *inode, struct file *filp)
{
printk( "test closed\n");
return 0;
}

static struct file_operations dev_fops = {
owner: THIS_MODULE,
open: test_open,
read: test_read,
release: test_release,
};
static struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = &dev_fops,
};
static int __init dev_init(void)
{
int ret;
printk(KERN_ALERT "%s:%s,%s\r\n", __FUNCTION__,__DATE__,__TIME__);
writel((readl(S3C_GPNCON) & ~(0x3 <<30)) | (0x2 << 30), S3C_GPNCON); /* GPN15 to EINT */
writel((readl(S3C_GPNPU) & ~(0x3<<30)) | (0x2 << 30),S3C_GPNPU);
writel((readl(S3C_EINT0CON0) & ~(0x7 <<28)) | (0x2 << 28), S3C_EINT0CON0);  /* EINT15 to both edge triggered */
writel((readl(S3C_EINTFLTCON1)& ~(0x3 <<30)) | (0x1 << 31), S3C_EINTFLTCON1);
writel((readl(S3C_EINTPEND)&~(0x1<<15)),S3C_EINTPEND);
writel(readl(S3C_EINT0MASK) & ~(0x1 << 15), S3C_EINT0MASK);  /* EINT15 unmask */
writel(readl(S3C_VIC1INTENABLE) | (0x1 << 15), S3C_VIC1INTENABLE); /* EINT15 enable */


ret = request_irq(TEST_IRQ, adcdone_int_handler, IRQF_SHARED, DEVICE_NAME, &testdev);
if (ret) {
  return ret;
}
ret = misc_register(&misc);
return ret;
}
static void __exit dev_exit(void)
{
free_irq(TEST_IRQ, &testdev);
misc_deregister(&misc);
}
module_init(dev_init);
module_exit(dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("xxx");

这个是我的程序,我采用动态加载的方式加载驱动,但是我加载中断,程序能正常运行,但是我将驱动卸载后,如果还有中断产生,就会出现opps错误,就是因为中断资源没有清除干净产生的!
请问,我应该怎么样清除干净中断资源呢》谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-9 19:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表