DDS AD9854, library to configure a AD9854 Serial Interface (SPI)
Dependents: JRO_DDSv2 JRO_DDSv2_rev2019
AD9854.h@0:156a9e15919e, 2015-02-24 (annotated)
- 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?
User | Revision | Line number | New 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 |