积极答复者
请问ARM上CE5.0的系统中断号在哪里定义的,比如键盘系统中断号SYSINTR_KEYBOARD 我一直没有找到啊!

问题
答案
-
下面列出一些关于中断的函数调用过程,具体代码可以到BSP和微软提供的代码里找,代码写得很详细:
系统启动: ARMInit->OEMInit->OALIntrInit->OALIntrMapInit 这里是映射中断
逻辑中断请求:KernelIoControl->OEMIoControl->OALIoCtlHalRequestSysIntr->OALIntrRequestSysIntr 返回设定的IRQ中断对应的逻辑中断,使用IOCTL_HAL_REQUEST_SYSINTR操作码。
ISR实现: OEMInterruptHandler->NKCallIntrChain/OALIntrTranslateIrqs 返回发生中断的IRQ对应的逻辑中断
中断初始化: InterruptInitialize->OEMInterruptEnable->OALIntrTranslateSysIntr->OALIntrEnableIrqs 对返回的SYSINTR对应的IRQ寄存器进行设置,屏蔽该中断。
其它的与上面类似。- 已标记为答案 微软中文技术论坛Moderator 2009年6月12日 6:21
全部回复
-
下面列出一些关于中断的函数调用过程,具体代码可以到BSP和微软提供的代码里找,代码写得很详细:
系统启动: ARMInit->OEMInit->OALIntrInit->OALIntrMapInit 这里是映射中断
逻辑中断请求:KernelIoControl->OEMIoControl->OALIoCtlHalRequestSysIntr->OALIntrRequestSysIntr 返回设定的IRQ中断对应的逻辑中断,使用IOCTL_HAL_REQUEST_SYSINTR操作码。
ISR实现: OEMInterruptHandler->NKCallIntrChain/OALIntrTranslateIrqs 返回发生中断的IRQ对应的逻辑中断
中断初始化: InterruptInitialize->OEMInterruptEnable->OALIntrTranslateSysIntr->OALIntrEnableIrqs 对返回的SYSINTR对应的IRQ寄存器进行设置,屏蔽该中断。
其它的与上面类似。- 已标记为答案 微软中文技术论坛Moderator 2009年6月12日 6:21
-
你回答的很正确! 我现在用的是ARMS3C2440开发板,单位要自己做一个矩阵键盘,通过看BSP的代码知道这个开发板是用外部中断EINT1和SYSINTR_KEYBOARD映射的,所以我想现在就利用EINT1做键盘的物理中断,可以吗?
但我发现代码驱动里定义了一个全局对象 extern Ps2Keybd *v_pp2k; 驱动里的很多函数都是这个对象的函数,难道这个驱动是为PS2键盘写的? 矩阵键盘不可以利用EINT1?
但我又看到了这个数组在Pddlist.cpp定义了这3个函数:
BOOL
WINAPI
PS2_NOP_Entry(
UINT uiPddId,
PFN_KEYBD_EVENT pfnKeybdEvent,
PKEYBD_PDD *ppKeybdPdd
);BOOL
WINAPI
Matrix_Entry(
UINT uiPddId,
PFN_KEYBD_EVENT pfnKeybdEvent,
PKEYBD_PDD *ppKeybdPdd
);PFN_KEYBD_PDD_ENTRY g_rgpfnPddEntries[] = {
PS2_NOP_Entry,
Matrix_Entry,
NULL
};难道驱动能判别键盘的类型,然后进入对应的PDD函数吗?请高手指点!!!