101 lines
2.1 KiB
C++
101 lines
2.1 KiB
C++
/**
|
|
@file Si5351C.h
|
|
@brief Header for Si5351C.cpp
|
|
@author Lime Microsystems
|
|
*/
|
|
|
|
#ifndef SI5351C_MODULE
|
|
#define SI5351C_MODULE
|
|
|
|
#include <stdio.h>
|
|
#include <string>
|
|
using namespace std;
|
|
//---------------------------------------------------------------------------
|
|
|
|
enum eSi_CLOCK_INPUT
|
|
{
|
|
Si_CLKIN,
|
|
Si_XTAL,
|
|
Si_CMOS
|
|
};
|
|
|
|
struct Si5351_Channel
|
|
{
|
|
Si5351_Channel() : outputDivider(1), outputFreqHz(1), multisynthDivider(1), pllSource(0),
|
|
phaseOffset(0), powered(true), inverted(false), int_mode(false) {};
|
|
int outputDivider;
|
|
unsigned long outputFreqHz;
|
|
float multisynthDivider;
|
|
int pllSource;
|
|
float phaseOffset;
|
|
bool powered;
|
|
bool inverted;
|
|
bool int_mode;
|
|
};
|
|
|
|
struct Si5351_PLL
|
|
{
|
|
Si5351_PLL() : inputFreqHz(0), VCO_Hz(0), feedbackDivider(0), CLKIN_DIV(1), CLK_SRC(1) {}
|
|
unsigned long inputFreqHz;
|
|
float VCO_Hz;
|
|
float feedbackDivider;
|
|
int CLKIN_DIV;
|
|
int CLK_SRC; //0-XTAL, 1-CLKIN
|
|
};
|
|
|
|
class LMScomms;
|
|
class Si5351C
|
|
{
|
|
public:
|
|
enum Status
|
|
{
|
|
SUCCESS,
|
|
FAILED,
|
|
};
|
|
|
|
struct StatusBits
|
|
{
|
|
StatusBits() : sys_init(0), sys_init_stky(0), lol_b(0), lol_b_stky(0), lol_a(0), lol_a_stky(0), los(0), los_stky(0)
|
|
{
|
|
|
|
}
|
|
int sys_init;
|
|
int sys_init_stky;
|
|
int lol_b;
|
|
int lol_b_stky;
|
|
int lol_a;
|
|
int lol_a_stky;
|
|
int los;
|
|
int los_stky;
|
|
};
|
|
|
|
StatusBits GetStatusBits();
|
|
Status ClearStatus();
|
|
|
|
Si5351C();
|
|
~Si5351C();
|
|
void Initialize(LMScomms *mng);
|
|
bool LoadRegValuesFromFile(string FName);
|
|
|
|
void SetPLL(unsigned char id, unsigned long CLKIN_Hz, int CLK_SRC);
|
|
void SetClock(unsigned char id, unsigned long fOut_Hz, bool enabled = true, bool inverted = false);
|
|
|
|
Status UploadConfiguration();
|
|
Status ConfigureClocks();
|
|
void Reset();
|
|
|
|
private:
|
|
void FindVCO(Si5351_Channel *clocks, Si5351_PLL *plls, const unsigned long Fmin, const unsigned long Fmax);
|
|
LMScomms *device;
|
|
|
|
Si5351_PLL PLL[2];
|
|
Si5351_Channel CLK[8];
|
|
|
|
static const unsigned char m_defaultConfiguration[];
|
|
unsigned char m_newConfiguration[255];
|
|
|
|
|
|
};
|
|
|
|
#endif // SI5351C_MODULE
|