1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

fpga/dino: add and set new registers

Signed-off-by: Niklas Eiling <niklas.eiling@eonerc.rwth-aachen.de>
This commit is contained in:
Niklas Eiling 2024-06-10 15:37:37 +02:00 committed by Niklas Eiling
parent f364db1748
commit 7991d31393

View file

@ -141,23 +141,38 @@ void DinoAdc::setRegisterConfig(std::shared_ptr<Register> reg,
double sampleRate) {
constexpr double dinoClk = 25e6; // Dino is clocked with 25 Mhz
constexpr size_t dinoRegisterTimer = 0;
constexpr size_t dinoRegisterScale = 1;
constexpr size_t dinoRegisterOffset = 2;
constexpr size_t dinoRegisterAdcScale = 1;
constexpr size_t dinoRegisterAdcOffset = 2;
constexpr size_t dinoRegisterDacExternalTrig = 4;
constexpr size_t dinoRegisterStsActive = 5;
constexpr size_t dinoRegisterDacScale = 6;
constexpr size_t dinoRegisterDacOffset = 7;
uint32_t dinoTimerVal = static_cast<uint32_t>(dinoClk / sampleRate);
double rateError = dinoClk / dinoTimerVal - sampleRate;
reg->setRegister(
dinoRegisterTimer,
dinoTimerVal); // Timer value for generating ADC trigger signal
reg->setRegister(dinoRegisterScale,
-0.001615254F); // Scale factor for ADC value
reg->setRegister(dinoRegisterOffset, 10.8061F); // Offset for ADC value
uint32_t rate = reg->getRegister(0);
float scale = reg->getRegisterFloat(1);
float offset = reg->getRegisterFloat(2);
logging.get("Dino")->info("Check: Register configuration: Rate: {}, Scale: "
"{}, Offset: {}, Rate-Error: {} Hz",
rate, scale, offset, rateError);
reg->setRegister(dinoRegisterAdcScale,
-0.001615254F); // Scale factor for ADC value
reg->setRegister(dinoRegisterAdcOffset, 10.8061F); // Offset for ADC value
reg->setRegister(dinoRegisterDacScale,
3276.75F); // Scale factor for DAC value
reg->setRegister(dinoRegisterDacOffset, 10.0F); // Offset for DAC value
uint32_t rate = reg->getRegister(dinoRegisterTimer);
float adcScale = reg->getRegisterFloat(dinoRegisterAdcScale);
float adcOffset = reg->getRegisterFloat(dinoRegisterAdcOffset);
float dacScale = reg->getRegisterFloat(dinoRegisterDacScale);
float dacOffset = reg->getRegisterFloat(dinoRegisterDacOffset);
uint32_t dacExternalTrig = reg->getRegister(dinoRegisterDacExternalTrig);
uint32_t stsActive = reg->getRegister(dinoRegisterStsActive);
logging.get("Dino")->info(
"Check: Register configuration: Rate: {}, Rate-Error: {} Hz, ADC Scale: "
"{}, ADC Offset: {}, DAC Scale: {}, DAC Offset: {}, DAC External Trig: "
"{:#x}, STS Active: {:#x}",
rate, rateError, adcScale, adcOffset, dacScale, dacOffset,
dacExternalTrig, stsActive);
}
DinoDac::DinoDac() : Dino() {}