wince中断机制和在驱动中调用中断

中断的初始化过程:

中断处理函数是在oal中,文件目录是在intr.c中

OALIntrInit();

OALIntrRequestIrqs();

OALIntrEnableIrqs();

OALIntrDisableIrqs();

OALIntrDoneIrqs();

OEMInterruptHandler();

OEMInterruptEnable();//在platform\common\src\common\intr\common\oem.c

OEMInerruptDisable();//在platform\common\src\common\intr\common\oem.c

OEMInterruptDone();//在platform\common\src\common\intr\common\oem.c

中断的初始化函数是在OEMInit()中调用。

 

wince6.0中断的调用过程:

1、arm产生中断信号。

2、OEMInterruptHandler开始处理外部中断信号,比如eint0产生中断,这个函数就将eint0中断关闭(屏蔽中断),把中断号转成逻辑中断。触发中断处理线程。

 

中断注册过程:

Irq = IRQ_IIC;
    if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &Irq, sizeof(UINT32), &gIntrIIC, sizeof(UINT32), NULL))//得到物理中断号的逻辑中断号。
    {
        DEBUGMSG(ZONE_ERR, (TEXT("ERROR: Failed to request the IIC sysintr.\r\n")));
        gIntrIIC = SYSINTR_UNDEFINED;
        return(FALSE);
    }
//    RETAILMSG(1, (TEXT("IIC IRQ mapping: [IRQ:%d->sysIRQ:%d].\r\n"), Irq, gIntrIIC));

        // initialize the interrupt
        if( !InterruptInitialize(gIntrIIC, pI2C->ISTEvent, NULL, 0) ) //初始化中断,逻辑中断号与事件关联
        {
            dwErr = GetLastError();
            DEBUGMSG(ZONE_ERR,(TEXT("I2C_Init ERROR: Unable to initialize interrupt: %u\r\n"), dwErr));
            goto _init_error;
        }

        InterruptDone(gIntrIIC); //清楚中断,调用底层函数OEMInterrputDone()->OALIntrDoneIrqs();

        // create the IST
        if ( (pI2C->IST = CreateThread(NULL, 0, I2C_IST, (LPVOID)pI2C, 0, NULL)) == NULL)//创建中断处理线程
        {
            dwErr = GetLastError();
            DEBUGMSG(ZONE_ERR,(TEXT("I2C_Init ERROR: Unable to create IST: %u\r\n"), dwErr));
            goto _init_error;
        }

        // TODO: registry override
        if ( !CeSetThreadPriority(pI2C->IST, I2C_THREAD_PRIORITY)) {
            dwErr = GetLastError();
            DEBUGMSG(ZONE_ERR, (TEXT("I2C_Init ERROR: CeSetThreadPriority ERROR:%d\n"), dwErr));
            goto _init_error;
        }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值