SSPC-Tester/Driver/PCIE8586/Samples/VC/Simple/AD/ContinueCallB/Sys.cpp

192 lines
6.0 KiB
C++
Raw Normal View History

// ˵<><CBB5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>ʽ<EFBFBD><CABD>ȡAD<41><44><EFBFBD><EFBFBD>
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "conio.h"
#include "ACTS1000.h"
#define AD_DATA_LEN 512*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>)
LONG ADCallBackFunc(HANDLE hDevice, ULONG nSamplesPerChan, ULONG nChannelCount, void *callbackData)
{
ULONG nRetSizeWords;
ULONG nAvailSampsPoints;
if (nSamplesPerChan>(AD_DATA_LEN/nChannelCount))
{
nSamplesPerChan = AD_DATA_LEN/nChannelCount;
}
if (hDevice == INVALID_HANDLE_VALUE)
{
return 1;
}
if(!ACTS1000_ReadDeviceAD(hDevice, ADBuffer, nSamplesPerChan*nChannelCount, &nRetSizeWords, &nAvailSampsPoints,0.1))
{
printf("ACTS1000_ReadDeviceAD error...\n");
_getch();
return 2;
}
if (nRetSizeWords!=(nSamplesPerChan*nChannelCount))
{
printf("nRetSizeWords error...\n");
_getch();
return 3;
}
printf("ADBuff[0]=0x%X\n", ADBuffer[0]);
return 0;
}
int main(int argc, char* argv[])
{
int DeviceLgcID;
ULONG ulDDR2Length = 0;
ULONGLONG ulDDR2LengthByte = 0;
ACTS1000_PARA_AD ADPara; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nCurrentChannel = 0,nADChannel = 0;
ACTS1000_AD_MAIN_INFO ADMainInfo;
WORD wMaxLSB = 0x3FFF;
float fLsbCount = 16384.0;
ULONG nSamplesPerChan = 0;
HANDLE hDevice;
int InputRange;
DeviceLgcID = 0;
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>ID:");
scanf_s("%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);
}
ulDDR2LengthByte = ADMainInfo.nDepthOfMemory;
wMaxLSB = (WORD)(ADMainInfo.nSampCodeCount - 1);
fLsbCount = (float)ADMainInfo.nSampCodeCount;
InputRange = ACTS1000_INPUT_N1000_P1000mV; // Ҫ<><D2AA><EFBFBD>û<EFBFBD><C3BB>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULONG nRevisionID = 0;
if(!ACTS1000_GetBusInfo(hDevice, NULL, NULL, NULL, &nRevisionID))
{
printf("ACTS1000_GetBusInfo error...\n");
}
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_CONTINUOUS; // <20><><EFBFBD>޵<EFBFBD><DEB5><EFBFBD><EFBFBD><EFBFBD>
ADPara.FreqDivision = 1000;
for (int nCH=0; nCH<ADMainInfo.nChannelCount; nCH++)
{
ADPara.bChannelArray[nCH] = TRUE; // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>0<EFBFBD><30><EFBFBD><EFBFBD>
ADPara.InputRange[nCH] = InputRange; // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD>Χ
ADPara.CouplingType[nCH] = ACTS1000_COUPLING_DC; // ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
ADPara.M_Length = 0; // M<><4D><EFBFBD><EFBFBD>
ADPara.N_Length = 1024*32; // N<><4E><EFBFBD><EFBFBD>
ADPara.PFISel = ACTS1000_PFISEL_TRIG_IN;
ADPara.TriggerMode = ACTS1000_TRIGMODE_POST; // <20>󴥷<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;
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;
_stprintf_s(ADPara.chFileName, 256, _T("%s"), L"I:\\3.pci");
if(!ACTS1000_InitDeviceAD(hDevice, &ADPara)) // <20><>ʼ<EFBFBD><CABC>Ӳ<EFBFBD><D3B2>
{
ACTS1000_ReleaseDevice(hDevice); // <20>ͷ<EFBFBD><CDB7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
printf("InitDeviceAD error...\n");
_getch();
return 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3>򷵻<EFBFBD>
}
int ChannelCount = 0;
for(nADChannel=0; nADChannel<ADMainInfo.nChannelCount; nADChannel++)
{
if(ADPara.bChannelArray[nADChannel] == TRUE)
{
ChannelCount++;
}
}
ULONG nDMAMemSize = 0;
if (!ACTS1000_GetDMAMemorySize(hDevice, &nDMAMemSize))
{
ACTS1000_ReleaseDevice(hDevice); // <20>ͷ<EFBFBD><CDB7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
printf("ACTS1000_GetDMAMemorySize error...\n");
_getch();
return 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3>򷵻<EFBFBD>
}
nDMAMemSize *= 1024;
nSamplesPerChan = nDMAMemSize/2/4/ChannelCount;// һ<><D2BB><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>4<EFBFBD><34>֮1<D6AE><31>ΪN<CEAA><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("nNSampleLen = %u\n", nSamplesPerChan);
if (!ACTS1000_RegisterEveryNSamplesEvent(hDevice, nSamplesPerChan, 0, &ADCallBackFunc, NULL))
{
ACTS1000_ReleaseDevice(hDevice); // <20>ͷ<EFBFBD><CDB7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
printf("ACTS1000_GetDMAMemorySize error...\n");
_getch();
return 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3>򷵻<EFBFBD>
}
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();
}
while ( !_kbhit() )
{
Sleep(1);
}
ACTS1000_StopDeviceAD(hDevice); // ֹͣAD
ACTS1000_ReleaseDeviceAD(hDevice); // <20>ͷ<EFBFBD>AD
ACTS1000_ReleaseDevice(hDevice); // <20>ͷ<EFBFBD><CDB7><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
return 0;
}