我在主程序中开中断了。FPGA通过给CH341的int#脚一个上升沿脉冲,使CH341发生中断。但是CH341捕捉到前几个中断后便不再发生中断。 但是我通过CH341GetStatus(iIndex,Status)函数却可以每次都能捕捉到INT#脚的上升沿变化。 请问这是怎么回事?难道是驱动函数漏掉了一些中断?
下面是测试程序:通过D0产生上升沿 #include #include #include #include #include
#include "CH341DLL.H" // CH341的动态链接库
static int count=0;
void CALLBACK InterruptEvent(void) //设备0中断通知消息 { count++; //中断次数记数 printf("interrupt times=%d\n",count); }
//程序入口 void main ( ) {
printf( "\nCH341 Interrupt Test Program V1.0 , Copyright (C) S.zk 2008.7\n" );
// 需要使用DLL则需要先加载 printf( "*** Load DLL: CH341DLL.DLL \n" ); if ( LoadLibrary( "CH341DLL.DLL" ) == NULL ) return; // 加载DLL失败,可能未安装到系统中
printf( "*** CH341OpenDevice: 0# \n" ); if ( CH341OpenDevice( 0 ) == INVALID_HANDLE_VALUE ) return; /* 使用之前必须打开设备 */
if( CH341SetIntRoutine( 0, InterruptEvent) == NULL ) return; /* 指定中断服务程序 */
do{ CH341Set_D5_D0( 0, 0x01, 0); CH341Set_D5_D0( 0, 0x01, 1); }while(count < 1000);//D0产生上升沿
if( CH341SetIntRoutine( 0, NULL) == NULL ) return; /* 取消中断服务 */ printf( "*** CH341CloseDevice: 0 \n" ); CH341CloseDevice( 0 );
printf( "\nExit.\n" ); getch(); }