中断处理可以分为两部分中断服务b例程bisr

中断处理可以分为两部分中断服务b例程bisr

ID:30451294

大小:74.04 KB

页数:7页

时间:2018-12-30

中断处理可以分为两部分中断服务b例程bisr_第1页
中断处理可以分为两部分中断服务b例程bisr_第2页
中断处理可以分为两部分中断服务b例程bisr_第3页
中断处理可以分为两部分中断服务b例程bisr_第4页
中断处理可以分为两部分中断服务b例程bisr_第5页
资源描述:

《中断处理可以分为两部分中断服务b例程bisr》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、中断在系统设计中的应用非常广泛,可以说,硬件中断、软件中断无处不在,在WINCE下驱动开发更是如此,比如:按键中断、触摸屏中断、AUDIO中断、DMA中断.....等等,几乎含概每个模块。因此,了解中断的处理过程对驱动开发极其重要,下面对WINCE下的中断处理过程做一个简单介绍。    中断处理可以分为两部分:中断服务例程-ISR、中断服务线程-IST。系统在处理中断异常的时候,应该要尽可能快的完成,因此,我们应该ISR中做简短的处理,把中断标识返回给中断处理器,越快越好。那么就要把大部分的处理留给IST来处理。我们

2、可以简单的认为,ISR的任务就是完成把硬件中断也就是物理中断转为系统中断并返回。    下面再来了解一下IST,IST就是一个线程,在驱动初始化的时候创建并等待一个事件,当然,在这之前要先创建一个事件,并与中断相关联起来,当中断产生以后该事件触发IST,IST里通常是用户的处理程序。IST的实现必须先实现两个过程:IST的中断必须和一个事件相关联,IST必须通过WaitForSingleObject来等待这个事件的唤醒,IST的最后要调用INTERRUPTDONE来对注销中断,否则该中断只能用一次,一般我们在驱动的X

3、XX_INIT函数中实现。    IST在BSP/COMMON/INTR/intr.c中,这里面的内容包括init、enable、disable、oeminterrupthandler等函数,主要是对中断的初始化、使能、处理等,其中最关键的是oeminterrupthandler。以下是我在该函数中对EINT的简单处理部分代码:if(irq==IRQ_EINT4_7

4、

5、irq==IRQ_EINT8_23){//4or5            //Findexternalinterruptnumber         

6、   mask=INREG32(&g_pPortRegs->EINTPEND);            mask&=~INREG32(&g_pPortRegs->EINTMASK);            mask=(mask^(mask-1))>>5;            irq2=IRQ_EINT4;            while(mask!=0){                mask>>=1;                irq2++;            }  //Maskandclearint

7、errupt            mask=1<<(irq2-IRQ_EINT4+4);            SETREG32(&g_pPortRegs->EINTMASK,mask);            OUTREG32(&g_pPortRegs->EINTPEND,mask);            //Clearprimaryinterrupt            mask=1<SRCPND,mask);         

8、   OUTREG32(&g_pIntrRegs->INTPND,mask);            //Fromnowwecareaboutthisirq            irq=irq2;else{            //Maskandclearinterrupt            mask=1<INTMSK,mask);            OUTREG32(&g_pIntrRegs->SRCPND,mask);  

9、          OUTREG32(&g_pIntrRegs->INTPND,mask);        }        //FirstfindifIRQisclaimedbychain        sysIntr=NKCallIntChain((UCHAR)irq);        if(sysIntr==SYSINTR_CHAIN

10、

11、!NKIsSysIntrValid(sysIntr)){            //IRQwasn'tclaimed,usestaticmapping            s

12、ysIntr=OALIntrTranslateIrq(irq);        }而IST的具体实现过程可以参照下面的步骤:1、创建一个事件。用createEvent来实现2、定义一个中断DWORDkey_intr=SYSINTR_NOP;3、得到ISR返回的中断号,并通过KernelIoControl将其与上面定义的中断相关联。4、将创建的事

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

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

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