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

Dependents:   JRO_DDSv2 JRO_DDSv2_rev2019

Committer:
miguelcordero191
Date:
Tue Feb 24 20:08:13 2015 +0000
Revision:
0:156a9e15919e
Child:
1:d81fca2297fb
DDS AD9854. Library to configure a AD9854.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miguelcordero191 0:156a9e15919e 1 #ifndef AD9854_SER_DRIVER
miguelcordero191 0:156a9e15919e 2 #define AD9854_SER_DRIVER
miguelcordero191 0:156a9e15919e 3
miguelcordero191 0:156a9e15919e 4 #include "mbed.h"
miguelcordero191 0:156a9e15919e 5 #include "SerialDriver.h"
miguelcordero191 0:156a9e15919e 6
miguelcordero191 0:156a9e15919e 7 #define SPI_BITS 8
miguelcordero191 0:156a9e15919e 8 #define SPI_MODE 0
miguelcordero191 0:156a9e15919e 9 #define SPI_FREQ 1000000
miguelcordero191 0:156a9e15919e 10
miguelcordero191 0:156a9e15919e 11 #define DDS_CMD_RESET 0X10
miguelcordero191 0:156a9e15919e 12 #define DDS_CMD_ENABLE_RF 0x11
miguelcordero191 0:156a9e15919e 13 #define DDS_CMD_MULTIPLIER 0X12
miguelcordero191 0:156a9e15919e 14 #define DDS_CMD_MODE 0x13
miguelcordero191 0:156a9e15919e 15 #define DDS_CMD_FREQUENCYA 0X14
miguelcordero191 0:156a9e15919e 16 #define DDS_CMD_FREQUENCYB 0x15
miguelcordero191 0:156a9e15919e 17 #define DDS_CMD_PHASEA 0X16
miguelcordero191 0:156a9e15919e 18 #define DDS_CMD_PHASEB 0x17
miguelcordero191 0:156a9e15919e 19 #define DDS_CMD_AMPLITUDE1 0X18
miguelcordero191 0:156a9e15919e 20 #define DDS_CMD_AMPLITUDE2 0x19
miguelcordero191 0:156a9e15919e 21 #define DDS_CMD_READ 0x8000
miguelcordero191 0:156a9e15919e 22
miguelcordero191 0:156a9e15919e 23 class DDS{
miguelcordero191 0:156a9e15919e 24 private:
miguelcordero191 0:156a9e15919e 25 float clock; // Work frequency in MHz
miguelcordero191 0:156a9e15919e 26 char cr_multiplier; // Multiplier 4- 20
miguelcordero191 0:156a9e15919e 27 char cr_mode; // Single, FSK, Ramped FSK, Chirp, BPSK
miguelcordero191 0:156a9e15919e 28 bool cr_qdac_pwdn; // Q DAC power down enable: 0 -> disable
miguelcordero191 0:156a9e15919e 29 bool cr_ioupdclk; // IO Update clock enable: 0 -> input
miguelcordero191 0:156a9e15919e 30 bool cr_inv_sinc; // Inverse sinc filter enable: 0 -> enable
miguelcordero191 0:156a9e15919e 31 bool cr_osk_en; // Enable AM: 0 -> disabled
miguelcordero191 0:156a9e15919e 32 bool cr_osk_int; // ext/int output shaped control: 0 -> external
miguelcordero191 0:156a9e15919e 33 bool cr_msb_lsb; // msb/lsb bit first: 0 -> MSB
miguelcordero191 0:156a9e15919e 34 bool cr_sdo; // SDO pin active: 0 -> inactive
miguelcordero191 0:156a9e15919e 35
miguelcordero191 0:156a9e15919e 36 char frequency1[6];
miguelcordero191 0:156a9e15919e 37 char frequency2[6];
miguelcordero191 0:156a9e15919e 38 char phase1[2];
miguelcordero191 0:156a9e15919e 39 char phase2[2];
miguelcordero191 0:156a9e15919e 40 char amplitudeI[2];
miguelcordero191 0:156a9e15919e 41 char amplitudeQ[2];
miguelcordero191 0:156a9e15919e 42 bool rf_enabled;
miguelcordero191 0:156a9e15919e 43
miguelcordero191 0:156a9e15919e 44 double factor_freq1;
miguelcordero191 0:156a9e15919e 45 double factor_freq2;
miguelcordero191 0:156a9e15919e 46
miguelcordero191 0:156a9e15919e 47 SPI *spi_device;
miguelcordero191 0:156a9e15919e 48 //DDS I/O
miguelcordero191 0:156a9e15919e 49 DigitalOut *dds_mreset;
miguelcordero191 0:156a9e15919e 50 DigitalOut *dds_outramp;
miguelcordero191 0:156a9e15919e 51 DigitalOut *dds_sp_mode;
miguelcordero191 0:156a9e15919e 52 DigitalOut *dds_cs;
miguelcordero191 0:156a9e15919e 53 DigitalOut *dds_io_reset;
miguelcordero191 0:156a9e15919e 54 DigitalInOut *dds_updclk;
miguelcordero191 0:156a9e15919e 55
miguelcordero191 0:156a9e15919e 56 char* cmd_answer;
miguelcordero191 0:156a9e15919e 57 unsigned long cmd_answer_len;
miguelcordero191 0:156a9e15919e 58
miguelcordero191 0:156a9e15919e 59 int __writeData(char addr, char ndata, const char* data);
miguelcordero191 0:156a9e15919e 60 char* __readData(char addr, char ndata);
miguelcordero191 0:156a9e15919e 61 int __writeDataAndVerify(char addr, char ndata, const char* wr_spi_data, SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 62 char* __getControlRegister();
miguelcordero191 0:156a9e15919e 63 int __writeControlRegister();
miguelcordero191 0:156a9e15919e 64
miguelcordero191 0:156a9e15919e 65 public:
miguelcordero191 0:156a9e15919e 66 bool isConfig;
miguelcordero191 0:156a9e15919e 67
miguelcordero191 0:156a9e15919e 68
miguelcordero191 0:156a9e15919e 69 DDS(SPI *spi_dev, DigitalOut *mreset, DigitalOut *outramp, DigitalOut *spmode, DigitalOut *cs, DigitalOut *ioreset, DigitalInOut *updclk);
miguelcordero191 0:156a9e15919e 70 int init();
miguelcordero191 0:156a9e15919e 71 int reset();
miguelcordero191 0:156a9e15919e 72 int scanIOUpdate();
miguelcordero191 0:156a9e15919e 73 int find();
miguelcordero191 0:156a9e15919e 74 char* rdMode();
miguelcordero191 0:156a9e15919e 75 char* rdMultiplier();
miguelcordero191 0:156a9e15919e 76 char* rdPhase1();
miguelcordero191 0:156a9e15919e 77 char* rdPhase2();
miguelcordero191 0:156a9e15919e 78 char* rdFrequency1();
miguelcordero191 0:156a9e15919e 79 char* rdFrequency2();
miguelcordero191 0:156a9e15919e 80 char* rdAmplitudeI();
miguelcordero191 0:156a9e15919e 81 char* rdAmplitudeQ();
miguelcordero191 0:156a9e15919e 82 int isRFEnabled();
miguelcordero191 0:156a9e15919e 83 int wrMode(char mode);
miguelcordero191 0:156a9e15919e 84 int wrMultiplier(char multiplier, float clock=200.0);
miguelcordero191 0:156a9e15919e 85 int wrPhase1(char* phase, SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 86 int wrPhase2(char* phase, SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 87 int wrFrequency1(char* freq, SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 88 int wrFrequency2(char* freq, SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 89 int wrAmplitudeI(char* amplitude, SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 90 int wrAmplitudeQ(char* amplitude, SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 91 int enableRF();
miguelcordero191 0:156a9e15919e 92 int disableRF();
miguelcordero191 0:156a9e15919e 93 int defaultSettings(SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 94 char* setCommand(unsigned short cmd, char* payload, unsigned long payload_len);
miguelcordero191 0:156a9e15919e 95 char* getCmdAnswer();
miguelcordero191 0:156a9e15919e 96 unsigned long getCmdAnswerLen();
miguelcordero191 0:156a9e15919e 97 int setAllDevice(char* payload, SerialDriver *screen=NULL);
miguelcordero191 0:156a9e15919e 98 bool wasInitialized();
miguelcordero191 0:156a9e15919e 99 char getMultiplier();
miguelcordero191 0:156a9e15919e 100 double getFreqFactor1();
miguelcordero191 0:156a9e15919e 101 double getFreqFactor2();
miguelcordero191 0:156a9e15919e 102 char getMode();
miguelcordero191 0:156a9e15919e 103 char* getModeStr();
miguelcordero191 0:156a9e15919e 104
miguelcordero191 0:156a9e15919e 105 };
miguelcordero191 0:156a9e15919e 106
miguelcordero191 0:156a9e15919e 107 #endif