From 771e3244291d2d306e914e5d80b4a84617a133c9 Mon Sep 17 00:00:00 2001 From: Berk Silemek <berk.silemek@gmail.com> Date: Mon, 14 Nov 2022 14:54:50 +0000 Subject: [PATCH] The script to run the transmitter to produce 297MHz sinusoidal output that are synced by using star-hub system in 2 transmitter m4i cards --- Software/Transmitter/m4iset_8ch.c | 196 ++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 Software/Transmitter/m4iset_8ch.c diff --git a/Software/Transmitter/m4iset_8ch.c b/Software/Transmitter/m4iset_8ch.c new file mode 100644 index 0000000..320ba88 --- /dev/null +++ b/Software/Transmitter/m4iset_8ch.c @@ -0,0 +1,196 @@ +#include "../c_header/dlltyp.h" +#include "../c_header/regs.h" +#include "../c_header/spcm_drv.h" +#include "../c_header/spcerr.h" + +#include <stdio.h> + + +void m4iset_(int16 *pvData, int16 *pvData1, int32 *lMemsize) + { + + drv_handle hDrv; + drv_handle hDrv1; + drv_handle hSync; + + 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"); + + hSync = spcm_hOpen ("sync0"); + + + if (!hSync) + { + printf("Error Star-Hub\n"); + spcm_vClose (hSync); + } + + spcm_dwSetParam_i64 (hDrv, SPC_M2CMD, M2CMD_CARD_RESET); + spcm_dwSetParam_i64 (hDrv1, SPC_M2CMD, M2CMD_CARD_RESET); + + + spcm_dwSetParam_i32 (hSync, SPC_SYNC_ENABLEMASK, 0x0003); + + + spcm_dwSetParam_i32 (hDrv, SPC_TRIG_ORMASK, SPC_TM_NONE); + + + + spcm_dwSetParam_i32 (hDrv1, SPC_CLOCKMODE, SPC_CM_INTPLL); +// spcm_dwSetParam_i64 (hDrv1, SPC_SAMPLERATE,625000000); + 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 + + + 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_ENABLEOUT0, 1); + spcm_dwSetParam_i32 (hDrv, SPC_AMP0, 1000); + spcm_dwSetParam_i32 (hDrv, SPC_FILTER0, 0); + + spcm_dwSetParam_i32 (hDrv, SPC_ENABLEOUT1, 1); + spcm_dwSetParam_i32 (hDrv, SPC_AMP1, 1000); + spcm_dwSetParam_i32 (hDrv, SPC_FILTER1, 0); + + spcm_dwSetParam_i32 (hDrv, SPC_ENABLEOUT2, 1); + spcm_dwSetParam_i32 (hDrv, SPC_AMP2, 1000); + spcm_dwSetParam_i32 (hDrv, SPC_FILTER2, 0); + + spcm_dwSetParam_i32 (hDrv, SPC_ENABLEOUT3, 1); + 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_ENABLEOUT0, 1); + spcm_dwSetParam_i32 (hDrv1, SPC_AMP0, 1000); + spcm_dwSetParam_i32 (hDrv1, SPC_FILTER0, 0); + + spcm_dwSetParam_i32 (hDrv1, SPC_ENABLEOUT1, 1); + spcm_dwSetParam_i32 (hDrv1, SPC_AMP1, 1000); + spcm_dwSetParam_i32 (hDrv1, SPC_FILTER1, 0); + + spcm_dwSetParam_i32 (hDrv1, SPC_ENABLEOUT2, 1); + spcm_dwSetParam_i32 (hDrv1, SPC_AMP2, 1000); + spcm_dwSetParam_i32 (hDrv1, SPC_FILTER2, 0); + + spcm_dwSetParam_i32 (hDrv1, SPC_ENABLEOUT3, 1); + 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 (hDrv1, SPC_CARDMODE, SPC_REP_STD_SINGLE); + 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 (hDrv1, SPCM_BUF_DATA, SPCM_DIR_PCTOCARD, 0, pvData1, 0, 8* *lMemsize); + + + + 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) + {printf(szErrorText); + spcm_vClose (hDrv); + } + + spcm_vClose (hDrv); + spcm_vClose (hDrv1); + spcm_vClose (hSync); + + } + -- GitLab