Joaquin Verastegui / jro

Dependents:   JRO_CR2 frdm_test

Fork of jro by Miguel Urco

JroDDS.h

Committer:
miguelcordero191
Date:
2015-02-05
Revision:
3:f0e6c145b075
Parent:
2:3d8d52e9751c
Child:
4:de495ce256b8

File content as of revision 3:f0e6c145b075:

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

#define SPI_BITS 8
#define SPI_MODE 0
#define SPI_FREQ 10000

#define DDS_CMD_RESET       0X10
#define DDS_CMD_ENABLE_RF   0x11
#define DDS_CMD_MULTIPLIER  0X12
#define DDS_CMD_MODE        0x13
#define DDS_CMD_FREQUENCY1  0X14
#define DDS_CMD_FREQUENCY2  0x15
#define DDS_CMD_PHASE1      0X16
#define DDS_CMD_PHASE2      0x17
#define DDS_CMD_AMPLITUDEI  0X18
#define DDS_CMD_AMPLITUDEQ  0x19
#define DDS_CMD_READ        0x8000

class DDS{
    private:
        float           frequency;              // 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
        
        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            frequency1[6];
        char            frequency2[6];
        char            phase1[2];
        char            phase2[2];       
        char            amplitudeI[2];
        char            amplitudeQ[2];
        bool            rf_enabled;
        
        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 wrMode(char mode);
        int wrMultiplier(char multiplier, float clock);
        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);
    
};