发表于:2007-01-24 11:34:00
楼主
大家好,我是清华的在读研究生,最近为导师做事,用VC++6.0写程序,利用PCI7300A_RevB从一个线阵探测器采集数据。
由于新上手这一块,出现了几个问题,想请教各位:
1. 主要问题:使用凌华公司提供的代码会出现程序无法响应问题。(代码贴在后面)
2. 一个基础知识问题:该板卡要采集探测器的128道数据,应当是如何工作的?
3. DMA传输、同步传输、双缓冲模式之间有什么关系?
4. 采用率该如何计算?
目前已知的是:采集卡工作在同步传输模式;时钟信号上升沿读取数据;8位数据采集;PCK时钟信号两个上升沿之间间隔200ns。
代码如下,运行到 DI_ContReadPortToFile 程序会死在那儿。
初入此门,请大家不吝赐教,谢谢:)
#include "dask.h"
//constants definition
#define CardNumber 0
#define DIChan 0
#define SampleCount 65536
#define SampleRate 5000000.0000
//DI config constants definition
#define PortWidth 8
#define I_Cntrl_Pol P7300_DIREQ_POS|P7300_DIACK_POS|P7300_DITRIG_POS
#define ClearFifo 1
#define DisableDI 1
//variables definition
I16 cardID = -1;
I16 err=0;
U32 AccessCnt = 0;
U32 MemSize = 0;
char *file_name = "P7300d";
cardID = Register_Card(PCI_7300A_RevB, CardNumber);
if (cardID<0) {
//Error occurs !!
//ToDo : Handle error here
}
err = DI_InitialMemoryAllocated(cardID, &MemSize);
if (err!=NoError) {
//Error occurs !!
//ToDo : Handle error here
}
if (MemSize*1024 < SampleCount*sizeof(U8) ) {
//available memory size for analog input in the device driver
//is smaller than the data size specified!!
//ToDo : do something here
}
err=DI_7300B_Config(cardID, PortWidth, TRIG_INT_PACER, P7300_WAIT_TRG, P7300_TERM_ON, I_Cntrl_Pol, ClearFifo, DisableDI);
if (err!=NoError) {
//Error occurs !!
//ToDo : Handle error here
}
err=DI_ContReadPortToFile (cardID, DIChan, file_name, SampleCount, SampleRate, SYNCH_OP);
if (err!=NoError) {
//Error occurs !!
//ToDo : Handle error here
}
Release_Card(cardID);