whutwx
驱动牛犊
驱动牛犊
  • 注册日期2001-08-06
  • 最后登录2003-03-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1121回复:1

我的中断程序代码!

楼主#
更多 发布于:2001-12-24 16:46
#include \"c:/windriver/include/windrvr.h\"
#include \"c:/windriver/include/windrvr_int_thread.h\"
#include <stdio.h>
enum {MY_IRQ=9};
HANDLE hWD;
WD_INTERRUPT Intrp;
static char line[256];
VOID Interrupt_handler(PVOID pData)
{
 printf(\"截获的中断的数目为%d\\n\",Intrp.dwCounter);
}
int main()
{
 WD_CARD_REGISTER cardreg;
 WD_VERSION verbuf;
  hWD=WD_Open();
  if(hWD==INVALID_HANDLE_VALUE)
{
   printf(\"error!\\n\");
return 0;
}
 BZERO(verbuf);
WD_Version(hWD,&verbuf);
if(verbuf.dwVer<WD_VER)
{
 printf(\"Ver error\");
return 0;
}
BZERO(cardreg);
cardreg.Card.dwItems=1;
cardreg.Card.Item[0].item=ITEM_INTERRUPT;
cardreg.Card.Item[0].fNotSharable=FALSE;
cardreg.Card.Item[0].I.Int.dwInterrupt=MY_IRQ;
cardreg.Card.Item[0].I.Int.dwOptions=1;
cardreg.fCheckLockOnly=FALSE;
WD_CardRegister(hWD,&cardreg);
if(cardreg.hCard==0)
  {
    printf(\"can\'t lock\");
}
else
{
 HANDLE thread_handle;
 BZERO(Intrp);
 Intrp.hInterrupt=cardreg.Card.Item[0].I.Int.hInterrupt;
 Intrp.Cmd=NULL;
 Intrp.dwCmds=0;
 Intrp.dwOptions=0;
 printf(\"Begin\\n\");
 if (!InterruptThreadEnable(&thread_handle,hWD,&Intrp,&Interrupt_handler,NULL))
{
  printf(\"Enable failed\");
  }
else
{
printf(\"enter stop\");


InterruptThreadDisable(&thread_handle);
}
}
WD_CardUnregister(hWD,&cardreg);
WD_Close(hWD);
return 0;
}
这个程序代码基本是windriver提供的例子,我把fnotshared的值设置为TRUE的时候,收不到中断,设置为false时可以收到中断,可是我单步运行发现Intrp.hInterrupt值为1,当运行到InterruptThreadDisable(&thread_handle);时候,提示debug assertion failed.请问什么原因?怎样才能把INTA#电平拉高?
这个时候我收到的中断会不会是其他设备发出呢?为什么?



[编辑 -  12/24/01 作者: whutwx]
whutwx
whutwx
驱动牛犊
驱动牛犊
  • 注册日期2001-08-06
  • 最后登录2003-03-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-26 07:54
各位,请多关照,还有几天就元旦了呀!!
whutwx
游客

返回顶部