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

Dependents:   JRO_DDSv2 JRO_DDSv2_rev2019

AD9854.h

Committer:
miguelcordero191
Date:
2015-02-24
Revision:
0:156a9e15919e
Child:
1:d81fca2297fb

File content as of revision 0:156a9e15919e:

#ifndef        AD9854_SER_DRIVER
#define        AD9854_SER_DRIVER

#include "mbed.h"
#include "SerialDriver.h"

#define SPI_BITS 8
#define SPI_MODE 0
#define SPI_FREQ 1000000

#define DDS_CMD_RESET       0X10
#define DDS_CMD_ENABLE_RF   0x11
#define DDS_CMD_MULTIPLIER  0X12
#define DDS_CMD_MODE        0x13
#define DDS_CMD_FREQUENCYA  0X14
#define DDS_CMD_FREQUENCYB  0x15
#define DDS_CMD_PHASEA      0X16
#define DDS_CMD_PHASEB      0x17
#define DDS_CMD_AMPLITUDE1  0X18
#define DDS_CMD_AMPLITUDE2  0x19
#define DDS_CMD_READ        0x8000

class DDS{
    private:
        float           clock;              // Work frequency in MHz
        char            cr_multiplier;         // Multiplier 4- 20
        char            cr_mode;                // Single, FSK, Ramped FSK, Chirp, BPSK
        bool            cr_qdac_pwdn;           // Q DAC power down enable: 0 -> disable
        bool            cr_ioupdclk;            // IO Update clock enable: 0 -> input
        bool            cr_inv_sinc;            // Inverse sinc filter enable: 0 -> enable
        bool            cr_osk_en;              // Enable AM: 0 -> disabled
        bool            cr_osk_int;             // ext/int output shaped control: 0 -> external
        bool            cr_msb_lsb;             // msb/lsb bit first: 0 -> MSB
        bool            cr_sdo;                 // SDO pin active: 0 -> inactive

        char            frequency1[6];
        char            frequency2[6];
        char            phase1[2];
        char            phase2[2];       
        char            amplitudeI[2];
        char            amplitudeQ[2];
        bool            rf_enabled;
       
        double          factor_freq1;
        double          factor_freq2;
        
        SPI             *spi_device;
        //DDS I/O
        DigitalOut      *dds_mreset;
        DigitalOut      *dds_outramp;
        DigitalOut      *dds_sp_mode;
        DigitalOut      *dds_cs;
        DigitalOut      *dds_io_reset;
        DigitalInOut    *dds_updclk;
        
        char*           cmd_answer;
        unsigned long   cmd_answer_len;
        
        int __writeData(char addr, char ndata, const char* data);
        char* __readData(char addr, char ndata);
        int __writeDataAndVerify(char addr, char ndata, const char* wr_spi_data, SerialDriver *screen=NULL);
        char* __getControlRegister();
        int __writeControlRegister();
        
    public:
        bool isConfig;

        
        DDS(SPI *spi_dev, DigitalOut *mreset, DigitalOut *outramp, DigitalOut *spmode, DigitalOut *cs, DigitalOut *ioreset, DigitalInOut *updclk);
        int init();
        int reset();
        int scanIOUpdate();
        int find();
        char* rdMode();
        char* rdMultiplier();
        char* rdPhase1();
        char* rdPhase2();
        char* rdFrequency1();
        char* rdFrequency2();
        char* rdAmplitudeI();
        char* rdAmplitudeQ();
        int isRFEnabled();
        int wrMode(char mode);
        int wrMultiplier(char multiplier, float clock=200.0);
        int wrPhase1(char* phase, SerialDriver *screen=NULL);
        int wrPhase2(char* phase, SerialDriver *screen=NULL);
        int wrFrequency1(char* freq, SerialDriver *screen=NULL);
        int wrFrequency2(char* freq, SerialDriver *screen=NULL);
        int wrAmplitudeI(char* amplitude, SerialDriver *screen=NULL);
        int wrAmplitudeQ(char* amplitude, SerialDriver *screen=NULL);
        int enableRF();
        int disableRF();
        int defaultSettings(SerialDriver *screen=NULL);
        char* setCommand(unsigned short cmd, char* payload, unsigned long payload_len);
        char* getCmdAnswer();
        unsigned long getCmdAnswerLen();
        int setAllDevice(char* payload, SerialDriver *screen=NULL);
        bool wasInitialized();
        char getMultiplier();
        double getFreqFactor1();
        double getFreqFactor2();
        char getMode();
        char* getModeStr();
        
};

#endif