|
看了2416的BSP(wince50)下对中断的处理,我蒙了!!!
首先这个BSP中有两个intr.c
1、SMDK2416\Src\Kernel\Oal\intr.c
2、SMDK2416\Src\Common\Intr\intr.c
看这两个intr.c发现能用的应该是在commo\intr\intr.c中,因为这个里面做了一些出里!
我现在需要的是做com16550的驱动,其中用到外部中断,接到了Eint3
在wince4下如果加一个外部中断 ,除了在驱动中添加一个IST外
还需要在kernel中的INTR.C中的OEMinterruptEnable 、OEMinterruptDisabel 、OEMinterruptDone中对应添加相应的
寄存器配置
我想wince50也需要这种配置,
可是我看了一下BSP中对powerbutton的中断处理,想仿照这个对中断进行设置,
其中这个驱动的中断用到了EINT0
但是我在intr.c中并没有看到对eint0的处理
在intr.c中只有对:
OALIntrEnableIrqs函数:
else if (irq <= IRQ_EINT7)
{
// Use external mask register
CLRREG32(&g_pIntrRegs->INTMSK1, 1 << IRQ_EINT4_7);
CLRREG32(&g_pPortRegs->EINTMASK, 1 << (irq - IRQ_EINT4 + 4));
}
OALIntrDisableIrqs函数:
无外部中断处理
OALIntrDoneIrqs函数:
无外部中断处理
OEMInterruptHandler函数:
if (irq == IRQ_EINT4_7 || irq == IRQ_EINT8_23) // 4 or 5
{
// Find external interrupt number
mask = INREG32(&g_pPortRegs->EINTPEND);
mask &= ~ INREG32(&g_pPortRegs->EINTMASK);
mask = (mask ^ (mask - 1)) >> 5;
irq2 = IRQ_EINT4;
while (mask != 0)
{
mask >>= 1;
irq2++;
}
// Mask and clear interrupt
mask = 1 << (irq2 - IRQ_EINT4 + 4);
SETREG32(&g_pPortRegs->EINTMASK, mask);
OUTREG32(&g_pPortRegs->EINTPEND, mask);
// Clear primary interrupt
mask = 1 << irq;
OUTREG32(&g_pIntrRegs->SRCPND1, mask);
OUTREG32(&g_pIntrRegs->INTPND1, mask);
// From now we care about this irq
irq = irq2;
}
也就是说在powerbutton驱动中用到了EINT0但是在intr.c中对ISR的处理并没有EINT0,
(而这个POWERBUTTON驱动是BSP自带的,应该是可以用的)
那么对外部中断0-----3的ISR处理是在哪里呢????
谢谢各位
|
|