- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
irq与逻辑中断号的对应关系的建立
WINCE5.0的中断深入了解1.总体了解流程首先描述wince5.0?(2440BSP)的中断流程:流程1.创建事件a?创建线程IST?用InterruptInitialize〈系统中断号绑定线程IST〉?线程IST进入等待事件a状态(挂起状态)。流程2.外部引发中断??OEMInterruptHandler屏蔽中断?把物理中断转换成系统中断,其他?重新使能中断。(ISR过程)?操作系统根据系统中断号触发事件a。流程3.挂起的IST线程等待到事件a进入就绪状态,得到执行时间后开始执行中断服务代码,?最后调用InterruptDone重新使能当前的中断。你需要为你的设备驱动写好中断处理请求(ISR)和中断服务线程(IST),并牢记这些事件的顺序:1).当一个中断发生,处理器跳转到核心的中断处理程序(exception handler );2).这个中断处理程序禁止所有同级或低优先级的其他中断,然后为当前的IRQ调用对应的ISR;3).ISR中会按照中断标识的形式,返回一个逻辑中断号给中断处理程序,并会置位板级设备中断;4).中断处理程序重新使能所有的中断,而目前的中断已经在上一步中置位了,然后就触发对应的IST事件;5).IST就绪,服务于中断设备,然后完成对中断的处理;6).IST调用InterruptDone函数,该函数将顺序调用OAL层的OEMInterruptDone函数,它将重新使能当前的中断。1.1物理中断和逻辑中断的对应关系如何建立这个函数用将物理中断号来获取逻辑中断号:KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, g_PwrButtonIrq, sizeof(UINT32), g_PwrButtonSysIntr, sizeof(UINT32), NULL))其中:UINT32 g_PwrButtonIrq = IRQ_EINT0;从help里面查出,KernelIoControl函数最终是调用OEMIoControl函数。在D:\WINCE500\PLATFORM\COMMON\SRC\COMMON\IOCTL里找到它的定义了,关键代码:// Execute the handler? ? rc = g_oalIoCtlTable.pfnHandler(? ?? ???code, pInBuffer, inSize, pOutBuffer, outSize, pOutSize? ? );在SMDK2440\Src\Kernel\Oal\ioctl.c中可以找到:const OAL_IOCTL_HANDLER g_oalIoCtlTable[] = {#include ioctl_tab.h};在SMDK2440\Src\Inc\ioctl_tab.h文件中,找到这个表的定义。这个命令对应的函数是OALIoCtlHalRequestSysIntr。PLATFORM\COMMON\SRC\COMMON\IOCTL\ioctl.c找到这个函数定义:// Find if it is new or old call type? ? if (inpSize sizeof(UINT32) pInpData[0] == -1) {? ?? ???// Second UINT32 contains flags, third and subsequents IRQs? ?? ???sysIntr = OALIntrRequestSysIntr(inpSize/sizeof(UINT32) - 2, pInpData[2], pInpData[1]); }?else {? ?? ???? ?? ???// This is legacy call, first UINT32 contains IRQ? ?? ???sysIntr = OALIntrRequestSysIntr(1, pInpData, 0);? ? }在WINCE500\PLATFORM\COMMON\SRC\COMMON\INTR\BASE\map.c找到OALIntrRequestSysIntr定义:irq = pIrqs[0];sysIntr = g_oalIrq2SysIntr[irq];在同一个文件中定义:static UINT32 g_oalIrq2SysIntr[OAL_INTR_IRQ_MAXIMUM];对这个表格赋值仅有两个地方:VOID OALIntrStaticTranslate(UINT32 sysIntr, UINT32 irq){? ? OALMSG(OAL_FUNCOAL_INTR, (? ?? ???L+O
您可能关注的文档
最近下载
- 金属非金属矿山安全标准化规范地下矿山实施.doc VIP
- 工厂物料计划编制:流程、规范、4大编制方案.docx VIP
- 2025年预防接种技能竞赛预防接种管理测试题及答案.docx VIP
- YB-4001.1-2007钢格栅板及配套件-第1部分:钢格栅板(中文版).docx VIP
- 全国预防接种技能竞赛理论训练题库及答案(传染病学基础154题).docx VIP
- 环氧树脂的吸水研究.doc VIP
- 全国预防接种技能竞赛理论训练题库及答案冷链系统管理(89题).docx VIP
- 集装箱码头装卸作业与业务管理.pptx
- 闽楠轻基质容器育苗技术规程.pdf VIP
- 全国预防接种技能竞赛理论训练题库及答案(预防接种管理447题).docx VIP
文档评论(0)