|
在OEMInterruptHandler函数中,调用了NKCallIntChain函数,是不是说,DMA中断到来时,系统默认先处理成ISR处理链,如果返回的是SYSINTR_CHAIN,再处理成静态映射的DMA中断?
ULONG OEMInterruptHandler(ULONG ra)
{
UINT32 irq = OAL_INTR_IRQ_UNDEFINED;
UINT32 sysIntr = SYSINTR_NOP;
...
// First find if IRQ is claimed by chain
sysIntr = (UINT16)NKCallIntChain((UCHAR)irq);
if (sysIntr == (UINT16)SYSINTR_CHAIN || !NKIsSysIntrValid(sysIntr))
{
// IRQ wasn't claimed, use static mapping
sysIntr = OALIntrTranslateIrq(irq);
}
...
return (sysIntr);
}
另外,KernelIoControl返回的SYSINTR为16,也即是SYSINTR_FIRMWARE,是不是说明返回有误?因为BSP中,系统中断号都是从SYSINTR_FIRMWARE+1开始的。
如:
// Static SYSINTR Mapping for driver.
#define SYSINTR_OHCI (SYSINTR_FIRMWARE+1) // 17
#define SYSINTR_TOUCH (SYSINTR_FIRMWARE+2) // 18
#define SYSINTR_TOUCH_CHANGED (SYSINTR_FIRMWARE+3) // 19
#define SYSINTR_KEYPAD (SYSINTR_FIRMWARE+4) // 20 |
|