- 论坛徽章:
- 0
|
并口:启动中断模式
D25的9和10脚焊接在一起,以便9脚高电平时带动10脚高电平,从而引起中断.
驱动程序大致如下:
全局变量 atomic i=ATOMIC_INIT(0);spin_t myspinlock;
write中:
{
outb(byte,port)--------byte是 11111111,即D25的2-9脚为高电平,port是并口的数据端口地址;
//udelay(5);
spin_lock(&myspinlock;
if(atomic_read(&i)==1000)
{
i=500;
printk(..............);
}
spin_unlock(...);
}
在module_init中:
spin_lock_init(&myspinlock);
atomic_add(500,&i);--------------将i改为500;
request_irq(irq,handle,flags,dev_name,dev_id);
在handle中断例程中:
spin_lock_irqsave(&myspinlock);
将i变为1000
spin_unlock_irqrestore(...);
我的本意是当程序执行到outb之后引发中断,中断执行就会将i改为1000,中断完后write中就会将i改回500,同时printk执行,以便我观察outb引发中断后是不是中断例程在spin_lock之前执行.
假如我的设备名为short,且在/dev下有 /dev/short0存在:
echo -ne "\377" > /dev/short0 ---------------\377即前面所写的byte为11111111
\但是没看到printk执行,如果加上udelay(5),则能看到printk执行,我不明白这其中的原因???????
向各位请教了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|