mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-04 22:17:31 +00:00
embedded code copied from jankae/VNA and adjusted for STM32G4
This commit is contained in:
parent
7af204b349
commit
30d4ebe37b
215 changed files with 186208 additions and 0 deletions
81
Software/VNA_embedded/Application/Drivers/max2871.hpp
Normal file
81
Software/VNA_embedded/Application/Drivers/max2871.hpp
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
#pragma once
|
||||
|
||||
#include "stm.hpp"
|
||||
|
||||
class MAX2871 {
|
||||
public:
|
||||
constexpr MAX2871(SPI_HandleTypeDef *hspi, GPIO_TypeDef *LE = nullptr,
|
||||
uint16_t LEpin = 0, GPIO_TypeDef *RF_EN = nullptr,
|
||||
uint16_t RF_ENpin = 0, GPIO_TypeDef *LD = nullptr, uint16_t LDpin = 0,
|
||||
GPIO_TypeDef *CE = nullptr, uint16_t CEpin = 0,
|
||||
GPIO_TypeDef *MUX = nullptr, uint16_t MUXpin = 0) :
|
||||
regs(), f_PFD(0),
|
||||
hspi(hspi),
|
||||
CE(CE), CEpin(CEpin),
|
||||
LE(LE), LEpin(LEpin),
|
||||
MUX(MUX), MUXpin(MUXpin),
|
||||
RF_EN(RF_EN), RF_ENpin(RF_ENpin),
|
||||
LD(LD), LDpin(LDpin),
|
||||
outputFrequency(0),
|
||||
VCOmax(),
|
||||
gotVCOMap(false)
|
||||
{};
|
||||
|
||||
bool Init();
|
||||
bool Init(uint32_t f_ref, bool doubler, uint16_t r, bool div2);
|
||||
bool SetReference(uint32_t f_ref, bool doubler, uint16_t r, bool div2);
|
||||
void ChipEnable(bool on);
|
||||
void RFEnable(bool on);
|
||||
bool Locked();
|
||||
enum class Power : uint8_t {
|
||||
n4dbm = 0x00,
|
||||
n1dbm = 0x01,
|
||||
p2dbm = 0x02,
|
||||
p5dbm = 0x03,
|
||||
};
|
||||
void SetPowerOutA(Power p, bool enabled = true);
|
||||
void SetPowerOutB(Power p, bool enabled = true);
|
||||
enum class Mode : uint8_t {
|
||||
LowNoise = 0x00,
|
||||
LowSpur1 = 0x02,
|
||||
LowSpur2 = 0x03,
|
||||
};
|
||||
void SetMode(Mode m);
|
||||
enum class CPMode : uint8_t {
|
||||
Disabled = 0x00,
|
||||
CP10 = 0x01,
|
||||
CP20 = 0x02,
|
||||
CP30 = 0x03,
|
||||
};
|
||||
void SetCPMode(CPMode m);
|
||||
void SetCPCurrent(uint8_t mA);
|
||||
bool SetFrequency(uint64_t f);
|
||||
void Update();
|
||||
void UpdateFrequency();
|
||||
bool BuildVCOMap();
|
||||
uint8_t GetTemp();
|
||||
uint32_t* GetRegisters() {
|
||||
return regs;
|
||||
}
|
||||
private:
|
||||
static constexpr uint64_t MaxFreq = 6100000000; // 6GHz according to datasheet, but slight overclocking is possible
|
||||
|
||||
uint32_t Read();
|
||||
void Write(uint8_t reg, uint32_t val);
|
||||
uint32_t regs[6];
|
||||
uint32_t f_PFD;
|
||||
SPI_HandleTypeDef *hspi;
|
||||
GPIO_TypeDef *CE;
|
||||
uint16_t CEpin;
|
||||
GPIO_TypeDef *LE;
|
||||
uint16_t LEpin;
|
||||
GPIO_TypeDef *MUX;
|
||||
uint16_t MUXpin;
|
||||
GPIO_TypeDef *RF_EN;
|
||||
uint16_t RF_ENpin;
|
||||
GPIO_TypeDef *LD;
|
||||
uint16_t LDpin;
|
||||
uint64_t outputFrequency;
|
||||
uint16_t VCOmax[64];
|
||||
bool gotVCOMap;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue