SSPC-Tester/Driver/PCIE8586/Samples/LabWindows/AD/Finite/Sys.c

296 lines
6.8 KiB
C
Raw Permalink Normal View History

//#include <ansi_c.h>
#include "windows.h"
#include <ACTS1000.H>
#include <stdio.h>
static int (__stdcall *getch)(void);
static int (__stdcall *kbhit)(void);
#define AD_DATA_LEN 256*1024 // Ҫ<><D2AA>ȡ<EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>AD<41><44><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
USHORT ADBuffer[AD_DATA_LEN]; // <20><><EFBFBD><EFBFBD><E4BBBA><EFBFBD><EFBFBD>(<28>洢ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>)
int main (int argc, char *argv[])
{
HANDLE hDevice;
int DeviceLgcID;
ULONG ulDDR2Length = 0;
ACTS1000_PARA_AD ADPara; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ACTS1000_STATUS_AD ADStatus;
ULONG nRetSizeWords;
ULONG nAvailSampsPoints;
ULONGLONG nReadSizeRemain;
ULONGLONG nReadSizeWords;
ULONG nRead;
ULONG InputRange = ACTS1000_INPUT_N1000_P1000mV;
int nADChannel = 0;
WORD ADData;
float fVolt;
ACTS1000_AD_MAIN_INFO ADMainInfo;
WORD wMaxLSB = 0x3FFF;
float fLsbCount = 16384.0;
int nCH=0;
int ChannelCount = 0;
LONG ulTime = GetTickCount();
double dResult;
__int64 i64Cnt=0;
LONG ulTmp=0;
LONG ulSecCnt=0;
ULONGLONG ulReadCount = 0;
ULONG nTChannel = 0;
int Index=0;
HINSTANCE hInst = LoadLibrary("MSVCRT.DLL");
getch = GetProcAddress(hInst, "_getch");
kbhit = GetProcAddress(hInst, "_kbhit");
DeviceLgcID = 0;
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>ID:");
scanf("%d", &DeviceLgcID);
hDevice = ACTS1000_CreateDevice(DeviceLgcID); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(hDevice == INVALID_HANDLE_VALUE)
{
printf("CreateDevice error...\n");
getch();
return 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3>򷵻<EFBFBD>
}
ACTS1000_GetMainInfo(hDevice,&ADMainInfo); // DDR2<52>ij<EFBFBD><C4B3><EFBFBD>(<28><>λ<EFBFBD><CEBB>MB)
switch (ADMainInfo.nDeviceType>>16)
{
case 0x2012:
printf("PXIE%04X\n",ADMainInfo.nDeviceType&0xFFFF);
break;
case 0x2111:
printf("PCIE%04X\n",ADMainInfo.nDeviceType&0xFFFF);
break;
default:
printf("ACTS1000-%04X\n",ADMainInfo.nDeviceType);
}
wMaxLSB = (WORD)(ADMainInfo.nSampCodeCount - 1);
fLsbCount = (float)ADMainInfo.nSampCodeCount;
memset(&ADPara, 0x00, sizeof(ADPara)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ȷ<EFBFBD><C8B7>ֵ0(ǿ<>ҽ<EFBFBD><D2BD><EFBFBD>)
// Ԥ<><D4A4>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADPara.SampleMode = ACTS1000_SAMPMODE_FINITE; // <20><><EFBFBD>޵<EFBFBD><DEB5><EFBFBD><EFBFBD><EFBFBD>
ADPara.FreqDivision = 1;
for ( nCH=0; nCH<ADMainInfo.nChannelCount; nCH++)
{
ADPara.bChannelArray[nCH] = TRUE; // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>0<EFBFBD><30><EFBFBD><EFBFBD>
ADPara.InputRange[nCH] = ACTS1000_INPUT_N1000_P1000mV; // <20><><EFBFBD><EFBFBD>ֻ֧<D6BB>֡<EFBFBD>1000mV
ADPara.CouplingType[nCH] = ACTS1000_COUPLING_DC; // ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
ADPara.M_Length = 0; // M<><4D><EFBFBD><EFBFBD>
ADPara.N_Length = 536870912; // N<><4E><EFBFBD><EFBFBD>
ADPara.PFISel = ACTS1000_PFISEL_TRIG_IN;
ADPara.TriggerMode = ACTS1000_TRIGMODE_POST; // Ӳ<><D3B2><EFBFBD>м䴥<D0BC><E4B4A5>(<28><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󴥷<EFBFBD><F3B4A5B7><EFBFBD><EFBFBD><EFBFBD>)
ADPara.TriggerSource = ACTS1000_TRIGMODE_SOFT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADPara.TriggerDir = ACTS1000_TRIGDIR_NEGATIVE; // <20>½<EFBFBD><C2BD>ش<EFBFBD><D8B4><EFBFBD>
ADPara.TrigLevelVolt = 0;
ADPara.ReferenceClock = ACTS1000_RECLK_ONBOARD; // ʹ<><CAB9><EFBFBD>ڲ<EFBFBD>ʱ<EFBFBD><CAB1>
ADPara.TimeBaseClock = ACTS1000_TBCLK_IN;
ADPara.bMasterEn = 0;
ADPara.TrigCount = 1; // Ϊ0ʱ<30><CAB1>ʾ<EFBFBD><CABE><EFBFBD>޴<EFBFBD><DEB4><EFBFBD>
ADPara.SyncTrigSignal = ACTS1000_STS_TRIGGER0;
ADPara.bClkOutEn = 0;
ADPara.ClkOutSel = ACTS1000_CLKOUT_REFERENCE;
ADPara.bTrigOutEn = 0;
ADPara.TrigOutPolarity = ACTS1000_TOP_POSITIVE;
ADPara.TrigOutWidth = 50;
ADPara.bSaveFile = 0;
if(!ACTS1000_InitDeviceAD(hDevice, &ADPara)) // <20><>ʼ<EFBFBD><CABC>Ӳ<EFBFBD><D3B2>
{
printf("InitDeviceAD error...\n");
getch();
return 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3>򷵻<EFBFBD>
}
ChannelCount = 0;
for(nADChannel=0; nADChannel<ADMainInfo.nChannelCount; nADChannel++)
{
if(ADPara.bChannelArray[nADChannel] == TRUE)
{
ChannelCount++;
}
}
if (ADPara.TriggerMode == ACTS1000_TRIGMODE_MIDL)
{
nReadSizeWords = (ADPara.M_Length + ADPara.N_Length)*ChannelCount;
}
else
{
nReadSizeWords = ADPara.N_Length;
nReadSizeWords = nReadSizeWords*ChannelCount;
}
if (ADPara.TriggerMode == ACTS1000_TRIGMODE_POST || ADPara.TriggerMode == ACTS1000_TRIGMODE_DELAY)
{
if (ADPara.TrigCount==0)
{
nReadSizeWords = 0xFFFFFFFFFFFFFFFF;
}
else
{
nReadSizeWords = nReadSizeWords*ADPara.TrigCount;
}
}
ulTime = GetTickCount();
dResult = 1.0;
i64Cnt=0;
ulTmp=0;
ulSecCnt=-1;
if(!ACTS1000_StartDeviceAD(hDevice)) // <20><><EFBFBD><EFBFBD><EFBFBD>
{
printf("StartDeviceAD Error...\n");
getch();
}
if(!ACTS1000_SetDeviceTrigAD(hDevice)) // <20><><EFBFBD><EFBFBD>AD
{
printf("SetDeviceTrigAD Error...\n");
getch();
}
ulTime = GetTickCount();
printf("<EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>԰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벻Ҫֱ<EFBFBD>ӹرմ<EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>...\n");
if (ADPara.bSaveFile) // <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
{
while(TRUE)
{
if(!ACTS1000_GetDevStatusAD(hDevice, &ADStatus))
{
printf("GetDevStatusAD Error\n");
goto ExitRead;
}
if(ADStatus.bComplete) // <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޵<EFBFBD><DEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
{
printf("<EFBFBD><EFBFBD><EFBFBD>޲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>\n");
goto ExitRead;
}
else
{
if(kbhit())
goto ExitRead; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
Sleep(1);
ulTmp = GetTickCount()-ulTime;
if (ulTmp/1000>ulSecCnt)
{
ulSecCnt = ulTmp/1000;
dResult = ADStatus.lSavePoints*1.00/((ulTmp+1)/1000.0);
dResult=dResult/1000000.0;
printf("%dS ",ulSecCnt);
printf("%.3fM<EFBFBD><EFBFBD>/<2F><>\n",dResult);
}
}
}
}
else
{
nReadSizeRemain = nReadSizeWords;
while (nReadSizeRemain>0)
{
if (nReadSizeRemain>=AD_DATA_LEN)
{
nRead = AD_DATA_LEN;
}
else
{
nRead = nReadSizeRemain;
}
NextRead:
if(kbhit()) goto ExitRead;
if(!ACTS1000_ReadDeviceAD(hDevice, ADBuffer, nRead, &nRetSizeWords, &nAvailSampsPoints,1.0))
{
printf("ReadDeviceAD error...\n");
getch();
goto ExitRead;
}
if (nRetSizeWords<=0)
{
goto NextRead;
}
nReadSizeRemain = nReadSizeRemain-nRetSizeWords;
#if 1
ulTmp = GetTickCount()-ulTime;
if (ulTmp/1000>ulSecCnt)
{
ulSecCnt = ulTmp/1000;
dResult = (nReadSizeWords-nReadSizeRemain)*1.00/((ulTmp+1)/1000.0);
dResult=dResult/1000000.0;
printf("%dS ",ulSecCnt);
printf("%.3fM<EFBFBD><EFBFBD>/<2F><>\n",dResult);
nTChannel = 0;
for(Index=0; Index<8; Index++)
{
for(nADChannel=nTChannel; nADChannel<ChannelCount; nADChannel++)
{
if(ADPara.bChannelArray[nADChannel] == TRUE) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
nTChannel = nADChannel + 1;
ADData = ADBuffer[Index]&wMaxLSB;
// <20><>ԭ<EFBFBD><D4AD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>ѹֵ
switch(InputRange)
{
case 1: // -1000mV - +1000mV
fVolt = (float)((2000.0/fLsbCount) * ADData - 1000.0);
break;
case 0: // -5000mV - +5000mV
fVolt = (float)((10000.0/fLsbCount) * ADData - 5000.0);
break;
default:
break;
}
printf("CH%02d=%6.2f\t", nADChannel, fVolt); // <20><>ʾ<EFBFBD><CABE>ѹֵ
if ((Index+1) % ChannelCount == 0)
{
nTChannel = 0;
printf("\n");
}
break;
}
}
} // for(Index=0; Index<64; Index++)
}
#endif
}
if (nReadSizeRemain==0)
{
printf("<EFBFBD><EFBFBD><EFBFBD>޵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(%I64d<34>ֽ<EFBFBD>)<29><><EFBFBD>ɰ<EFBFBD><C9B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>\n", nReadSizeWords*2);
}
}
ExitRead:
ACTS1000_StopDeviceAD(hDevice); // ֹͣAD
ACTS1000_ReleaseDeviceAD(hDevice); // <20>ͷ<EFBFBD>AD
ACTS1000_ReleaseDevice(hDevice); // <20>ͷ<EFBFBD><CDB7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
getch();
return 0;
}