xinyu_hao
驱动小牛
驱动小牛
  • 注册日期2005-12-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1005分
  • 威望186点
  • 贡献值0点
  • 好评度145点
  • 原创分0分
  • 专家分0分
阅读:1169回复:6

请问一个中断问题

楼主#
更多 发布于:2007-01-15 09:32
  我在oal层OEMInterruptHandler函数中定义
else if(ulVic2Irq & INT2_GPIO)
    {
    gpioAIntrState=*GPIO_INTSTATUSA;
       if(gpioAIntrState & 0x40)
       {
              *GPIO_AEOI=0x40;//CANINTTER_GPIO;            
              RETAILMSG(1,(TEXT("*---*startsysintr CANhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\r\n")));

       }
      *VIC2_INTCLEAR = INT2_GPIO;
      retval=SYSINTR_CAN;
    }
而且我产生中断的时候也执行了RETAILMSG(1,(TEXT("*---*startsysintr CANhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\r\n")));

说明isr已经返回了系统中断号SYSINTR_CAN;
我在驱动中定义
pCanInfo->hInterEvent=CreateEvent(0,FALSE,FALSE,NULL);
    if(!pCanInfo->hInterEvent)
    {
        RETAILMSG(1,(TEXT("CAN:CreateEvent_Faileaaaaaaaaaaaaaaaaaaaa")));
    }

    if(!InterruptInitialize(SYSINTR_CAN,pCanInfo->hInterEvent,NULL,0))
    {
        RETAILMSG(1,(TEXT("InterruptInitialize Failed!!hhhhhhhhhhhhhhhhhhhhhhhhhh\n")));
    }
  
       pCanInfo->hInterThread=CreateThread(NULL,
                           0,
                           CanIST,
                           pCanInfo,
                           CREATE_SUSPENDED,
                           0);
   if(!pCanInfo->hInterThread)
    {
        RETAILMSG(1,(TEXT("CANTHREAT:CREATETHREAD_FALSEhhhhhhhhhhhhhhhhhhhhhhhhhh\n")));
        return 0;
    }

    dwISTPriority=100;//250;

    if(!CeSetThreadPriority(pCanInfo->hInterThread,dwISTPriority))
    {
        RETAILMSG(1,(TEXT("CeSetThreadPriority Failed!!hhhhhhhhhhhhhhhhhhhhhhhhhh\n")));
    }
我在ist中WaitForSingleObject(pCanInfoIST->hInterEvent,INFINITE);
产生中断后驱动中却没有反应,请问这是为什么啊?
我觉得这些设置的没错啊,请兄弟们帮忙了。
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-15 19:56
我想可能有以下几个方面:
1.SYSINTR_CAN在OAL与DRIVER的值是不是一样.
2.IST中这些代码有没有执行到,你可以在这些函数返回正确值时也打个信息看看.
3.驱动有没有加载.

流程应该没错,多查一下吧.
学海无涯
xinyu_hao
驱动小牛
驱动小牛
  • 注册日期2005-12-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1005分
  • 威望186点
  • 贡献值0点
  • 好评度145点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-16 09:28
先谢谢mirocsun大哥
1我在驱动和oal都是调用的oalint。h文件中的定义,应该没有问题而且我返回了SYSINTR_CAN的值,是没有问题的,
2我单步走我的程序到了waitforsingleobject时就停下了等待信号
3驱动应该加载了,驱动中可以设置寄存器

我发现我给了中断信号后返回三条信息

1:61172 PID:e3fd4f66 TID:23f5e63e *---* start sysintr CANhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
 2: 61172 PID:e3fd4f66 TID:23f9e002 Prefetch Abort: Thread=83fa3db8 Proc=820290b0 'device.exe'
 3: 61173 PID:e3fd4f66 TID:23f9e002 AKY=00000005 PC=01ea1338 RA=01ea1338 BVA=01ea1338 FSR=00000005
第一条是我在OEMInterruptHandler中添加的 表示响应了中断,后两句好像是预取异常的提示,我不知道该怎么解决了。
xinyu_hao
驱动小牛
驱动小牛
  • 注册日期2005-12-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1005分
  • 威望186点
  • 贡献值0点
  • 好评度145点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-16 13:37
我发现系统启动以前,加载了我的驱动就给中断信号驱动的ist就能响应,但是系统起来以后就向上面的一样了。
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-16 19:52
那是不是InterruptDone函数处理的不对啊?来过一次中断以后就再不来了?
或者IST写的有问题,已经退出了?
学海无涯
xinyu_hao
驱动小牛
驱动小牛
  • 注册日期2005-12-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1005分
  • 威望186点
  • 贡献值0点
  • 好评度145点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-17 09:32
多谢microsun大哥了,是我没说清楚,我在下载系统之前就一直加上中断信号,这样我看到系统加了加载了我的驱动程序之后就响应了中断,我在ist中是个死循环,所以就一直响应中断,当我去掉中断信号以后系统就启动了,我这时再给中断信号ISR响应了之后就输出
2: 61172 PID:e3fd4f66 TID:23f9e002 Prefetch Abort: Thread=83fa3db8 Proc=820290b0 'device.exe'
3: 61173 PID:e3fd4f66 TID:23f9e002 AKY=00000005 PC=01ea1338 RA=01ea1338 BVA=01ea1338 FSR=00000005
这两条消息
xinyu_hao
驱动小牛
驱动小牛
  • 注册日期2005-12-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1005分
  • 威望186点
  • 贡献值0点
  • 好评度145点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-17 09:35
就是系统完全启动之前能正常响应中断,系统启动之后就不行了,提示有预取异常
游客

返回顶部