阅读:1122回复:1
我的中断程序代码!
#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] |
|
|
沙发#
发布于:2001-12-26 07:54
各位,请多关照,还有几天就元旦了呀!!
|
|
|