免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2187 | 回复: 2
打印 上一主题 下一主题

急!急!急!并口中断触发问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-03 16:38 |只看该作者 |倒序浏览
在研究ADEOS域时遇到了如下问题。下面这个程序是根据网上的程序修改的。我的平台是linux-2.6.24,打的Adeos-ipipe补丁是2.0的。

程序代码如下:
#include <linux/version.h>
#include <linux/module.h>
#include <asm/io.h>

#include <linux/ipipe.h>

#include <linux/time.h>

#define BASEPORT 0x378
#define PAR_INT 7
        
static struct ipipe_domain this_domain;
int counter = 0;

void handler(unsigned irq)
{
        printk(">>> PARALLEL PORT INT HANDLED: counter=%d\n", counter);
        counter++;
        ipipe_control_irq(PAR_INT,0,IPIPE_ENABLE_MASK);
        ipipe_propagate_irq(PAR_INT);
}

void domain_entry (void)
{
        int a,k;

        printk("Domain %s has start!\n",ipipe_current_domain->name);
        ipipe_virtualize_irq(ipipe_current_domain,PAR_INT,(ipipe_irq_handler_t)&handler,NULL,NULL,IPIPE_DYNAMIC_MASK);
        printk("handler has registered!\n");

        printk("Set interrupt mode of this irq\n") ;
        //set port to interrupt mode; pins are output
        outb_p(0x10, BASEPORT + 2);
        ipipe_control_irq(PAR_INT,0,IPIPE_ENABLE_MASK);

        k = 10;
        while(k--)
        {               

          outb_p(0x00,BASEPORT);
          a = inb(BASEPORT);
          printk("ACK : %d\n",a);
         // udelay(5);

          outb_p(0xff,BASEPORT);        
          a = inb(BASEPORT);
          printk("ACK : %d\n",a);
        }
        
        for( ;; )
        ipipe_suspend_domain();
}
        
static int __init mod_init (void)
{
    struct ipipe_domain_attr attr;
        ipipe_init_attr (&attr);
        attr.name     = "My_Domain";
        attr.priority = IPIPE_ROOT_PRIO + 1;
        attr.entry    = &domain_entry;
        return ipipe_register_domain(&this_domain,&attr);
}

static void __exit mod_exit (void)
{
        ipipe_unregister_domain(&this_domain);
}

module_init(mod_init);
module_exit(mod_exit);
MODULE_LICENSE("GPL") ;


网上说,将并口的针脚9和10短接后就能产生中断,但是编译成功后我加载这个模块系统就死掉了。 在加载模块之前我把系统原先所注册的7号中断处理例程parport卸载了。也检查了我的BIOS里并口是打开的,并且是指向(378/IRQ7),用dmesg查看后发现内核的打印信息如下:
I-pipe: Domain My_Domain registered.
...........
ACK :255
ACK :255
......
.......
ACK :255
BUG:soft lockup -CPU#1 stuck for 11s! [insmod:3708]
Pid: 3708,comm:insmod Not tainted



请大家帮帮忙,帮我分析一下问题出在哪?小女子不盛感激!

论坛徽章:
0
2 [报告]
发表于 2010-04-05 10:36 |只看该作者
顶起来!希望有高手能指教一下!谢谢

论坛徽章:
0
3 [报告]
发表于 2010-05-24 15:19 |只看该作者
菜鸟帮顶一下!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP