WinCE中断处理过程
2006-10-04 21:33
225 查看
l 当一个中断发生后,发送到内核异常处理器(Exception Handler)
l 内核的中断支持处理器调用OAL函数OEMInterruptDisable屏蔽这个中断(../hal/Cfw.c)
l 内核调用ISR,OEMInterruptHandler(../hal/arm/Armint.c),ISR按如下方式查询中断号:
else if (IntPendVal == INTSRC_EINT1) // Keyboard interrupt is connected to EINT1.
// INTSRC_EINT1 在 ../inc/s2410.h 中定义
{
s2410INT->rINTMSK |= BIT_EINT1;
s2410INT->rSRCPND = BIT_EINT1;
if (s2410INT->rINTPND & BIT_EINT1) s2410INT->rINTPND = BIT_EINT1;
return(SYSINTR_KEYBOARD);
//在Oalintr.h中定义或I:/WINCE420/PUBLIC/COMMON/OAK/INC/nkintr.h
}
l ISR返回中断号(逻辑中断标识符)给内核,内核根据此中断号绑定(InterruptInitialize函数绑定中断号核事件)的事件(Event)唤醒事件的等待线程(IST),IST在用户态完成中断处理。
l IST调用InterruptDone来告诉操作系统中断处理完毕,操作系统再次调用OAL中的OEMInterruptDone函数完成中断的处理。
l 内核的中断支持处理器调用OAL函数OEMInterruptDisable屏蔽这个中断(../hal/Cfw.c)
l 内核调用ISR,OEMInterruptHandler(../hal/arm/Armint.c),ISR按如下方式查询中断号:
else if (IntPendVal == INTSRC_EINT1) // Keyboard interrupt is connected to EINT1.
// INTSRC_EINT1 在 ../inc/s2410.h 中定义
{
s2410INT->rINTMSK |= BIT_EINT1;
s2410INT->rSRCPND = BIT_EINT1;
if (s2410INT->rINTPND & BIT_EINT1) s2410INT->rINTPND = BIT_EINT1;
return(SYSINTR_KEYBOARD);
//在Oalintr.h中定义或I:/WINCE420/PUBLIC/COMMON/OAK/INC/nkintr.h
}
l ISR返回中断号(逻辑中断标识符)给内核,内核根据此中断号绑定(InterruptInitialize函数绑定中断号核事件)的事件(Event)唤醒事件的等待线程(IST),IST在用户态完成中断处理。
l IST调用InterruptDone来告诉操作系统中断处理完毕,操作系统再次调用OAL中的OEMInterruptDone函数完成中断的处理。
相关文章推荐
- WinCE中中断的处理过程(驱动开发人员角度)
- WinCE中中断的处理过程
- wince中断的处理过程
- 【转载】WinCE中中断的处理过程(驱动开发人员角度)
- WinCE中中断的处理过程(驱动开发人员角度)
- 转载—— WinCE中中断的处理过程(驱动开发人员角度)
- WinCE下的中断处理过程15814101899
- WinCE中中断的处理过程(驱动开发人员角度)
- wince中断处理过程
- WinCE中中断的处理过程(驱动开发人员角度)
- WinCE中中断的处理过程(驱动开发人员角度)
- WinCE中中断的处理过程(驱动开发人员角度)
- LINUX中断处理过程
- Linux kernel的中断子系统之(六):ARM中断处理过程
- uCOS II在ARM处理器上移植过程中的中断处理
- S3C2410 && WinCE6.0的中断处理分析(转载)
- linux 中断机制的处理过程
- 保护模式下 中断处理程序的过程
- ARM中断处理过程
- PowerPC处理器上vxWorks 异常和中断处理过程解析