我有一个问题,可能比较幼稚,问一下,我用CH365做了一个数据采集卡,我想问的是,如何在软件中进入中断呀,也就是PC中的中断应用程序如何去写,什么时候才能去执行,单片机中有相应的中断入口,可应用程序呢?能否给出相应的代码? 还有,如果我想每次PC中读入16位,要怎么设置呢?[Emot]5[/Emot]
CH365的动态锭接库DLL提供了伪中断服务,实际的中断服务仍然是在驱动程序库完成的,只是在完成后 向DLL发了个通知,由DLL再调用伪中断服务子程序。由于涉及到系统层与应用层切换以及线程切换, 所以中断频率不能太高,如果太高,虽然驱动程序能够收到中断,但是等到通知到应用层,再调用客户 的伪中断服务程序,最慢可能需要10毫秒,从而在应用层丢失中断。如果产品的中断频率大于几百次每 秒,那么建议自己写驱动程序或者改写我们的驱动,在驱动程序中实现中断服务。 BOOL WINAPI CH365mSetIntRoutine( // 设定中断服务程序 ULONG iIndex, // 指定CH365设备序号 mPCH365_INT_ROUTINE iIntRoutine ); // 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序
iCommand2.mFunction = mFuncReadIoByte; //发送I/O口写字命令,命令代码,该命令在硬件中断时由驱动程序执行 iCommand2.mAddress = &mIOBaseAddr2->mCh365IoTime; //读硬件循环计数寄存器 iCommand2.mLength = 1; //数据长度设定,操作数据长度,以字节计算 CH365mWriteIntCommand(mIndex2,&iCommand2,2); //向命令缓冲区2内写数据 CH365mSetIntRoutine(mIndex2,InterruptEvent2);
void CALLBACK InterruptEvent2(void) //设备1中断通知消息 { mCount2++;//中断次数记数 PostMessage(mSaveDialogMain,WM_2INTNOTIFY,0,0); //发送设备1断消息 }
"想每次PC中读入16位,要怎么设置" 这句话是什么意思啊?
我也想问这个问题
每次中断产生时我从PCI扩展RAM里读取一个512字节数据
能用沁恒提供的DLL里的中断服务线程吗 还是要自已编写程序扩展这个函数
还有我看源码时有些糊涂,不清楚那个中断服务线程具体做了什么操作
当然可以用dll里面的函数了. 那个中断线程里具体作了什么事情是您自己写的.
能否在驱动中断处理函数里直接处里这个操作呢
当然可以
我想用windows API函数CreatePipe 在驱动程序里建立里管道,当中断产生里将数据发送到管道里,可是编译报了很多错误。 我想用问下驱动程序中可以使用Windows.h和Winbase.h这两个头文件吗? 还有就是H365的动态锭接库DLL提供了伪中断服务程序是由驱动程序触发的 还是由应用程序层触发的。 如果我想在H365的动态锭接库DLL里入口函数初始化CreatePipe 可以吗?
象window.h等最基本的头文件肯定是要用的. 至于第二个问题,所有的硬件中断都是由底层的程序向上传递给应用层的, 第3个问题不使用这个函数.
那么在驱动程序入口函数DriverEntry 里初始化CreatePipe 可以吗
主要想利用Pipe做一个数据传输队列,这样可以我做的通信协议DLL里处理数据,然后发给GUI。
这个方法可行吗
YIN 你有什么好方法吗?
我感觉你的程序没有必要使用这个函数
我感觉你的程序没有必要使用这个函数
哦 因为可能有些数据不能马上被应用层提走,我想建个数据传输的队列,中断后将数据存放在队列里,防止数据丢失。还有就是利用windows信号机制在没中断时我可以挂起线程。
用windows消息函数行吗?
可以.
谢谢了