diff --git a/ClassDigitizer.cpp b/ClassDigitizer.cpp index a8e07c0..4bf5d41 100644 --- a/ClassDigitizer.cpp +++ b/ClassDigitizer.cpp @@ -292,20 +292,15 @@ void Digitizer::WriteRegister(uint32_t address, uint32_t value, int ch ){ ErrorMsg("WriteRegister"); } -uint32_t Digitizer::ReadRegister(uint32_t address, unsigned int ch, string str ){ +uint32_t Digitizer::ReadRegister(uint32_t address, int ch, string str ){ uint32_t * Data = new uint32_t[NChannel]; - - printf("=dsadads====== 0x%x \n", address); if( address < 0x8000) { if( ch < 0 ) { - printf("a %d-- %x \n", ch, address + 0x7000); ret = CAEN_DGTZ_ReadRegister(handle, address + 0x7000, Data); }else{ - printf("b %d -- %x \n", ch, address + (ch << 8)); ret = CAEN_DGTZ_ReadRegister(handle, address + (ch << 8), Data); } }else{ - printf("--- %x \n", address); ret = CAEN_DGTZ_ReadRegister(handle, address, Data); } ErrorMsg("ReadRegister"); @@ -457,6 +452,24 @@ int Digitizer::GetChTemperature(int ch){ return temp[0]; } + +void Digitizer::PrintACQStatue(){ + + unsigned int status = ReadRegister(Register::DPP::AcquisitionStatus); + + printf(" Acq state (0x%1x): %s \n", (status >> 2) & 0x1, ((status >> 2) & 0x1) == 0? "stopped" : "running"); + printf(" Event Ready (0x%1x): %s \n", (status >> 3) & 0x1, ((status >> 3) & 0x1) == 0? "no event in buffer" : "event in buffer"); + printf(" Event Full (0x%1x): %s \n", (status >> 4) & 0x1, ((status >> 4) & 0x1) == 0? "not full" : "full"); + printf(" Clock source (0x%1x): %s \n", (status >> 5) & 0x1, ((status >> 5) & 0x1) == 0? "internal" : "external"); + printf(" Board ready (0x%1x): %s \n", (status >> 8) & 0x1, ((status >> 8) & 0x1) == 0? "not ready" : "ready"); + printf(" Ch shutDown (0x%1x): %s \n", (status >> 19) & 0x1, ((status >> 19) & 0x1) == 0? "Channels are on" : "channels are shutdown"); + printf(" TRG-IN 0x%1x \n", (status >> 16) & 0x1); + printf(" Ch temp state 0x%04x \n", (status >> 20) & 0xF); + +} + + +//========================================== setting file IO void Digitizer::OpenSettingBinary(string fileName){ settingFile = NULL; this->settingFileName = fileName; diff --git a/ClassDigitizer.h b/ClassDigitizer.h index 761f8a4..1bdbe04 100644 --- a/ClassDigitizer.h +++ b/ClassDigitizer.h @@ -33,7 +33,7 @@ class Digitizer{ ///=================Settings void WriteRegister(uint32_t address, uint32_t value, int ch = -1); - uint32_t ReadRegister(uint32_t address, unsigned int ch = 0, string str = ""); + uint32_t ReadRegister(uint32_t address, int ch = -1, string str = ""); ///common for PHA and PSD digitizers void SetChannelMask(uint32_t mask); @@ -63,6 +63,7 @@ class Digitizer{ int GetDPPType() {return DPPType;} void PrintBoardConfiguration(); + void PrintACQStatue(); ///================ ACQ control void StopACQ(); diff --git a/RegisterAddress.h b/RegisterAddress.h index 1741491..a911836 100644 --- a/RegisterAddress.h +++ b/RegisterAddress.h @@ -71,8 +71,8 @@ namespace Register { const uint32_t InputDynamicRange = 0x1028; /// R/W const uint32_t NumberEventsPerAggregate_G = 0x1034; /// R/W const uint32_t PreTrigger = 0x1038; /// R/W - ///const uint32_t TriggerThreshold = 0x106C; /// R/W - ///const uint32_t TriggerHoldOffWidth = 0x1074; /// R/W + const uint32_t TriggerThreshold = 0x106C; /// R/W + const uint32_t TriggerHoldOffWidth = 0x1074; /// R/W const uint32_t DPPAlgorithmControl = 0x1080; /// R/W const uint32_t ChannelStatus = 0x1088; /// R const uint32_t AMCFirmwareRevision = 0x108C; /// R @@ -81,6 +81,7 @@ namespace Register { const uint32_t IndividualSoftwareTrigger = 0x10C0; /// W const uint32_t VetoWidth = 0x10D4; /// R/W + /// I know there are many duplication, it is the design. const uint32_t BoardConfiguration = 0x8000; /// R/W const uint32_t AggregateOrganization = 0x800C; /// R/W const uint32_t ADCCalibration = 0x809C; /// W diff --git a/test.cpp b/test.cpp index 9ded20d..8c3ec0e 100644 --- a/test.cpp +++ b/test.cpp @@ -22,32 +22,35 @@ int main(int argc, char* argv[]){ //dig[0].ReadRegister(Register::DPP::PHA::TriggerThreshold, 0, "trigger threshold"); - //dig[0].CreateAndSaveSettingBinary("test.bin"); + //dig[0].CreateAndSaveSettingBinary("setting_" + to_string(dig[0].GetSerialNumber()) + ".bin"); + dig[0].OpenSettingBinary("setting_" + to_string(dig[0].GetSerialNumber()) + ".bin"); + + dig[0].SetAcqMode("mixed"); + dig[0].PrintACQStatue(); - dig[0].OpenSettingBinary("test.bin"); // //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::BoardConfiguration)); //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::GlobalTriggerMask)); //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::PHA::TriggerThreshold, 0)); - printf("======================= \n"); - dig[0].SetRecordLength(2000); - - dig[0].GetChannelSettingFromDigitizer(0); - - printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0)); - printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 4)); - - dig[0].SetRecordLength(4000); - - printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0)); - printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 3)); - printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 6)); - - dig[0].SetRecordLength(3000, 0); - printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0)); - printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 1)); - printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 2)); + //printf("======================= \n"); + //dig[0].SetRecordLength(2000); + // + //dig[0].GetChannelSettingFromDigitizer(0); + // + //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0)); + //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 4)); + // + //dig[0].SetRecordLength(4000); + // + //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0)); + //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 3)); + //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 6)); + // + //dig[0].SetRecordLength(3000, 0); + //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0)); + //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 1)); + //printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 2)); /* dig[1].OpenDigitizer(1,0, true); /*