diff --git a/machines/Makefile b/machines/Makefile index 0870ba3..9d2a87b 100644 --- a/machines/Makefile +++ b/machines/Makefile @@ -27,7 +27,8 @@ MACHINES = \ Mobilecore$(EXEEXT) \ Mobile_wo_sync_backend$(EXEEXT) \ berta \ - general + general \ + pulseblaster_only DRV_SPC_MI40xx = ../drivers/Spectrum-MI40xxSeries/Spectrum-MI40xxSeries.a DRV_SPC_M2i40xx = ../drivers/Spectrum-M2i40xxSeries/Spectrum-M2i40xxSeries.a @@ -326,3 +327,19 @@ pb_radio_processor_g_backend: pb_radio_processor_g_backend.o \ pb_radio_processor_g_backend.o: pb_radio_processor_g_backend.cpp \ pb_radio_processor_g_backend.h + + +pulseblaster_only$(EXEEXT): pulseblaster_only.o \ + hardware.o \ + ../drivers/dummy/dummy.o \ + $(DRV_SPC_MI40xx) \ + $(DRV_PTS) \ + $(DRV_TEMPCONT) \ + $(DRV_PB_24BIT) $(DRV_PB) $(DRV_PB_PROG) \ + ../core/core.a + @$(LINK_MACHINE) $^ $(LIBS) -o $@ -lpthread + + +pulseblaster_only.o: pulseblaster_only.cpp \ +../drivers/SpinCore-PulseBlaster24Bit/SpinCore-PulseBlaster24Bit.h ../drivers/SpinCore-PulseBlaster/SpinCore-PulseBlaster.h ../drivers/SpinCore-PulseBlaster/PulseBlasterProgram.h \ +../core/stopwatch.h ../drivers/Spectrum-MI40xxSeries/Spectrum-MI40xxSeries.h ../drivers/Spectrum-M2i40xxSeries/Spectrum-M2i40xxSeries.h diff --git a/machines/pulseblaster_only.cpp b/machines/pulseblaster_only.cpp new file mode 100644 index 0000000..52c3d81 --- /dev/null +++ b/machines/pulseblaster_only.cpp @@ -0,0 +1,109 @@ +/* ************************************************************************** + + Author: Markus Rosenstihl + Created: June 2016 + + ****************************************************************************/ +#include "machines/hardware.h" +#include "core/core.h" +#include "drivers/PTS-Synthesizer/PTS.h" +#include "drivers/dummy/dummy.h" +#include "drivers/SpinCore-PulseBlaster24Bit/SpinCore-PulseBlaster24Bit.h" + +/** + \defgroup mobilemachine Mobile NMR Spectrometer + \ingroup machines + Uses Spincore Pulseblaster 24 Bit and Dummy ADC PTS310 with cable driver with phase control and no synchronization board + \li line 0 for gate + \li line 1 for pulse + \li llne 17 for trigger + \li line 16 free (not using synchronization board) + + \par Starting the hardware + This procedure should assure the correct initialisation of the hardware: + \li Switch off main switches of SpinCore Pulseblaster and Computer (the main switch of the computer is at the rear) + \li Switch on Computer and start Windows or linux + + @{ + */ + +/** + */ +class pulseblaster_only_hardware: public hardware +{ + + PTS* my_pts; + SpinCorePulseBlaster24Bit* my_pulseblaster; + dummy* my_adc; + +public: + pulseblaster_only_hardware() + { + ttlout trigger; + trigger.id = 0; + /* trigger on line 17 */ + trigger.ttls = 1 << 17; + my_adc = new dummy; + /* device_id=0, clock=100MHz, sync_mask: Bit 16 */ + my_pulseblaster = new SpinCorePulseBlaster24Bit(0, 1e8, 0 << 16); + my_pts = new PTS_latched(0); + + // publish devices + the_pg = my_pulseblaster; + the_adc = my_adc; + the_fg = my_pts; + } + + virtual ~pulseblaster_only_hardware() + { + if (the_adc != NULL) + delete the_adc; + if (the_fg != NULL) + delete the_fg; + if (the_pg != NULL) + delete the_pg; + } + +}; + +/** + \brief brings standard core together with the Mobile NMR hardware + */ +class pulseblaster_core: public core +{ + std::string the_name; +public: + pulseblaster_core(const core_config& conf) : + core(conf) + { + the_hardware = new pulseblaster_only_hardware(); + the_name = "Mobile backend without synchronisation card"; + } + virtual const std::string& core_name() const + { + return the_name; + } +}; + +/** + @} + */ + +int main(int argc, const char** argv) +{ + int return_result = 0; + try + { + core_config my_conf(argv, argc); + // setup input and output + pulseblaster_core my_core(my_conf); + // start core application + my_core.run(); + } + catch (const DamarisException& e) + { + fprintf(stderr, "%s\n", e.what()); + return_result = 1; + } + return return_result; +}