- 論壇徽章:
- 0
|
并口:啟動(dòng)中斷模式
D25的9和10腳焊接在一起,以便9腳高電平時(shí)帶動(dòng)10腳高電平,從而引起中斷.
驅(qū)動(dòng)程序大致如下:
全局變量 atomic i=ATOMIC_INIT(0);spin_t myspinlock;
write中:
{
outb(byte,port)--------byte是 11111111,即D25的2-9腳為高電平,port是并口的數(shù)據(jù)端口地址;
//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變?yōu)?000
spin_unlock_irqrestore(...);
我的本意是當(dāng)程序執(zhí)行到outb之后引發(fā)中斷,中斷執(zhí)行就會(huì)將i改為1000,中斷完后write中就會(huì)將i改回500,同時(shí)printk執(zhí)行,以便我觀察outb引發(fā)中斷后是不是中斷例程在spin_lock之前執(zhí)行.
假如我的設(shè)備名為short,且在/dev下有 /dev/short0存在:
echo -ne "\377" > /dev/short0 ---------------\377即前面所寫的byte為11111111
\但是沒(méi)看到printk執(zhí)行,如果加上udelay(5),則能看到printk執(zhí)行,我不明白這其中的原因???????
向各位請(qǐng)教了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|