irq与逻辑中断号的对应关系的建立

irq与逻辑中断号的对应关系的建立

ID:11785109

大小:51.00 KB

页数:9页

时间:2018-07-14

irq与逻辑中断号的对应关系的建立_第1页
irq与逻辑中断号的对应关系的建立_第2页
irq与逻辑中断号的对应关系的建立_第3页
irq与逻辑中断号的对应关系的建立_第4页
irq与逻辑中断号的对应关系的建立_第5页
资源描述:

《irq与逻辑中断号的对应关系的建立》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、WINCE5.0的中断深入了解1.总体了解流程首先描述wince5.0 (2440BSP)的中断流程:流程1.创建事件aà创建线程ISTà用InterruptInitialize〈系统中断号绑定线程IST〉à线程IST进入等待事件a状态(挂起状态)。流程2.外部引发中断à OEMInterruptHandler<屏蔽中断à把物理中断转换成系统中断,其他à重新使能中断。(ISR过程)>à操作系统根据系统中断号触发事件a。流程3.挂起的IST线程等待到事件a进入就绪状态,得到执行时间后开始执行中断服务代码, 最后调用InterruptDone重新使能当前的中断。

2、你需要为你的设备驱动写好中断处理请求(ISR)和中断服务线程(IST),并牢记这些事件的顺序:1).当一个中断发生,处理器跳转到核心的中断处理程序(exceptionhandler);2).这个中断处理程序禁止所有同级或低优先级的其他中断,然后为当前的IRQ调用对应的ISR;3).ISR中会按照中断标识的形式,返回一个逻辑中断号给中断处理程序,并会置位板级设备中断;4).中断处理程序重新使能所有的中断,而目前的中断已经在上一步中置位了,然后就触发对应的IST事件;5).IST就绪,服务于中断设备,然后完成对中断的处理;6).IST调用InterruptDon

3、e函数,该函数将顺序调用OAL层的OEMInterruptDone函数,它将重新使能当前的中断。1.1物理中断和逻辑中断的对应关系如何建立这个函数用将物理中断号来获取逻辑中断号:KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,&g_PwrButtonIrq,sizeof(UINT32),&g_PwrButtonSysIntr,sizeof(UINT32),NULL))其中:UINT32g_PwrButtonIrq=IRQ_EINT0;从help里面查出,KernelIoControl函数最终是调用OEMIoControl函

4、数。在D:WINCE500PLATFORMCOMMONSRCCOMMONIOCTL里找到它的定义了,关键代码://Executethehandler  rc=g_oalIoCtlTable.pfnHandler(      code,pInBuffer,inSize,pOutBuffer,outSize,pOutSize  );在SMDK2440SrcKernelOalioctl.c中可以找到:constOAL_IOCTL_HANDLERg_oalIoCtlTable[]={#include"ioctl_tab.h"};在SMDK2440

5、SrcIncioctl_tab.h文件中,找到这个表的定义。这个命令对应的函数是OALIoCtlHalRequestSysIntr。PLATFORMCOMMONSRCCOMMONIOCTLioctl.c找到这个函数定义://Findifitisneworoldcalltype  if(inpSize>sizeof(UINT32)&&pInpData[0]==-1){      //SecondUINT32containsflags,thirdandsubsequentsIRQs      sysIntr=OALIntrRequestSysIn

6、tr(inpSize/sizeof(UINT32)-2,&pInpData[2],pInpData[1]);} else{            //Thisislegacycall,firstUINT32containsIRQ      sysIntr=OALIntrRequestSysIntr(1,pInpData,0);  }在WINCE500PLATFORMCOMMONSRCCOMMONINTRBASEmap.c找到OALIntrRequestSysIntr定义:irq=pIrqs[0];sysIntr=g_oalIrq2SysIntr

7、[irq];在同一个文件中定义:staticUINT32g_oalIrq2SysIntr[OAL_INTR_IRQ_MAXIMUM];对这个表格赋值仅有两个地方:VOIDOALIntrStaticTranslate(UINT32sysIntr,UINT32irq){  OALMSG(OAL_FUNC&&OAL_INTR,(      L"+OALIntrStaticTranslate(%d,%d)r",sysIntr,irq  ));  if(irq

8、  g_oalSysIntr2Irq[sysIntr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。