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

答案

  • 下面列出一些关于中断的函数调用过程,具体代码可以到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寄存器进行设置,屏蔽该中断。
    其它的与上面类似。
    2008年10月31日 8:06

全部回复

  • smdk2440下是在Oalintr.h里面,s3c2440a和s3c2443是在bsp_cfg.h里定义逻辑中断号。但现在一般都用动态映射比较多,所以大部分的逻辑中断号都是用OALIntrMapInit()函数与定义的IRQ映射,而不是直接写出。中断时ISR会调用OALIntrTranslateIrq返回中断号。
    个人理解,望各位老师指正。
    2008年10月29日 5:23
  •  

    大哥 你说的“大部分的逻辑中断号都是用OALIntrMapInit()函数与定义的IRQ映射,而不是直接写出。中断时ISR会调用OALIntrTranslateIrq返回中断号”是静态映射的方法啊,能不能详细讲下动态映射的原理,最好附上源码!
    2008年10月29日 14:18
  • 下面列出一些关于中断的函数调用过程,具体代码可以到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寄存器进行设置,屏蔽该中断。
    其它的与上面类似。
    2008年10月31日 8:06
  •  

    你回答的很正确! 我现在用的是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函数吗?请高手指点!!!

    2008年11月1日 11:48