阅读:894回复:4
有关中断次数问题,各大侠帮忙
我是一low手,有2k DDK做一pci采集卡的驱动(s3933),发现大量丢数,dma中断次数为 3000次/秒。不知是驱动的问题,还是中断太快,而无法达到,请各路大虾指点。
|
|
沙发#
发布于:2003-04-27 22:19
3000次/秒,不快不快。
|
|
板凳#
发布于:2003-04-28 11:36
请教arthurtu:
我的硬件结构是:s5933外接以1k深度的fifo.当fifo 半满时,发出一邮箱中断, 通知驱动设置dma 传输。dma 传输结束后,产生dma中断。 顶层应用程序为: for(count=0;count<5000 ;count++) //重复5000次。 { //////////////////////////////////////////////////////////////// //设置并等待邮箱中断 //////////////////////////////////////////////////////////////// BOOL bSuccess = DeviceIoControl(hWHBATMT, IOCTL_WHB_INT, //给驱动提供irp,驱动利用该irp设置邮箱中断。 NULL, 0, NULL,0, &bR, NULL); //////////////////////////////////////////////////////////////// //读取数据 //////////////////////////////////////////////////////////////// DWORD TxdBytes; if( !ReadFile( hWHBATMT, inbuffer, sizeof(inbuffer), &TxdBytes, NULL)) //给驱动提供irp,和用户态的memory 的地址和长度。 //驱动程序将用户态的memory转换后,得到dma 的首地址和传输长度, //并写入s5933的地址register 和 计数register中,以发起一dam传输. { printf(\"XXX Could not read from device...\\n\"); } else { printf(\"Read From Device Succeed,number is ...\\n\",TxdBytes); } savefile(count,inbuffer); } 我怀疑是由于,邮箱中断的设置和dma中断的设置都是由应用程序发起, 中断设置的速度太慢,而硬件中断来的太快,从而丢掉了一些硬件中断。 我这种工作方式太差,请指教,能否提供一个更好的方法。 |
|
地板#
发布于:2003-04-28 14:02
你的意思是邮箱中断立刻产生了,在你设置DMA之前?
可以先设置好DMA(做好准备),再设置邮箱中断。在邮箱中断的ISR中起始DMA传输。 等有数据了,你再在user mode来设置DMA传输,当然来不及了。 |
|
地下室#
发布于:2003-04-28 14:16
有道理.谢谢arthurtu ,我试试,有问题在请教
|
|