Skip to content
Snippets Groups Projects
Commit 1f309549 authored by Berk Silemek's avatar Berk Silemek
Browse files

Update Console/Transmitter/m4iset_8ch.c

parent 6742bb07
Branches
No related tags found
No related merge requests found
......@@ -8,20 +8,16 @@
void m4iset_(int16 *pvData, int16 *pvData1, int32 *lMemsize)
{
drv_handle hDrv;
drv_handle hDrv1;
drv_handle hSync;
drv_handle hDrv; //The instance of the first card
drv_handle hDrv1; //The instance of the second card
drv_handle hSync; //The instance of the star-hub
char szErrorText[ERRORTEXTLEN];
int32 lCardType;
int32 allchan;
int32 ausgabe;
int64 lSamplerate;
uint32 dwXMode;
// hDrv = spcm_hOpen ("/dev/spcm0");
// hDrv1 = spcm_hOpen ("/dev/spcm1");
hDrv = spcm_hOpen ("/dev/spcm1");
hDrv1 = spcm_hOpen ("/dev/spcm2");
......@@ -47,11 +43,11 @@ void m4iset_(int16 *pvData, int16 *pvData1, int32 *lMemsize)
spcm_dwSetParam_i32 (hDrv1, SPC_CLOCKMODE, SPC_CM_INTPLL);
// spcm_dwSetParam_i64 (hDrv1, SPC_SAMPLERATE,625000000);
// spcm_dwSetParam_i64 (hDrv1, SPC_SAMPLERATE,625000000); // The sampling rate can be changed to 625 MHz. //Please see the paper why 400 MHz is used.
spcm_dwSetParam_i64 (hDrv1, SPC_SAMPLERATE,400000000);
spcm_dwSetParam_i32 (hDrv1, SPC_CLOCKOUT, 1); // enable clock output
// spcm_dwSetParam_i32 (hDrv, SPC_CLOCKMODE, SPC_CM_INTPLL);
// spcm_dwSetParam_i64 (hDrv, SPC_SAMPLERATE,625000000);
spcm_dwSetParam_i64 (hDrv, SPC_SAMPLERATE,400000000);
// spcm_dwSetParam_i32 (hDrv, SPC_CLOCKOUT, 1); // enable clock output
......@@ -60,44 +56,15 @@ void m4iset_(int16 *pvData, int16 *pvData1, int32 *lMemsize)
spcm_dwSetParam_i32 (hDrv, SPCM_X2_MODE, SPCM_XMODE_TRIGOUT);
spcm_dwSetParam_i32 (hDrv1, SPCM_X2_MODE, SPCM_XMODE_TRIGOUT);
// spcm_dwSetParam_i32 (hDrv1, SPCM_X2_MODE, SPCM_XMODE_CONTOUTMARK);
// spcm_dwGetParam_i32 (hDrv1, SPCM_X1_AVAILMODES, &ausgabe);
// printf ("available modes = %d\n", ausgabe);
spcm_dwGetParam_i64 (hDrv1, SPC_SAMPLERATE, &lSamplerate);
printf ("Sample rate = %d\n", lSamplerate);
// printf ("first sample = %d\n", pvData[0]);
// printf ("first sample = %d\n", pvData1[0]);
// dwXMode = (SPCM_XMODE_DIGOUT | SPCM_XMODE_DIGOUTSRC_CH1 | SPCM_XMODE_DIGOUTSRC_BIT15);
// spcm_dwSetParam_i32 (hDrv1, SPCM_X1_MODE, dwXMode);
// spcm_dwGetParam_i32 (hDrv1, SPCM_X1_MODE, &ausgabe);
// printf ("actual X0 mode = %d\n", ausgabe);
spcm_dwSetParam_i32 (hDrv, SPC_CHENABLE, CHANNEL0|CHANNEL1|CHANNEL2|CHANNEL3);
// dwXMode = (SPCM_XMODE_DIGOUT | SPCM_XMODE_DIGOUTSRC_CH0 | SPCM_XMODE_DIGOUTSRC_BIT15);
// spcm_dwSetParam_i32 (hDrv, SPCM_X0_MODE, dwXMode);
// spcm_dwGetParam_i32 (hDrv, SPCM_X0_MODE, &ausgabe);
// printf ("actual X0 mode = %d\n", ausgabe);
spcm_dwSetParam_i32 (hDrv, SPC_CHENABLE, CHANNEL0|CHANNEL1|CHANNEL2|CHANNEL3); //Enable all channels
spcm_dwSetParam_i32 (hDrv, SPC_ENABLEOUT0, 1);
spcm_dwSetParam_i32 (hDrv, SPC_AMP0, 1000);
spcm_dwSetParam_i32 (hDrv, SPC_FILTER0, 0);
spcm_dwSetParam_i32 (hDrv, SPC_AMP0, 1000); //Full dynamic range of amplitude
spcm_dwSetParam_i32 (hDrv, SPC_FILTER0, 0); //No filter is used
spcm_dwSetParam_i32 (hDrv, SPC_ENABLEOUT1, 1);
spcm_dwSetParam_i32 (hDrv, SPC_AMP1, 1000);
......@@ -111,19 +78,7 @@ void m4iset_(int16 *pvData, int16 *pvData1, int32 *lMemsize)
spcm_dwSetParam_i32 (hDrv, SPC_AMP3, 1000);
spcm_dwSetParam_i32 (hDrv, SPC_FILTER3, 0);
spcm_dwSetParam_i32 (hDrv1, SPC_CHENABLE, CHANNEL0|CHANNEL1|CHANNEL2|CHANNEL3);
// dwXMode = (SPCM_XMODE_DIGOUT | SPCM_XMODE_DIGOUTSRC_CH0 | SPCM_XMODE_DIGOUTSRC_BIT15);
// spcm_dwSetParam_i32 (hDrv1, SPCM_X0_MODE, dwXMode);
// spcm_dwGetParam_i32 (hDrv1, SPCM_X0_MODE, &ausgabe);
// printf ("actual X0 mode = %d\n", ausgabe);
spcm_dwSetParam_i32 (hDrv1, SPC_CHENABLE, CHANNEL0|CHANNEL1|CHANNEL2|CHANNEL3); //Enable channels for the other card
spcm_dwSetParam_i32 (hDrv1, SPC_ENABLEOUT0, 1);
spcm_dwSetParam_i32 (hDrv1, SPC_AMP0, 1000);
......@@ -141,54 +96,27 @@ void m4iset_(int16 *pvData, int16 *pvData1, int32 *lMemsize)
spcm_dwSetParam_i32 (hDrv1, SPC_AMP3, 1000);
spcm_dwSetParam_i32 (hDrv1, SPC_FILTER3, 0);
// spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_CARD_WRITESETUP);
// spcm_dwSetParam_i32 (hDrv1, SPC_M2CMD, M2CMD_CARD_WRITESETUP);
// spcm_dwSetParam_i32 (hDrv, SPCM_XX_ASYNCIO, 0);
// spcm_dwSetParam_i32 (hDrv, SPCM_XX_ASYNCIO, 1);
// spcm_dwSetParam_i32 (hDrv, SPCM_XX_ASYNCIO, 0);
spcm_dwSetParam_i32 (hDrv, SPC_CARDMODE, SPC_REP_STD_SINGLE);
spcm_dwSetParam_i32 (hDrv, SPC_MEMSIZE, *lMemsize);
spcm_dwSetParam_i32 (hDrv, SPC_LOOPS, 1); //60000
spcm_dwSetParam_i32 (hDrv, SPC_CARDMODE, SPC_REP_STD_SINGLE); //Single mode is used. Refer to the other modes in manufacturer's documentation (i.e. sequence mode)
spcm_dwSetParam_i32 (hDrv, SPC_MEMSIZE, *lMemsize); // Set the memory block size
spcm_dwSetParam_i32 (hDrv, SPC_LOOPS, 1); // Only a single pulse is transmitted. The number can be increased further
spcm_dwSetParam_i32 (hDrv1, SPC_CARDMODE, SPC_REP_STD_SINGLE);
spcm_dwSetParam_i32 (hDrv1, SPC_CARDMODE, SPC_REP_STD_SINGLE); //Repeat it for the second card
spcm_dwSetParam_i32 (hDrv1, SPC_MEMSIZE, *lMemsize);
spcm_dwSetParam_i32 (hDrv1, SPC_LOOPS, 1);
spcm_dwDefTransfer_i64 (hDrv, SPCM_BUF_DATA, SPCM_DIR_PCTOCARD, 0, pvData, 0, 8* *lMemsize);
spcm_dwDefTransfer_i64 (hDrv, SPCM_BUF_DATA, SPCM_DIR_PCTOCARD, 0, pvData, 0, 8* *lMemsize); //Here we get the pulse data from the fortran code to write into the device memory.
spcm_dwDefTransfer_i64 (hDrv1, SPCM_BUF_DATA, SPCM_DIR_PCTOCARD, 0, pvData1, 0, 8* *lMemsize);
spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_DATA_STARTDMA | M2CMD_DATA_WAITDMA); //Device handles the rest but we need to tell the DMA operation. Please check documentation for the details.
spcm_dwSetParam_i32 (hDrv1, SPC_M2CMD, M2CMD_DATA_STARTDMA | M2CMD_DATA_WAITDMA);
spcm_dwSetParam_i32 (hSync, SPC_M2CMD, M2CMD_CARD_START | M2CMD_CARD_FORCETRIGGER | M2CMD_CARD_WAITREADY); //The cards start with a software trigger.
spcm_dwSetParam_i32 (hDrv, SPC_M2CMD, M2CMD_DATA_STARTDMA | M2CMD_DATA_WAITDMA);
spcm_dwSetParam_i32 (hDrv1, SPC_M2CMD, M2CMD_DATA_STARTDMA | M2CMD_DATA_WAITDMA);
spcm_dwSetParam_i32 (hSync, SPC_M2CMD, M2CMD_CARD_START | M2CMD_CARD_FORCETRIGGER | M2CMD_CARD_WAITREADY);
if (spcm_dwGetErrorInfo_i32(hDrv,NULL,NULL,szErrorText) != ERR_OK)
if (spcm_dwGetErrorInfo_i32(hDrv,NULL,NULL,szErrorText) != ERR_OK) //Check if there is any error issued by the card
{printf(szErrorText);
spcm_vClose (hDrv);
}
spcm_vClose (hDrv);
//Close the cards
spcm_vClose (hDrv);
spcm_vClose (hDrv1);
spcm_vClose (hSync);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment