2021-05-02 00:34:53 +08:00
|
|
|
#include <Cal.hpp>
|
2020-09-17 15:53:52 +08:00
|
|
|
#include "Generator.hpp"
|
|
|
|
#include "Manual.hpp"
|
|
|
|
#include "Hardware.hpp"
|
2022-06-23 23:51:15 +08:00
|
|
|
#include "HW_HAL.hpp"
|
2020-09-17 15:53:52 +08:00
|
|
|
#include "max2871.hpp"
|
|
|
|
#include "Si5351C.hpp"
|
|
|
|
|
2022-06-23 23:51:15 +08:00
|
|
|
using namespace HWHAL;
|
|
|
|
|
2020-09-17 15:53:52 +08:00
|
|
|
void Generator::Setup(Protocol::GeneratorSettings g) {
|
2022-06-23 23:51:15 +08:00
|
|
|
HW::SetMode(HW::Mode::Generator);
|
2020-09-17 15:53:52 +08:00
|
|
|
if(g.activePort == 0) {
|
2022-06-23 23:51:15 +08:00
|
|
|
// both ports disabled, no need to configure PLLs
|
|
|
|
Si5351.Disable(SiChannel::LowbandSource);
|
|
|
|
FPGA::Disable(FPGA::Periphery::SourceChip);
|
|
|
|
FPGA::Disable(FPGA::Periphery::Amplifier);
|
|
|
|
FPGA::Disable(FPGA::Periphery::SourceRF);
|
|
|
|
FPGA::Disable(FPGA::Periphery::PortSwitch);
|
|
|
|
FPGA::DisableHardwareOverwrite();
|
|
|
|
return;
|
2020-09-17 15:53:52 +08:00
|
|
|
}
|
2020-11-18 06:03:13 +08:00
|
|
|
|
2021-05-02 00:34:53 +08:00
|
|
|
g.frequency = Cal::FrequencyCorrectionToDevice(g.frequency);
|
2020-11-19 02:19:29 +08:00
|
|
|
auto amplitude = HW::GetAmplitudeSettings(g.cdbm_level, g.frequency, g.applyAmplitudeCorrection, g.activePort == 2);
|
2020-09-17 15:53:52 +08:00
|
|
|
// Select correct source
|
2022-06-23 23:51:15 +08:00
|
|
|
bool bandSelect;
|
|
|
|
FPGA::LowpassFilter lp = FPGA::LowpassFilter::M947;
|
2020-11-19 02:19:29 +08:00
|
|
|
if(g.frequency < HW::BandSwitchFrequency) {
|
2022-06-23 23:51:15 +08:00
|
|
|
bandSelect = true;
|
|
|
|
FPGA::Disable(FPGA::Periphery::SourceChip);
|
|
|
|
Si5351.SetCLK(SiChannel::LowbandSource, g.frequency, Si5351C::PLL::B,
|
|
|
|
amplitude.lowBandPower);
|
|
|
|
Si5351.Enable(SiChannel::LowbandSource);
|
2020-09-17 15:53:52 +08:00
|
|
|
} else {
|
2022-06-23 23:51:15 +08:00
|
|
|
bandSelect = false;
|
|
|
|
Si5351.Disable(SiChannel::LowbandSource);
|
|
|
|
FPGA::Enable(FPGA::Periphery::SourceChip);
|
|
|
|
FPGA::SetMode(FPGA::Mode::SourcePLL);
|
|
|
|
Source.SetPowerOutA(amplitude.highBandPower);
|
|
|
|
Source.SetFrequency(g.frequency);
|
|
|
|
Source.Update();
|
|
|
|
FPGA::SetMode(FPGA::Mode::FPGA);
|
2020-09-17 15:53:52 +08:00
|
|
|
if(g.frequency < 900000000UL) {
|
2022-06-23 23:51:15 +08:00
|
|
|
lp = FPGA::LowpassFilter::M947;
|
2020-09-17 15:53:52 +08:00
|
|
|
} else if(g.frequency < 1800000000UL) {
|
2022-06-23 23:51:15 +08:00
|
|
|
lp = FPGA::LowpassFilter::M1880;
|
2020-09-17 15:53:52 +08:00
|
|
|
} else if(g.frequency < 3500000000UL) {
|
2022-06-23 23:51:15 +08:00
|
|
|
lp = FPGA::LowpassFilter::M3500;
|
2020-09-17 15:53:52 +08:00
|
|
|
} else {
|
2022-06-23 23:51:15 +08:00
|
|
|
lp = FPGA::LowpassFilter::None;
|
2020-09-17 15:53:52 +08:00
|
|
|
}
|
|
|
|
}
|
2020-11-18 06:03:13 +08:00
|
|
|
|
2022-06-23 23:51:15 +08:00
|
|
|
FPGA::OverwriteHardware(amplitude.attenuator, lp, bandSelect, g.activePort == 1, g.activePort == 2);
|
2021-04-10 18:52:43 +08:00
|
|
|
HW::SetOutputUnlevel(amplitude.unlevel);
|
2022-06-23 23:51:15 +08:00
|
|
|
FPGA::Enable(FPGA::Periphery::Amplifier, true);
|
|
|
|
FPGA::Enable(FPGA::Periphery::SourceRF, true);
|
|
|
|
FPGA::Enable(FPGA::Periphery::PortSwitch, true);
|
2020-09-17 15:53:52 +08:00
|
|
|
}
|