DDS AD9854, library to configure a AD9854 Serial Interface (SPI)
Dependents: JRO_DDSv2 JRO_DDSv2_rev2019
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
Generated on Tue Jul 12 2022 22:13:42 by
