/*----------------------------------------------------------------------------*/ static enum result eepromInit(void *object, const void *configBase) { const struct EepromConfig * const config = configBase; struct Eeprom * const interface = object; if (!setDescriptor(0, interface)) return E_BUSY; interface->position = 0; interface->size = (uintptr_t)&_eeeprom - (uintptr_t)&_seeprom; interface->blocking = true; /* Enable clock to register interface and peripheral */ sysClockEnable(CLK_M4_EEPROM); /* Reset registers to default values */ sysResetEnable(RST_EEPROM); const uint32_t frequency = clockFrequency(MainClock); LPC_EEPROM->CLKDIV = (frequency + (EEPROM_CLOCK - 1)) / EEPROM_CLOCK - 1; LPC_EEPROM->INTENSET = INT_PROG_DONE; if (config) irqSetPriority(EEPROM_IRQ, config->priority); irqEnable(EEPROM_IRQ); return E_OK; }
/*! */ void pDetectorConfiguration::writeToFile(std::string filePath) { *xpollog::kInfo << "Writing configuration to " << filePath << "... " << endline; std::ofstream *outputFile = xpolio::kIOManager->openOutputFile(filePath); xpolio::kIOManager->write(outputFile, "//Readout mode//"); xpolio::kIOManager->write(outputFile, readoutMode()); xpolio::kIOManager->write(outputFile, "//Buffer mode//"); xpolio::kIOManager->write(outputFile, bufferMode()); xpolio::kIOManager->write(outputFile, "//Calibration dac//"); xpolio::kIOManager->write(outputFile, calibrationDac()); xpolio::kIOManager->write(outputFile, "//Pixel address x//"); xpolio::kIOManager->write(outputFile, pixelAddressX()); xpolio::kIOManager->write(outputFile, "//Pixel address y//"); xpolio::kIOManager->write(outputFile, pixelAddressY()); xpolio::kIOManager->write(outputFile, "//Threshold dacs//"); for (int i = 0; i < NUM_READOUT_CLUSTERS; i++) { xpolio::kIOManager->write(outputFile, thresholdDac(i)); } xpolio::kIOManager->write(outputFile, "//Clock frequency code//"); xpolio::kIOManager->write(outputFile, clockFrequency()); xpolio::kIOManager->write(outputFile, "//Clock shift//"); xpolio::kIOManager->write(outputFile, clockShift()); xpolio::kIOManager->write(outputFile, "//# pedestal samples//"); xpolio::kIOManager->write(outputFile, numPedSamples()); xpolio::kIOManager->write(outputFile, "//Pedestal sample delay//"); xpolio::kIOManager->write(outputFile, pedSampleDelay()); xpolio::kIOManager->write(outputFile, "//Trigger enable delay//"); xpolio::kIOManager->write(outputFile, trgEnableDelay()); xpolio::kIOManager->write(outputFile, "//Minimum window size//"); xpolio::kIOManager->write(outputFile, minWindowSize()); xpolio::kIOManager->write(outputFile, "//Maximum window size//"); xpolio::kIOManager->write(outputFile, maxWindowSize()); xpolio::kIOManager->write(outputFile, "//Large window padding//"); xpolio::kIOManager->write(outputFile, windowMarginHigh()); xpolio::kIOManager->closeOutputFile(outputFile); }
/*! */ std::ostream& pDetectorConfiguration::fillStream(std::ostream& os) const { os << xpedaqutils::title("Detector configuration", true); os << "Readout mode: " << readoutMode() << std::endl; os << "Buffer mode: " << bufferMode() << std::endl; os << "Calibration DAC: " << calibrationDac() << std::endl; os << "Pixel address x: " << pixelAddressX() << std::endl; os << "Pixel address y: " << pixelAddressY() << std::endl; os << "Threshold DACs: "; for (int i = 0; i < NUM_READOUT_CLUSTERS; i++) { os << thresholdDac(i) << " "; } os << std::endl; os << "Clock frequency code: " << clockFrequency() << std::endl; os << "Clock shift: " << clockShift() << std::endl; os << "# samples for pedestals: " << numPedSamples() << std::endl; os << "Pedestal sample delay: " << pedSampleDelay() << std::endl; os << "Trigger enable delay: " << trgEnableDelay() << std::endl; os << "Minimum window size: " << minWindowSize() << std::endl; os << "Maximum window size: " << maxWindowSize() << std::endl; os << "Large window padding: " << windowMarginHigh() << std::endl; os << xpedaqutils::hline(); return os; }