DDS AD9854, library to configure a AD9854 Serial Interface (SPI)

Dependents:   JRO_DDSv2 JRO_DDSv2_rev2019

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers AD9854.h Source File

AD9854.h

00001 #ifndef        AD9854_SER_DRIVER
00002 #define        AD9854_SER_DRIVER
00003 
00004 #include "mbed.h"
00005 #include "SerialDriver.h"
00006 
00007 #define SPI_BITS 8
00008 #define SPI_MODE 0
00009 #define SPI_FREQ 1000000
00010 
00011 #define DDS_CMD_STATUS      0X04
00012 
00013 #define DDS_CMD_RESET       0X10
00014 #define DDS_CMD_ENABLE_RF   0x11
00015 #define DDS_CMD_MULTIPLIER  0X12
00016 #define DDS_CMD_MODE        0x13
00017 #define DDS_CMD_FREQUENCYA  0X14
00018 #define DDS_CMD_FREQUENCYB  0x15
00019 #define DDS_CMD_PHASEA      0X16
00020 #define DDS_CMD_PHASEB      0x17
00021 #define DDS_CMD_AMPLITUDE1  0X18
00022 #define DDS_CMD_AMPLITUDE2  0x19
00023 #define DDS_CMD_ENABLE_AMP      0x1A
00024 #define DDS_CMD_AMP_RAMP_RATE   0x1B
00025 #define DDS_CMD_DELTA_FREQ      0x1C
00026 #define DDS_CMD_UPD_CLOCK       0x1D
00027 #define DDS_CMD_RAMP_RATE_CLOCK 0x1E
00028 
00029 #define DDS_CMD_WRITE       0x50
00030 #define DDS_CMD_READ        0x8000
00031 
00032 #define MSG_CMD_KO          "0:Command not recognized"
00033 #define MSG_CMD_OK          "1:Configuration received and saved"
00034 
00035 #define MSG_STATUS_FAIL     "0:DDS Clock not connected"
00036 #define MSG_STATUS_ON       "1:DDS was not programmed"
00037 #define MSG_STATUS_RF_DIS   "2:RF disabled"
00038 #define MSG_STATUS_RF_ENA   "3:RF enabled"
00039 
00040 #define MSG_DISABLED     "0:ENABLED"
00041 #define MSG_ENABLED      "1:DISABLED"
00042 
00043 
00044 class DDS{
00045     private:
00046         float           clock;              // Work frequency in MHz
00047         char            cr_multiplier;         // Multiplier 4- 20
00048         char            cr_mode;                // Single, FSK, Ramped FSK, Chirp, BPSK
00049         bool            cr_qdac_pwdn;           // Q DAC power down enable: 0 -> disable
00050         bool            cr_ioupdclk;            // IO Update clock enable: 0 -> input
00051         bool            cr_inv_sinc;            // Inverse sinc filter enable: 0 -> enable
00052         bool            cr_osk_en;              // Enable AM: 0 -> disabled
00053         bool            cr_osk_int;             // ext/int output shaped control: 0 -> external
00054         bool            cr_msb_lsb;             // msb/lsb bit first: 0 -> MSB
00055         bool            cr_sdo;                 // SDO pin active: 0 -> inactive
00056         bool            cr_pll_range;
00057         bool            cr_pll_bypass;
00058     
00059         bool            cr_osk_en_bkp;              // Enable AM: 0 -> disabled
00060         bool            cr_osk_int_bkp;
00061     
00062         char            frequency1[6];
00063         char            frequency2[6];
00064         char            phase1[2];
00065         char            phase2[2];       
00066         char            amplitudeI[2];
00067         char            amplitudeQ[2];
00068         char            delta_frequency[6];
00069         char            update_clock[4];
00070         char            ramp_rate_clock[3];
00071         char            amplitude_ramp_rate[1];
00072         
00073         bool            rf_enabled;
00074         bool            programmed;
00075        
00076         double          factor_freq1;
00077         double          factor_freq2;
00078         
00079         SPI             *spi_device;
00080         //DDS I/O
00081         DigitalOut      *dds_mreset;
00082         DigitalOut      *dds_outramp;
00083         DigitalOut      *dds_sp_mode;
00084         DigitalOut      *dds_cs;
00085         DigitalOut      *dds_io_reset;
00086         DigitalInOut    *dds_updclk;
00087         
00088         char*           cmd_answer;
00089         unsigned long   cmd_answer_len;
00090         
00091         int __writeData(char addr, char ndata, const char* data);
00092         char* __readData(char addr, char ndata);
00093         int __writeDataAndVerify(char addr, char ndata, char* wr_spi_data, SerialDriver *screen=NULL);
00094         char* __getControlRegister();
00095         int __writeControlRegister();
00096         
00097     public:
00098         bool isConfig;
00099 
00100         
00101         DDS(SPI *spi_dev, DigitalOut *mreset, DigitalOut *outramp, DigitalOut *spmode, DigitalOut *cs, DigitalOut *ioreset, DigitalInOut *updclk);
00102         int init();
00103         int reset();
00104         int scanIOUpdate();
00105         int find();
00106         char* rdMode();
00107         char* rdMultiplier();
00108         char* rdPhase1();
00109         char* rdPhase2();
00110         char* rdFrequency1();
00111         char* rdFrequency2();
00112         char* rdAmplitudeI();
00113         char* rdAmplitudeQ();
00114         char* rdDeltaFrequency();
00115         char* rdUpdateClock();
00116         char* rdRampRateClock();
00117         char* rdAmplitudeRampRate();
00118         
00119         int isRFEnabled();
00120         int isAmplitudeEnabled();
00121         
00122         int wrMode(char mode);
00123         int wrMultiplier(char multiplier, float clock=200.0);
00124         int wrPhase1(char* phase, SerialDriver *screen=NULL);
00125         int wrPhase2(char* phase, SerialDriver *screen=NULL);
00126         int wrFrequency1(char* freq, SerialDriver *screen=NULL);
00127         int wrFrequency2(char* freq, SerialDriver *screen=NULL);
00128         int wrAmplitudeI(char* amplitude, SerialDriver *screen=NULL);
00129         int wrAmplitudeQ(char* amplitude, SerialDriver *screen=NULL);
00130         int wrDeltaFrequency(char* delta_freq, SerialDriver *screen=NULL);
00131         int wrUpdateClock(char* upd_clock, SerialDriver *screen=NULL);
00132         int wrRampRateClock(char* rr_clock, SerialDriver *screen=NULL);
00133         int wrAmplitudeRampRate(char* ampl_ramp_rate, SerialDriver *screen=NULL);
00134         
00135         int enableRF();
00136         int disableRF();
00137         int enableAmplitude();
00138         int disableAmplitude();
00139         
00140         int defaultSettings(SerialDriver *screen=NULL);
00141         char* setCommand(unsigned short cmd, char* payload, unsigned long payload_len);
00142         char* getCmdAnswer();
00143         unsigned long getCmdAnswerLen();
00144         
00145         bool wasInitialized();
00146         char getMultiplier();
00147         double getFreqFactor1();
00148         double getFreqFactor2();
00149         char getMode();
00150         char* getModeStr();
00151         
00152         int writeAllDevice(char* payload, SerialDriver *screen=NULL);
00153         char* readAllDevice();
00154         
00155 };
00156 
00157 #endif